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-dashboard tool requires a non-empty `description` before constructing the tool. Because MCP clients rely on the description to understand the tool, an empty description is rejected at load time with this error naming the offending tool.

Source

Thrown at internal/tools/looker/lookermakedashboard/lookermakedashboard.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)
	}

	allParameters := parameters.Parameters{}

	titleParameter := parameters.NewStringParameter("title", "The title of the Dashboard")
	allParameters = append(allParameters, titleParameter)
	descParameter := parameters.NewStringParameter("description", "The description of the Dashboard", parameters.WithStringDefault(""))
	allParameters = append(allParameters, descParameter)
	folderParameter := parameters.NewStringParameter("folder", "The folder id where the Dashboard will be created. Leave blank to use the user's personal folder", parameters.WithStringDefault(""))
	allParameters = append(allParameters, folderParameter)

	// finish tool setup
	return Tool{
		BaseTool: tools.NewBaseTool(
			cfg,
			tools.GetAnnotationsOrDefault(cfg.Annotations, tools.NewWriteAnnotations),
			tools.Manifest{Description: cfg.Description, Parameters: allParameters.Manifest(), AuthRequired: cfg.AuthRequired},
			allParameters,

View on GitHub (pinned to 8cc6e09de2)

Solutions

  1. Add a meaningful `description` to the looker-make-dashboard tool entry.
  2. Check YAML indentation to ensure the key belongs to the tool, not a nested block.
  3. Set cfg.Description in code before invoking Initialize for programmatic configs.

Example fix

# before
tools:
  make-dash:
    kind: looker-make-dashboard
    source: my-looker

# after
tools:
  make-dash:
    kind: looker-make-dashboard
    source: my-looker
    description: Creates a Looker dashboard from a list of query titles
Defensive patterns

Strategy: validation

Validate before calling

// Go: pre-flight validation before Initialize
if cfg.Description == "" {
    return fmt.Errorf("tool %q requires a non-empty description", cfg.Name)
}
// YAML lint: fail CI if any looker-make-dashboard entry lacks description

Try / catch

tool, err := cfg.Initialize(ctx)
if err != nil && strings.Contains(err.Error(), "description is required") {
    return fmt.Errorf("add description for looker-make-dashboard tool %q", cfg.Name)
}

Prevention

When it happens

Trigger: A tools.yaml tool entry of kind looker-make-dashboard has no `description` key or an empty string value, so Initialize returns this error during config parsing.

Common situations: Minimal hand-written configs; automated generators omitting descriptions; YAML misindentation placing description under a sibling key so cfg.Description stays empty.

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


AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05). Data as JSON: /api/errors/9fe7276b28c915e6. Report an issue: GitHub.