googleapis/mcp-toolbox · error
error executing go template %s
Error message
error executing go template %s
What it means
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.
Source
Thrown at internal/util/parameters/parameters.go:296
func ResolveTemplateParams(templateParams Parameters, originalStatement string, paramsMap map[string]any) (string, error) {
templateParamsValues, err := GetParams(templateParams, paramsMap)
templateParamsMap := templateParamsValues.AsMap()
if err != nil {
return "", fmt.Errorf("error getting template params %s", err)
}
funcMap := template.FuncMap{
"array": ConvertArrayParamToString,
}
t, err := template.New("statement").Funcs(funcMap).Parse(originalStatement)
if err != nil {
return "", fmt.Errorf("error creating go template %s", err)
}
var result bytes.Buffer
err = t.Execute(&result, templateParamsMap)
if err != nil {
return "", fmt.Errorf("error executing go template %s", err)
}
modifiedStatement := result.String()
return modifiedStatement, nil
}
// ProcessParameters concatenate templateParameters and parameters from a tool.
// It returns a list of concatenated parameters, concatenated Toolbox manifest, and concatenated MCP Manifest.
func ProcessParameters(templateParams Parameters, params Parameters) (Parameters, []ParameterManifest, error) {
allParameters := slices.Concat(params, templateParams)
// verify no duplicate parameter names
err := CheckDuplicateParameters(allParameters)
if err != nil {
return nil, nil, err
}
// verify parameter restrictionsView on GitHub (pinned to 8cc6e09de2)
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.
Example fix
# before: {{.limit}} never supplied
SELECT * FROM {{.table}} LIMIT {{.limit}}
# after: parameter declared with default
parameters:
- name: limit
type: integer
default: 10
statement: SELECT * FROM {{.table}} LIMIT {{.limit}} Defensive patterns
Strategy: validation
Validate before calling
// dry-run render with sample values before invoking
tmpl, err := template.New("s").Funcs(funcMap).Parse(stmt)
if err == nil {
if err := tmpl.Execute(io.Discard, sampleParamMap); err != nil {
return fmt.Errorf("template render check failed: %w", err)
}
} Try / catch
out, err := params.ResolveTemplateParams(tp, stmt, m)
if err != nil && strings.Contains(err.Error(), "error executing go template") {
return fmt.Errorf("failed rendering statement with provided arguments: %w", err)
} Prevention
- 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').
When it happens
Trigger: 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).
Common situations: 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.
Related errors
- error creating go template %s
- error embedding parameters: %w
- error substituting params for message: %w
- failed to marshal param to JSON: %w
- error parsing template '%s': %w
AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05).
Data as JSON: /api/errors/f9cddc9e2365422b.
Report an issue: GitHub.