googleapis/mcp-toolbox · error
description is required for tool %q
Error message
description is required for tool %q
What it means
Looker tool configs require a non-empty description, which is exposed to MCP clients as the tool's description. Initialize fails fast with this error when Config.Description is empty, preventing registration of an undocumented lookergenerateembedurl tool.
Source
Thrown at internal/tools/looker/lookergenerateembedurl/lookergenerateembedurl.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)
}
typeParameter := parameters.NewStringParameter("type", "Type of Looker content to embed (ie. dashboards, looks, query-visualization)", parameters.WithStringDefault(""))
idParameter := parameters.NewStringParameter("id", "The ID of the content to embed.", parameters.WithStringDefault(""))
params := parameters.Parameters{
typeParameter,
idParameter,
}
// finish tool setup
return Tool{
BaseTool: tools.NewBaseTool(
cfg,
tools.GetAnnotationsOrDefault(cfg.Annotations, tools.NewReadOnlyAnnotations),
tools.Manifest{Description: cfg.Description, Parameters: params.Manifest(), AuthRequired: cfg.AuthRequired},
params,
),
}, nilView on GitHub (pinned to 8cc6e09de2)
Solutions
- Add a description field to the tool config
- Set cfg.Description before Initialize in code
- Use prebuilt configs which always include descriptions
Example fix
// before - name: generate-embed-url source: my-looker // after - name: generate-embed-url source: my-looker description: Generates a signed embed URL for Looker content
Defensive patterns
Strategy: validation
Validate before calling
if strings.TrimSpace(cfg.Description) == "" { return errors.New("looker tool config requires a description") } Try / catch
if _, err := cfg.Initialize(ctx); err != nil { return fmt.Errorf("tool config rejected: %w", err) } Prevention
- Never omit description in tool YAML entries
- Run a config lint/CI check for required tool fields
- Prefer prebuilt configs for standard use cases
When it happens
Trigger: A lookergenerateembedurl tool YAML entry lacking the description field when Initialize runs during config load.
Common situations: Hand-authored configs missing description; programmatically built Config without Description; truncated or copy-pasted tool definitions.
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
- invalid source for %q tool: source %q is not a compatible ty
AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05).
Data as JSON: /api/errors/26ca3ea5d542a568.
Report an issue: GitHub.