Skip to content

fix(mcp): drop empty-string optional args before tools/call#33626

Open
Haohao-end wants to merge 1 commit into
anomalyco:devfrom
Haohao-end:mcp-empty-optional-args
Open

fix(mcp): drop empty-string optional args before tools/call#33626
Haohao-end wants to merge 1 commit into
anomalyco:devfrom
Haohao-end:mcp-empty-optional-args

Conversation

@Haohao-end

Copy link
Copy Markdown

Issue for this PR

Closes #33341

Type of change

  • Bug fix

What does this PR do?

On the OpenAI/GPT path, omitted optional MCP string parameters are serialized as "". MCP servers like Slack treat these as explicit values, so search tools (e.g. slack_search_channels) return no results. The Anthropic path omits unset optionals and works fine.

This adds cleanToolArguments() in packages/opencode/src/mcp/catalog.ts that drops empty-string values for non-required properties before the tools/call request, using the tool's inputSchema to tell required from optional. Unknown keys and non-string falsy values are left untouched.

How did you verify your code works?

bun test ./test/mcp/catalog.test.ts — 8 tests covering: dropping empty optionals, keeping required fields, keeping non-empty optionals, keeping falsy non-string values, leaving unknown keys, normalizing non-object args, and all-optional schemas. All 8 pass.

Screenshots / recordings

N/A — not a UI change.

Checklist

  • I have tested my changes locally
  • I have not included unrelated changes in this PR

OpenAI/GPT fills omitted optional string params with "", which MCP
servers treat as explicit values (e.g. Slack search cursor/after/before
returning no results). Add cleanToolArguments to strip empty strings
for non-required properties before calling tools/call, matching the
Anthropic path where unset optionals are omitted entirely.

Closes anomalyco#33341
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

OpenAI/GPT tool-call path serializes omitted optional MCP string args as empty strings

1 participant