googleapis/mcp-toolbox · error
description is required for tool %q
Error message
description is required for tool %q
What it means
Config validation error from looker-get-connection-tables: Initialize rejects any tool config whose `description` field is empty. Descriptions are mandatory because they are shown to the LLM consuming the MCP tool, so a Looker tool without one is considered misconfigured and the server refuses to build it.
Source
Thrown at internal/tools/looker/lookergetconnectiontables/lookergetconnectiontables.go:71
}
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)
}
connParameter := parameters.NewStringParameter("conn", "The connection containing the tables.")
dbParameter := parameters.NewStringParameter("db", "The optional database to search", parameters.WithStringRequired(false))
schemaParameter := parameters.NewStringParameter("schema", "The schema containing the tables.")
params := parameters.Parameters{connParameter, dbParameter, schemaParameter}
// 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,
),
}, nil
}
View on GitHub (pinned to 8cc6e09de2)
Solutions
- Add a non-empty `description:` to the looker-get-connection-tables tool entry in your config.
- Check that any templating/variable substitution actually fills the description (not an empty default).
- Validate the config before startup (e.g. a YAML schema check or dry-run).
- Copy the canonical tool example from the Looker docs, which includes a description.
Example fix
# before
tools:
looker-get-connection-tables:
kind: looker-get-connection-tables
source: my-looker
# after
tools:
looker-get-connection-tables:
kind: looker-get-connection-tables
source: my-looker
description: Retrieves the list of tables in a Looker connection, optionally filtered by database and schema. Defensive patterns
Strategy: validation
Validate before calling
// config check before loading
cfg, _ := readToolConfig(path)
if cfg.Description == "" {
return fmt.Errorf("tool %s: description is required", cfg.Name)
} Type guard
func hasDescription(c lookergetconnectiontables.Config) bool { return c.Description != "" } Try / catch
tool, err := cfg.Initialize(ctx)
if err != nil {
log.Fatalf("invalid looker-get-connection-tables config: %v", err)
} Prevention
- Always include a description for every tool block in tools.yaml.
- Lint configs for empty required string fields before deployment.
- Beware templating variables that can expand to empty strings.
- Copy canonical examples from the Looker integration docs.
When it happens
Trigger: Calling Config.Initialize (during server/toolbox startup) with a looker-get-connection-tables tool definition that omits the description field or sets it to "" in the YAML/JSON config.
Common situations: Hand-authoring tools.yaml and forgetting the description key; templated configs where an empty variable renders as an empty string; copy-pasting a minimal tool block stripped of the description; a loader that drops empty fields.
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
- 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/5cf9afb8b3390f82.
Report an issue: GitHub.