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-look tool checks that `description` is set before assembling parameters (via lookercommon.GetQueryParameters plus the title parameter) and building the tool. An empty description aborts initialization with this error, since MCP tool specs require a description.
Source
Thrown at internal/tools/looker/lookermakelook/lookermakelook.go:75
}
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 := lookercommon.GetQueryParameters()
titleParameter := parameters.NewStringParameter("title", "The title of the Look")
allParameters = append(allParameters, titleParameter)
descParameter := parameters.NewStringParameter("description", "The description of the Look", parameters.WithStringDefault(""))
allParameters = append(allParameters, descParameter)
folderParameter := parameters.NewStringParameter("folder", "The folder id where the Look will be created. Leave blank to use the user's personal folder", parameters.WithStringDefault(""))
allParameters = append(allParameters, folderParameter)
vizParameter := parameters.NewMapParameter("vis_config", "The visualization config for the query", "", parameters.WithMapDefault(
map[string]any{}))
allParameters = append(allParameters, vizParameter)
// finish tool setup
return Tool{
BaseTool: tools.NewBaseTool(
cfg,View on GitHub (pinned to 8cc6e09de2)
Solutions
- Add a non-empty `description` to the looker-make-look tool entry.
- Confirm the description is at the tool's top level in the YAML block.
- For code-built configs, assign cfg.Description before Initialize.
Example fix
# before
tools:
make-look:
kind: looker-make-look
source: my-looker
# after
tools:
make-look:
kind: looker-make-look
source: my-looker
description: Creates a Looker Look from a query and title Defensive patterns
Strategy: validation
Validate before calling
// Go: validate before Initialize
if cfg.Description == "" {
return fmt.Errorf("tool %q is missing its description", cfg.Name)
}
// YAML lint: every looker-make-look entry must define a non-empty description Try / catch
tool, err := cfg.Initialize(ctx)
if err != nil && strings.Contains(err.Error(), "description is required") {
return fmt.Errorf("set description for looker-make-look tool %q", cfg.Name)
} Prevention
- Always ship a description with looker-make-look configs.
- Add required-field linting to your config CI pipeline.
- Double-check YAML indentation after editing tool blocks.
- Replace placeholder descriptions rather than deleting them.
When it happens
Trigger: Loading a tools.yaml entry of kind looker-make-look without a `description` field (or with an empty string), triggering the guard at the top of Initialize.
Common situations: Omitting description while copy-editing YAML; generators producing skeleton configs; misindentation causing the value to land under another key; empty string left after stripping placeholder text.
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/3efe39f5c35e84bf.
Report an issue: GitHub.