{"record":{"id":"b7f0cd59e199e046","repo":"googleapis/mcp-toolbox","slug":"error-getting-template-params-s","errorCode":null,"errorMessage":"error getting template params %s","messagePattern":"error getting template params (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/util/parameters/parameters.go","lineNumber":283,"sourceCode":"// GetParams return the ParamValues that are associated with the Parameters.\nfunc GetParams(params Parameters, paramValuesMap map[string]any) (ParamValues, error) {\n\tresultParamValues := make(ParamValues, 0)\n\tfor _, p := range params {\n\t\tk := p.GetName()\n\t\tv, ok := paramValuesMap[k]\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"missing parameter %s\", k)\n\t\t}\n\t\tresultParamValues = append(resultParamValues, ParamValue{Name: k, Value: v})\n\t}\n\treturn resultParamValues, nil\n}\n\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}","sourceCodeStart":265,"sourceCodeEnd":301,"githubUrl":"https://github.com/googleapis/mcp-toolbox/blob/8cc6e09de2ad7b8bffc77751799585a1401a48eb/internal/util/parameters/parameters.go#L265-L301","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before: incomplete map\nresolveTemplateParams(params, sql, map[string]any{\"table\": \"users\"})\n\n// after: all template params present\nresolveTemplateParams(params, sql, map[string]any{\"table\": \"users\", \"limit\": 10})","handlingStrategy":"validation","validationCode":"needed := map[string]bool{}\nfor _, p := range templateParams { needed[p.GetName()] = true }\nfor k := range paramsMap { delete(needed, k) }\nif len(needed) > 0 {\n    return fmt.Errorf(\"missing template params: %v\", keys(needed))\n}","typeGuard":null,"tryCatchPattern":"out, err := params.ResolveTemplateParams(tp, stmt, m)\nif err != nil && strings.Contains(err.Error(), \"error getting template params\") {\n    // missing template parameter: surface which key to add\n    return fmt.Errorf(\"invalid arguments: %w\", err)\n}","preventionTips":["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."],"tags":["templates","parameters","missing-argument"],"backgroundTag":"missing-parameter","analyzedSha":"8cc6e09de2ad7b8bffc77751799585a1401a48eb","analyzedAt":"2026-09-05T01:10:36.887Z","contentChangedAt":"2026-09-05T01:10:36.887Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}