{"record":{"id":"3c9b7b1a8fb20bbf","repo":"googleapis/mcp-toolbox","slug":"description-is-required-for-tool-q-3c9b7b","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/cloudloggingadmin/cloudloggingadminlistresourcetypes/cloudloggingadminlistresourcetypes.go","lineNumber":65,"sourceCode":"}\n\ntype Config struct {\n\ttools.ConfigBase `yaml:\",inline\"`\n\tType             string                 `yaml:\"type\" validate:\"required\"`\n\tSource           string                 `yaml:\"source\" validate:\"required\"`\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\t// No parameters for this tool\n\tvar params parameters.Parameters\n\n\treturn Tool{\n\t\tBaseTool: tools.NewBaseTool(\n\t\t\tcfg,\n\t\t\ttools.GetAnnotationsOrDefault(cfg.Annotations, tools.NewReadOnlyAnnotations),\n\t\t\ttools.Manifest{Description: cfg.Description, AuthRequired: cfg.AuthRequired},\n\t\t\tparams,\n\t\t),\n\t}, nil\n}\n\n// validate interface\nvar _ tools.Tool = Tool{}\n","sourceCodeStart":47,"sourceCodeEnd":83,"githubUrl":"https://github.com/googleapis/mcp-toolbox/blob/8cc6e09de2ad7b8bffc77751799585a1401a48eb/internal/tools/cloudloggingadmin/cloudloggingadminlistresourcetypes/cloudloggingadminlistresourcetypes.go#L47-L83","documentation":"Config.Initialize for the cloudloggingadmin-list-resource-types tool requires a non-empty 'description' because the tool manifest surfaced to MCP clients is built from it. When the YAML tool entry omits 'description', Initialize fails fast with this error before any server starts.","triggerScenarios":"Parsing and initializing a tools.yaml where a tool of kind cloudloggingadmin-list-resource-types has no 'description' field, or has it set to an empty string.","commonSituations":"Hand-authoring a minimal tools.yaml and forgetting the description; a templating/scripted generator emitting empty description; YAML indentation mistakes nesting description under the wrong key so it unmarshals to \"\".","solutions":["Add a non-empty `description:` field to the tool entry in tools.yaml.","Verify the description is indented under the correct tool key, not a sibling mapping.","Re-run config parsing; the error names the offending tool via cfg.Name so check that exact entry."],"exampleFix":"// before (tools.yaml)\n  list-resource-types:\n    kind: cloud-logging-admin-list-resource-types\n    source: my-logging-source\n// after\n  list-resource-types:\n    kind: cloud-logging-admin-list-resource-types\n    source: my-logging-source\n    description: Lists the Cloud Logging resource types available in the project.","handlingStrategy":"validation","validationCode":"// Go: validate tool configs before Initialize\ncfgs := map[string]Config{...}\nfor name, cfg := range cfgs {\n    if cfg.Description == \"\" {\n        return fmt.Errorf(\"tool %q: description is required\", name)\n    }\n}","typeGuard":null,"tryCatchPattern":"tool, err := cfg.Initialize(ctx)\nif err != nil {\n    if strings.Contains(err.Error(), \"description is required\") {\n        log.Fatalf(\"fix tools.yaml: %v\", err)\n    }\n    return err\n}","preventionTips":["Always include a human-readable description for every tool in tools.yaml.","Lint your tools.yaml in CI to reject empty/missing description fields.","Watch YAML indentation — description must sit inside the tool's mapping."],"tags":["go","config","validation","yaml"],"backgroundTag":"missing-required-argument","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"}