googleapis/mcp-toolbox · error
error getting template params %s
Error message
error getting template params %s
What it means
ResolveTemplateParams wraps any error from GetParams with this message when resolving declared template parameters against the provided values map. It almost always wraps a 'missing parameter X' error — the statement cannot be rendered because a declared parameter has no value. The inner cause is appended to this prefix.
Source
Thrown at internal/util/parameters/parameters.go:283
// GetParams return the ParamValues that are associated with the Parameters.
func GetParams(params Parameters, paramValuesMap map[string]any) (ParamValues, error) {
resultParamValues := make(ParamValues, 0)
for _, p := range params {
k := p.GetName()
v, ok := paramValuesMap[k]
if !ok {
return nil, fmt.Errorf("missing parameter %s", k)
}
resultParamValues = append(resultParamValues, ParamValue{Name: k, Value: v})
}
return resultParamValues, nil
}
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
}View on GitHub (pinned to 8cc6e09de2)
Solutions
- Supply values for every declared template parameter listed in the tool config.
- Fix mismatches between the argument keys sent and the declared parameter names.
- Add defaults in the parameter config for values that may be absent.
- Parse the wrapped 'missing parameter X' text to identify exactly which key to add.
Example fix
// before: incomplete map
resolveTemplateParams(params, sql, map[string]any{"table": "users"})
// after: all template params present
resolveTemplateParams(params, sql, map[string]any{"table": "users", "limit": 10}) Defensive patterns
Strategy: validation
Validate before calling
needed := map[string]bool{}
for _, p := range templateParams { needed[p.GetName()] = true }
for k := range paramsMap { delete(needed, k) }
if len(needed) > 0 {
return fmt.Errorf("missing template params: %v", keys(needed))
} Try / catch
out, err := params.ResolveTemplateParams(tp, stmt, m)
if err != nil && strings.Contains(err.Error(), "error getting template params") {
// missing template parameter: surface which key to add
return fmt.Errorf("invalid arguments: %w", err)
} Prevention
- Cross-check statement placeholders against declared parameters whenever you edit a config.
- Build argument maps from the tool's declared parameter list, not ad hoc.
- Add defaults for parameters that may be absent.
- Cover each tool's template rendering with a golden test.
When it happens
Trigger: ResolveTemplateParams invoked from Invoke or SubstituteMessages with a paramsMap lacking a key for a declared template parameter, e.g. rendering a SQL statement or HTTP body with incomplete arguments.
Common situations: Tool invocations with omitted required arguments; parameters renamed in config while callers still send old names; programmatic callers building the map and dropping a template param; auth values absent for unauthenticated requests.
Related errors
- error embedding parameters: %w
- error executing template '%s': %w
- templateParameter only supports string arrays
- invalid parameter type, expected array of type string
- missing parameter %s
AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05).
Data as JSON: /api/errors/b7f0cd59e199e046.
Report an issue: GitHub.