googleapis/mcp-toolbox · error
description is required for tool %q
Error message
description is required for tool %q
What it means
The sqlite-sql tool (parameterized SQL) requires a non-empty `description` in its config; Config.Initialize returns this error when cfg.Description is empty. The description is what the LLM sees in the tool manifest, so it cannot be blank.
Source
Thrown at internal/tools/sqlite/sqlitesql/sqlitesql.go:70
tools.ConfigBase `yaml:",inline"`
Type string `yaml:"type" validate:"required"`
Source string `yaml:"source" validate:"required"`
Statement string `yaml:"statement" validate:"required"`
Parameters parameters.Parameters `yaml:"parameters"`
TemplateParameters parameters.Parameters `yaml:"templateParameters"`
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, paramManifest, err := parameters.ProcessParameters(cfg.TemplateParameters, cfg.Parameters)
if err != nil {
return nil, err
}
return Tool{
BaseTool: tools.NewBaseTool(
cfg,
tools.GetAnnotationsOrDefault(cfg.Annotations, tools.NewDestructiveAnnotations),
tools.Manifest{Description: cfg.Description, Parameters: paramManifest, AuthRequired: cfg.AuthRequired},
allParameters,
),
}, nil
}
// validate interfaceView on GitHub (pinned to 8cc6e09de2)
Solutions
- Add a descriptive, non-empty `description:` to the sqlite-sql tool config.
- Verify YAML structure so description lands in the tool's Config struct.
- Check templated values render non-empty.
Example fix
# before kind: sqlite-sql source: my-sqlite statement: SELECT * FROM users WHERE id = ? # after kind: sqlite-sql source: my-sqlite description: "Fetch a user by id." statement: SELECT * FROM users WHERE id = ?
Defensive patterns
Strategy: validation
Validate before calling
yq '.tools[] | select(.kind == "sqlite-sql") | select(.description == null or .description == "")' tools.yaml
Type guard
func validToolConfig(c sqlite.Config) error {
if c.Description == "" { return errors.New("description is required") }
return nil
} Try / catch
tool, err := cfg.Initialize(ctx)
if err != nil {
return fmt.Errorf("invalid sqlite-sql tool %q: %w", cfg.Name, err)
} Prevention
- Treat description as required in your config templates.
- Lint tools.yaml in CI for required fields.
- Verify templated/anchored YAML fields resolve to non-empty values.
When it happens
Trigger: A `sqlite-sql` tool in tools.yaml lacking a `description:` key or having it set to ""; template substitution producing an empty description.
Common situations: Omitting description when scaffolding many similar tools; misindented YAML key; migration of configs from a version/variant where description was optional.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- description is required for tool %q
- description is required for tool %q
- description is required for tool %q
- description is required for tool %q
- description is required for tool %q
AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05).
Data as JSON: /api/errors/3faecdb9437f18cc.
Report an issue: GitHub.