googleapis/mcp-toolbox · error

invalid parameters: %w

Error message

invalid parameters: %w

What it means

Thrown by runInvoke (cmd/internal/invoke/command.go:126) when parameters.ParseParams fails to map the user-supplied JSON params onto the tool's parameter schema — missing required parameters, unexpected parameters, or values that cannot be converted to the declared type (string/integer/boolean/array). The wrapped error names the offending parameter.

Source

Thrown at cmd/internal/invoke/command.go:126

	params := make(map[string]any)
	if paramsInput != "" {
		if err := util.DecodeJSON(strings.NewReader(paramsInput), &params); err != nil {
			errMsg := fmt.Errorf("params must be a valid JSON string: %w", err)
			opts.Logger.ErrorContext(ctx, errMsg.Error())
			return errMsg
		}
	}

	toolParams, err := tool.GetParameters(src)
	if err != nil {
		errMsg := fmt.Errorf("error getting parameters for tool: %w", err)
		opts.Logger.ErrorContext(ctx, errMsg.Error())
		return errMsg
	}

	parsedParams, err := parameters.ParseParams(toolParams, params, nil)
	if err != nil {
		errMsg := fmt.Errorf("invalid parameters: %w", err)
		opts.Logger.ErrorContext(ctx, errMsg.Error())
		return errMsg
	}

	parsedParams, err = tool.EmbedParams(ctx, parsedParams, primitiveMgr)
	if err != nil {
		errMsg := fmt.Errorf("error embedding parameters: %w", err)
		opts.Logger.ErrorContext(ctx, errMsg.Error())
		return errMsg
	}

	// Client Auth not supported for ephemeral CLI call
	requiresAuth, err := tool.RequiresClientAuthorization(src)
	if err != nil {
		errMsg := fmt.Errorf("failed to check auth requirements: %w", err)
		opts.Logger.ErrorContext(ctx, errMsg.Error())
		return errMsg
	}

View on GitHub (pinned to 8cc6e09de2)

Solutions

  1. Read the wrapped error to identify the missing/invalid parameter and correct the params JSON.
  2. Check the exact parameter names and types via `toolbox tools list` or the tool's docs page.
  3. Ensure required parameters are present and values match declared types (unquoted numbers/booleans for non-string types).
  4. If parameter names changed after an upgrade, update your invocation script to the new schema.

Example fix

// before (missing required param, wrong type)
toolbox invoke execute_sql '{"sql": 123}'
// after
toolbox invoke execute_sql '{"sql": "SELECT 1"}'
Defensive patterns

Strategy: validation

Validate before calling

// Fetch the tool manifest and check required params before invoking:
manifests, _ := client.ListTools(ctx)
for _, m := range manifests {
  if m.GetName() == "execute_sql" {
    fmt.Println(m.GetParameters()) // verify names/types your params must satisfy
  }
}

Type guard

func isStringParams(m map[string]any, keys ...string) bool {
  for _, k := range keys {
    if _, ok := m[k].(string); !ok {
      return false
    }
  }
  return true
}

Try / catch

if err := runInvoke(...); err != nil {
  if strings.Contains(err.Error(), "invalid parameters") {
    fmt.Fprintf(os.Stderr, "usage: toolbox invoke %s '<json matching schema>'\n", toolName)
  }
}

Prevention

When it happens

Trigger: Invoking a tool with a params object missing a required parameter, containing an unknown key not in the tool schema, or with a wrong-typed value (e.g. string "abc" for an integer parameter, number for a boolean).

Common situations: Typos in parameter names (camelCase vs snake_case), forgetting a required parameter, passing values as strings when the schema declares integer/boolean, or invoking a prebuilt tool with outdated parameter names after a toolbox upgrade.

Related errors


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