googleapis/mcp-toolbox · error

description is required for tool %q

Error message

description is required for tool %q

What it means

The wait utility tool requires a human-readable description; Config.Initialize rejects configs with an empty Description field. Descriptions are surfaced to LLM clients via the MCP manifest, so an empty one is treated as a misconfiguration and initialization fails.

Source

Thrown at internal/tools/utility/wait/wait.go:60

	return actual, nil
}

type Config struct {
	tools.ConfigBase `yaml:",inline"`
	Type             string                 `yaml:"type" validate:"required"`
	Timeout          string                 `yaml:"timeout" validate:"required"`
	Annotations      *tools.ToolAnnotations `yaml:"annotations,omitempty"`
}

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)
	}
	durationParameter := parameters.NewStringParameter("duration", "The duration to wait for, specified as a string (e.g., '10s', '2m', '1h').")
	params := parameters.Parameters{durationParameter}

	t := Tool{
		BaseTool: tools.NewBaseTool(
			cfg,
			tools.GetAnnotationsOrDefault(cfg.Annotations, tools.NewReadOnlyAnnotations),
			tools.Manifest{Description: cfg.Description, Parameters: params.Manifest(), AuthRequired: cfg.AuthRequired},
			params,
		),
	}
	return t, nil
}

// validate interface
var _ tools.Tool = Tool{}

View on GitHub (pinned to 8cc6e09de2)

Solutions

  1. Add a non-empty 'description' field to the wait tool config in tools.yaml
  2. If constructing Config in Go, set cfg.Description before calling Initialize
  3. Restart toolbox and confirm the tool loads

Example fix

# before
tools:
  wait:
    kind: wait
# after
tools:
  wait:
    kind: wait
    description: Waits for the specified duration before returning
Defensive patterns

Strategy: validation

Validate before calling

if cfg.Description == "" {
    return fmt.Errorf("wait tool %q must set a description", cfg.Name)
}

Try / catch

tool, err := cfg.Initialize(ctx)
if err != nil && strings.Contains(err.Error(), "description is required") {
    // fix tools.yaml: add non-empty 'description' to the tool entry
}

Prevention

When it happens

Trigger: Declaring a wait tool in tools.yaml without a 'description' field, or providing description: "" while calling Config.Initialize (directly or via toolbox config loading).

Common situations: Minimal/quickstart configs that omit the description field; programmatically generated configs where the description variable is empty; refactors that removed the field.

Related errors


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