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,
		),
	}, nil

View on GitHub (pinned to 8cc6e09de2)

Solutions

  1. Add a description field to the tool config
  2. Set cfg.Description before Initialize in code
  3. 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

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


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