MCPcopy Index your code
hub / github.com/github/gh-aw / GenerateMCPScriptGoToolScript

Function GenerateMCPScriptGoToolScript

pkg/workflow/mcp_scripts_generator.go:305–351  ·  view source on GitHub ↗

GenerateMCPScriptGoToolScript generates the Go script for a mcp-script tool Go scripts receive inputs as JSON via stdin and output JSON to stdout: - Input parameters are decoded from stdin into a map[string]any - Outputs are printed to stdout as JSON - Environment variables from env: field are avail

(toolConfig *MCPScriptToolConfig)

Source from the content-addressed store, hash-verified

303// - Outputs are printed to stdout as JSON
304// - Environment variables from env: field are available via os.Getenv()
305func GenerateMCPScriptGoToolScript(toolConfig *MCPScriptToolConfig) string {
306 mcpScriptsLog.Printf("Generating Go tool script: tool=%s, input_count=%d", toolConfig.Name, len(toolConfig.Inputs))
307 var sb strings.Builder
308
309 sb.WriteString("package main\n\n")
310 sb.WriteString("// Auto-generated mcp-script tool: " + toolConfig.Name + "\n")
311 sb.WriteString(formatMultiLineComment(toolConfig.Description, "// ") + "\n")
312 sb.WriteString("import (\n")
313 sb.WriteString("\t\"encoding/json\"\n")
314 sb.WriteString("\t\"fmt\"\n")
315 sb.WriteString("\t\"io\"\n")
316 sb.WriteString("\t\"os\"\n")
317 sb.WriteString(")\n\n")
318
319 sb.WriteString("func main() {\n")
320 sb.WriteString("\t// Read inputs from stdin (JSON format)\n")
321 sb.WriteString("\tvar inputs map[string]any\n")
322 sb.WriteString("\tinputData, err := io.ReadAll(os.Stdin)\n")
323 sb.WriteString("\tif err == nil && len(inputData) > 0 {\n")
324 sb.WriteString("\t\t_ = json.Unmarshal(inputData, &inputs)\n")
325 sb.WriteString("\t}\n")
326 sb.WriteString("\tif inputs == nil {\n")
327 sb.WriteString("\t\tinputs = make(map[string]any)\n")
328 sb.WriteString("\t}\n\n")
329
330 // Add helper comment about input parameters
331 if len(toolConfig.Inputs) > 0 {
332 sb.WriteString("\t// Input parameters available in 'inputs' map:\n")
333 // Sort input names for stable code generation
334 inputNames := sliceutil.SortedKeys(toolConfig.Inputs)
335 for _, paramName := range inputNames {
336 param := toolConfig.Inputs[paramName]
337 fmt.Fprintf(&sb, "\t// %s := inputs[\"%s\"] // %s\n", stringutil.SanitizePythonVariableName(paramName), paramName, param.Description)
338 }
339 sb.WriteString("\n")
340 }
341
342 // Add user's Go code with proper indentation
343 sb.WriteString("\t// User code:\n")
344 userCode := strings.TrimSpace(toolConfig.Go)
345 // Indent user code
346 indentedCode := strings.ReplaceAll(userCode, "\n", "\n\t")
347 sb.WriteString("\t" + indentedCode + "\n")
348 sb.WriteString("}\n")
349
350 return sb.String()
351}

Calls 5

SortedKeysFunction · 0.92
formatMultiLineCommentFunction · 0.85
PrintfMethod · 0.45
StringMethod · 0.45