{"record":{"id":"f9cddc9e2365422b","repo":"googleapis/mcp-toolbox","slug":"error-executing-go-template-s","errorCode":null,"errorMessage":"error executing go template %s","messagePattern":"error executing go template (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/util/parameters/parameters.go","lineNumber":296,"sourceCode":"\nfunc ResolveTemplateParams(templateParams Parameters, originalStatement string, paramsMap map[string]any) (string, error) {\n\ttemplateParamsValues, err := GetParams(templateParams, paramsMap)\n\ttemplateParamsMap := templateParamsValues.AsMap()\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"error getting template params %s\", err)\n\t}\n\n\tfuncMap := template.FuncMap{\n\t\t\"array\": ConvertArrayParamToString,\n\t}\n\tt, err := template.New(\"statement\").Funcs(funcMap).Parse(originalStatement)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"error creating go template %s\", err)\n\t}\n\tvar result bytes.Buffer\n\terr = t.Execute(&result, templateParamsMap)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"error executing go template %s\", err)\n\t}\n\n\tmodifiedStatement := result.String()\n\treturn modifiedStatement, nil\n}\n\n// ProcessParameters concatenate templateParameters and parameters from a tool.\n// It returns a list of concatenated parameters, concatenated Toolbox manifest, and concatenated MCP Manifest.\nfunc ProcessParameters(templateParams Parameters, params Parameters) (Parameters, []ParameterManifest, error) {\n\tallParameters := slices.Concat(params, templateParams)\n\n\t// verify no duplicate parameter names\n\terr := CheckDuplicateParameters(allParameters)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\t// verify parameter restrictions","sourceCodeStart":278,"sourceCodeEnd":314,"githubUrl":"https://github.com/googleapis/mcp-toolbox/blob/8cc6e09de2ad7b8bffc77751799585a1401a48eb/internal/util/parameters/parameters.go#L278-L314","documentation":"ResolveTemplateParams wraps template.Execute failures with this message. The template parsed correctly, but rendering against the resolved parameter values failed — commonly referencing a key not present in templateParamsMap, wrong-arity helper calls, or type errors during pipeline evaluation.","triggerScenarios":"Executing the parsed statement when a {{.field}} names a key missing from the resolved map, {{array}} receives a non-array value, or a pipeline performs an operation unsupported for the value's type (e.g. indexing a scalar).","commonSituations":"Typos between statement placeholders and declared parameter names; optional parameters without defaults missing at render time; nested-field access {{.a.b}} on scalar params; invoking undeclared helpers.","solutions":["Ensure every {{.name}} in the statement matches a declared parameter that has a value; add defaults for optional ones.","Read the wrapped Execute error detail — it names the offending expression.","Only use the provided 'array' helper and pass it a string array.","Test the statement with representative parameter values before shipping the tool config."],"exampleFix":"# before: {{.limit}} never supplied\nSELECT * FROM {{.table}} LIMIT {{.limit}}\n\n# after: parameter declared with default\nparameters:\n  - name: limit\n    type: integer\n    default: 10\nstatement: SELECT * FROM {{.table}} LIMIT {{.limit}}","handlingStrategy":"validation","validationCode":"// dry-run render with sample values before invoking\ntmpl, err := template.New(\"s\").Funcs(funcMap).Parse(stmt)\nif err == nil {\n    if err := tmpl.Execute(io.Discard, sampleParamMap); err != nil {\n        return fmt.Errorf(\"template render check failed: %w\", err)\n    }\n}","typeGuard":null,"tryCatchPattern":"out, err := params.ResolveTemplateParams(tp, stmt, m)\nif err != nil && strings.Contains(err.Error(), \"error executing go template\") {\n    return fmt.Errorf(\"failed rendering statement with provided arguments: %w\", err)\n}","preventionTips":["Make every placeholder in the statement a declared parameter with a value or default.","Avoid nested-field access on scalar parameters.","Test-render each statement with representative values during development.","Only use helpers present in the provided funcMap ('array')."],"tags":["templates","go-templates","render"],"backgroundTag":"template-execution-failed","analyzedSha":"8cc6e09de2ad7b8bffc77751799585a1401a48eb","analyzedAt":"2026-09-05T01:10:36.887Z","contentChangedAt":"2026-09-05T01:10:36.887Z","schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}