claude-code - 💡(How to fix) Fix [BUG] 2.1.153 silently discards tools/list response from rmcp 0.12.0 HTTP MCP server (works in 2.1.152, wire-identical handshake)

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Error Message

2.1.153 completes the full MCP handshake against an HTTP server backed by rmcp 0.12.0initializenotifications/initializedGET /mcp SSE → tools/list (200, full tool list) — then silently does not expose those tools to the model. Zero tool_use blocks; the model writes tool-call notation as text. Exit 0, no error event, no stderr. 2.1.152 with the byte-identical wire interaction surfaces the tools normally.

Fix Action

Fix / Workaround

Regression, last working 2.1.152. Platform: Anthropic API (subscription login), Linux (Arch), non-interactive sdk-cli entrypoint. Workaround: npm install -g @anthropic-ai/[email protected]. Silent failure → autonomous schedulers see exit 0 and advance thinking the run succeeded. Same release as #62972 (Discord) and #60428 (Slack) — same silent-MCP-drop pattern.

Code Example

{"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{"roots":{},"elicitation":{}},"clientInfo":{"name":"claude-code","version":"<2.1.152|2.1.153>",}},"jsonrpc":"2.0","id":0}

---

{"jsonrpc":"2.0","id":0,"result":{"protocolVersion":"2025-03-26","capabilities":{"tools":{}},"serverInfo":{"name":"rmcp","version":"0.12.0"},}}
RAW_BUFFERClick to expand / collapse

What's Wrong

2.1.153 completes the full MCP handshake against an HTTP server backed by rmcp 0.12.0initializenotifications/initializedGET /mcp SSE → tools/list (200, full tool list) — then silently does not expose those tools to the model. Zero tool_use blocks; the model writes tool-call notation as text. Exit 0, no error event, no stderr. 2.1.152 with the byte-identical wire interaction surfaces the tools normally.

Wire-level diff (logging HTTP proxy between claude and the rmcp server)

Both versions send byte-identical initialize:

{"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{"roots":{},"elicitation":{}},"clientInfo":{"name":"claude-code","version":"<2.1.152|2.1.153>",}},"jsonrpc":"2.0","id":0}

Both receive (rmcp 0.12.0):

{"jsonrpc":"2.0","id":0,"result":{"protocolVersion":"2025-03-26","capabilities":{"tools":{}},"serverInfo":{"name":"rmcp","version":"0.12.0"},}}

Both then: notifications/initialized (202), GET /mcp SSE (200), tools/list (200 SSE, 7403-byte response listing every tool).

Divergence is purely post-tools/list:

  • 2.1.152 → emits tools/call within seconds; run does real work (16–20 calls per run in my repros).
  • 2.1.153 → no further MCP traffic. Model produces <details><summary>Tool use: fs_list</summary>…</details> or {"name":"fs_list","input":{…}} as text blocks.

Three 2.1.153 reruns with fresh cliSessionId → 0 tool calls. Two 2.1.152 runs (direct + proxied) → 16 and 20. Deterministic.

Repro

claude against the rmcp 0.12.0 HTTP MCP server in CLAI, any prompt that needs tools. 2.1.152 works, 2.1.153 silently doesn't. Synthetic Python mcp 1.27 HTTP servers (with or without auth, stateful or stateless) do not reproduce — so the trigger is something in the response shape rmcp 0.12.0 returns. Suspects per tool entry: inputSchema.$schema (draft-2020-12), annotations.openWorldHint, or the absence of capabilities.tools.listChanged in the server's init response.

Meta

Regression, last working 2.1.152. Platform: Anthropic API (subscription login), Linux (Arch), non-interactive sdk-cli entrypoint. Workaround: npm install -g @anthropic-ai/[email protected]. Silent failure → autonomous schedulers see exit 0 and advance thinking the run succeeded. Same release as #62972 (Discord) and #60428 (Slack) — same silent-MCP-drop pattern.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING