googleapis/mcp-toolbox · error
description is required for tool %q
Error message
description is required for tool %q
What it means
Config.Initialize for the looker-make-dashboard tool requires a non-empty `description` before constructing the tool. Because MCP clients rely on the description to understand the tool, an empty description is rejected at load time with this error naming the offending tool.
Source
Thrown at internal/tools/looker/lookermakedashboard/lookermakedashboard.go:74
}
type Config struct {
tools.ConfigBase `yaml:",inline"`
Type string `yaml:"type" validate:"required"`
Source string `yaml:"source" validate:"required"`
Annotations *tools.ToolAnnotations `yaml:"annotations,omitempty"`
}
// validate interface
var _ tools.ToolConfig = Config{}
func (cfg Config) ToolConfigType() string {
return resourceType
}
func (cfg Config) Initialize(context.Context) (tools.Tool, error) {
if cfg.Description == "" {
return nil, fmt.Errorf("description is required for tool %q", cfg.Name)
}
allParameters := parameters.Parameters{}
titleParameter := parameters.NewStringParameter("title", "The title of the Dashboard")
allParameters = append(allParameters, titleParameter)
descParameter := parameters.NewStringParameter("description", "The description of the Dashboard", parameters.WithStringDefault(""))
allParameters = append(allParameters, descParameter)
folderParameter := parameters.NewStringParameter("folder", "The folder id where the Dashboard will be created. Leave blank to use the user's personal folder", parameters.WithStringDefault(""))
allParameters = append(allParameters, folderParameter)
// finish tool setup
return Tool{
BaseTool: tools.NewBaseTool(
cfg,
tools.GetAnnotationsOrDefault(cfg.Annotations, tools.NewWriteAnnotations),
tools.Manifest{Description: cfg.Description, Parameters: allParameters.Manifest(), AuthRequired: cfg.AuthRequired},
allParameters,View on GitHub (pinned to 8cc6e09de2)
Solutions
- Add a meaningful `description` to the looker-make-dashboard tool entry.
- Check YAML indentation to ensure the key belongs to the tool, not a nested block.
- Set cfg.Description in code before invoking Initialize for programmatic configs.
Example fix
# before
tools:
make-dash:
kind: looker-make-dashboard
source: my-looker
# after
tools:
make-dash:
kind: looker-make-dashboard
source: my-looker
description: Creates a Looker dashboard from a list of query titles Defensive patterns
Strategy: validation
Validate before calling
// Go: pre-flight validation before Initialize
if cfg.Description == "" {
return fmt.Errorf("tool %q requires a non-empty description", cfg.Name)
}
// YAML lint: fail CI if any looker-make-dashboard entry lacks description Try / catch
tool, err := cfg.Initialize(ctx)
if err != nil && strings.Contains(err.Error(), "description is required") {
return fmt.Errorf("add description for looker-make-dashboard tool %q", cfg.Name)
} Prevention
- Include description in every tool template/snippet.
- Add a config lint step in CI for required tool fields.
- Verify YAML nesting so description is read by the parser.
- Search configs for `description: ""` before deploying.
When it happens
Trigger: A tools.yaml tool entry of kind looker-make-dashboard has no `description` key or an empty string value, so Initialize returns this error during config parsing.
Common situations: Minimal hand-written configs; automated generators omitting descriptions; YAML misindentation placing description under a sibling key so cfg.Description stays empty.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- description is required for tool %q
- description is required for tool %q
- invalid ipType %s
- password is provided without a username. Please provide both
- description is required for tool %q
AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05).
Data as JSON: /api/errors/9fe7276b28c915e6.
Report an issue: GitHub.