{"record":{"id":"317b6b041f5c5241","repo":"googleapis/mcp-toolbox","slug":"description-is-required-for-tool-q-317b6b","errorCode":null,"errorMessage":"description is required for tool %q","messagePattern":"description is required for tool %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/tools/mongodb/mongodbfind/mongodbfind.go","lineNumber":81,"sourceCode":"\tFilterParams            parameters.Parameters  `yaml:\"filterParams\"`\n\tProjectPayload          string                 `yaml:\"projectPayload\"`\n\tProjectParams           parameters.Parameters  `yaml:\"projectParams\"`\n\tSortPayload             string                 `yaml:\"sortPayload\"`\n\tSortParams              parameters.Parameters  `yaml:\"sortParams\"`\n\tLimit                   int64                  `yaml:\"limit\"`\n\tAnnotations             *tools.ToolAnnotations `yaml:\"annotations,omitempty\"`\n}\n\n// validate interface\nvar _ tools.ToolConfig = Config{}\n\nfunc (cfg Config) ToolConfigType() string {\n\treturn resourceType\n}\n\nfunc (cfg Config) Initialize(context.Context) (tools.Tool, error) {\n\tif cfg.Description == \"\" {\n\t\treturn nil, fmt.Errorf(\"description is required for tool %q\", cfg.Name)\n\t}\n\n\tallParameters := slices.Concat(cfg.FilterParams, cfg.ProjectParams, cfg.SortParams)\n\n\tif err := mongodbcommon.ValidateCollectionConfig(cfg.Collection, cfg.CollectionAllowedValues); err != nil {\n\t\treturn nil, err\n\t}\n\tallParameters = mongodbcommon.WithRuntimeCollectionParam(cfg.Collection, cfg.CollectionAllowedValues, allParameters)\n\n\tif err := parameters.CheckDuplicateParameters(allParameters); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif cfg.Limit <= 0 {\n\t\treturn nil, fmt.Errorf(\"limit must be a positive number, but got %d\", cfg.Limit)\n\t}\n\n\tparamManifest := allParameters.Manifest()","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/googleapis/mcp-toolbox/blob/8cc6e09de2ad7b8bffc77751799585a1401a48eb/internal/tools/mongodb/mongodbfind/mongodbfind.go#L63-L99","documentation":"Same validation as mongodb-delete-one: mongodbfind.Config.Initialize rejects an empty Description field. The description is required so the tool can be advertised meaningfully to MCP clients in the manifest. Initialization aborts before parameters or collection config are processed.","triggerScenarios":"Calling Initialize() on a mongodbfind.Config with Description == \"\", typically from a tools.yaml entry for a mongodb-find tool missing the description field.","commonSituations":"Omitting description in YAML; empty-string description; deserialization mismatch leaving Description zero-valued; scaffolding a new find tool from a minimal template.","solutions":["Add a non-empty description to the mongodb-find tool config.","Set cfg.Description in Go before Initialize.","Double-check YAML key spelling/indentation for the description field."],"exampleFix":"# before\n  find-users:\n    kind: mongodb-find\n    source: my-mongo\n    collection: users\n# after\n  find-users:\n    kind: mongodb-find\n    source: my-mongo\n    collection: users\n    description: Finds documents in the users collection matching a filter.","handlingStrategy":"validation","validationCode":"if cfg.Description == \"\" {\n    return errors.New(\"mongodb-find tool requires a non-empty description\")\n}","typeGuard":"func hasDescription(c mongodbfind.Config) bool { return c.Description != \"\" }","tryCatchPattern":"tool, err := cfg.Initialize(context.Background())\nif err != nil && strings.Contains(err.Error(), \"description is required\") {\n    cfg.Description = \"Find documents in a MongoDB collection.\"\n    tool, err = cfg.Initialize(context.Background())\n}","preventionTips":["Never leave the description field blank in mongodb-find definitions.","Add schema/CI validation for tool YAML completeness.","Copy from canonical examples that include descriptions."],"tags":["go","mongodb","config-validation","tool-configuration"],"backgroundTag":"missing-required-config-field","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"}