googleapis/mcp-toolbox · error
description is required for tool %q
Error message
description is required for tool %q
What it means
The wait utility tool requires a human-readable description; Config.Initialize rejects configs with an empty Description field. Descriptions are surfaced to LLM clients via the MCP manifest, so an empty one is treated as a misconfiguration and initialization fails.
Source
Thrown at internal/tools/utility/wait/wait.go:60
return actual, nil
}
type Config struct {
tools.ConfigBase `yaml:",inline"`
Type string `yaml:"type" validate:"required"`
Timeout string `yaml:"timeout" validate:"required"`
Annotations *tools.ToolAnnotations `yaml:"annotations,omitempty"`
}
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)
}
durationParameter := parameters.NewStringParameter("duration", "The duration to wait for, specified as a string (e.g., '10s', '2m', '1h').")
params := parameters.Parameters{durationParameter}
t := Tool{
BaseTool: tools.NewBaseTool(
cfg,
tools.GetAnnotationsOrDefault(cfg.Annotations, tools.NewReadOnlyAnnotations),
tools.Manifest{Description: cfg.Description, Parameters: params.Manifest(), AuthRequired: cfg.AuthRequired},
params,
),
}
return t, nil
}
// validate interface
var _ tools.Tool = Tool{}
View on GitHub (pinned to 8cc6e09de2)
Solutions
- Add a non-empty 'description' field to the wait tool config in tools.yaml
- If constructing Config in Go, set cfg.Description before calling Initialize
- Restart toolbox and confirm the tool loads
Example fix
# before
tools:
wait:
kind: wait
# after
tools:
wait:
kind: wait
description: Waits for the specified duration before returning Defensive patterns
Strategy: validation
Validate before calling
if cfg.Description == "" {
return fmt.Errorf("wait tool %q must set a description", cfg.Name)
} Try / catch
tool, err := cfg.Initialize(ctx)
if err != nil && strings.Contains(err.Error(), "description is required") {
// fix tools.yaml: add non-empty 'description' to the tool entry
} Prevention
- Always include a description for every tool in tools.yaml
- Run a config linter/schema check in CI before deploying toolbox configs
- Never generate tool configs with empty string fields
When it happens
Trigger: Declaring a wait tool in tools.yaml without a 'description' field, or providing description: "" while calling Config.Initialize (directly or via toolbox config loading).
Common situations: Minimal/quickstart configs that omit the description field; programmatically generated configs where the description variable is empty; refactors that removed the field.
Related errors
- description is required for tool %q
- description is required for tool %q
- --name is required unless --group or --toolset is set, or ex
- invalid ipType %s
- password is provided without a username. Please provide both
AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05).
Data as JSON: /api/errors/3d1ced54ecad4ee0.
Report an issue: GitHub.