{"record":{"id":"ed01f381bd4b9d57","repo":"googleapis/mcp-toolbox","slug":"parameter-name-must-be-unique-across-all-parameter","errorCode":null,"errorMessage":"parameter name must be unique across all parameter fields. Duplicate parameter: %s","messagePattern":"parameter name must be unique across all parameter fields\\. Duplicate parameter: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/util/parameters/common.go","lineNumber":118,"sourceCode":"\tparsedTmpl, err := tmpl.Parse(templateString)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"error parsing template '%s': %w\", templateName, err)\n\t}\n\n\tvar result bytes.Buffer\n\tif err := parsedTmpl.Execute(&result, data); err != nil {\n\t\treturn \"\", fmt.Errorf(\"error executing template '%s': %w\", templateName, err)\n\t}\n\treturn result.String(), nil\n}\n\n// CheckDuplicateParameters verify there are no duplicate parameter names\nfunc CheckDuplicateParameters(ps Parameters) error {\n\tseenNames := make(map[string]bool)\n\tfor _, p := range ps {\n\t\tpName := p.GetName()\n\t\tif _, exists := seenNames[pName]; exists {\n\t\t\treturn fmt.Errorf(\"parameter name must be unique across all parameter fields. Duplicate parameter: %s\", pName)\n\t\t}\n\t\tseenNames[pName] = true\n\t}\n\treturn nil\n}\n","sourceCodeStart":100,"sourceCodeEnd":124,"githubUrl":"https://github.com/googleapis/mcp-toolbox/blob/8cc6e09de2ad7b8bffc77751799585a1401a48eb/internal/util/parameters/common.go#L100-L124","documentation":"CheckDuplicateParameters enforces that every parameter across all parameter fields (parameters, authRequired params, etc.) has a unique name. If two Parameter objects share a name, initialization fails with this error naming the duplicate.","triggerScenarios":"Declaring a tools.yaml/tool config where two parameters (e.g. one in parameters and one in auth parameters, or two entries in the same list) have the same `name`, detected during tool Initialize.","commonSituations":"Copy-pasting a parameter block and forgetting to rename it; a user param colliding with an auth service field param; merging prebuilt configs with overlapping parameter names.","solutions":["Rename one of the duplicate parameters in the tool config","Check the tools.yaml for two parameters with the same name across all fields","If one param should serve both purposes, delete the redundant declaration","Review recently merged config changes for accidental duplication"],"exampleFix":"// before\nparameters:\n  - name: id\n  - name: id\n// after\nparameters:\n  - name: id\n  - name: limit","handlingStrategy":"validation","validationCode":"func validateUniqueNames(ps Parameters) error {\n    seen := map[string]bool{}\n    for _, p := range ps {\n        n := p.GetName()\n        if seen[n] {\n            return fmt.Errorf(\"duplicate parameter: %s\", n)\n        }\n        seen[n] = true\n    }\n    return nil\n}","typeGuard":"null","tryCatchPattern":"if err := CheckDuplicateParameters(ps); err != nil {\n    return nil, fmt.Errorf(\"tool config invalid: %w\", err)\n}","preventionTips":["Grep tools.yaml for repeated `name:` values under parameters before deploy","Rename params after copy-pasting blocks","Merge auth params and tool params under distinct names"],"tags":["configuration","parameters","validation"],"backgroundTag":"duplicate-parameter-name","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"}