claude-code - 💡(How to fix) Fix MCP stdio servers using rmcp >= 0.2 show 'tools fetch failed' — client not sending initialized notification

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…

Any MCP stdio server that strictly implements MCP 2024-11-05 (e.g. those using the rmcp Rust SDK >= 0.2) shows △ connected · tools fetch failed in /mcp. The server connects but tools never load.

Error Message

Error: expect initialized notification, but received: Some(Request(...ListToolsRequest...))

Root Cause

The MCP 2024-11-05 spec requires the client to send an initialized notification after receiving the initialize response, before sending any other requests:

  1. Client → initialize request
  2. Server → initialize response
  3. Client → {"jsonrpc":"2.0","method":"notifications/initialized","params":{}}missing
  4. Client → tools/list request

Claude Code's MCP client skips step 3. Servers that enforce this (rmcp raises "expect initialized notification, but received: ListToolsRequest") reject the subsequent tools/list, producing "tools fetch failed".

Fix Action

Workaround

None client-side — rmcp enforces this at the library level.

Code Example

# Install any rmcp-based server, e.g. https://github.com/madeye/mcp-distill
# Add to ~/.claude.json as a stdio MCP server
# Run: claude /mcp → shows "connected · tools fetch failed"

---

printf '{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}\n{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}\n{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}\n' \
  | mcp-distill serve 2>/dev/null
# → returns all 11 tools cleanly, exit 0

---

Error: expect initialized notification, but received: Some(Request(...ListToolsRequest...))
RAW_BUFFERClick to expand / collapse

Claude Code version: 2.1.143 OS: macOS 25.3.0 (arm64)

Summary

Any MCP stdio server that strictly implements MCP 2024-11-05 (e.g. those using the rmcp Rust SDK >= 0.2) shows △ connected · tools fetch failed in /mcp. The server connects but tools never load.

Root cause

The MCP 2024-11-05 spec requires the client to send an initialized notification after receiving the initialize response, before sending any other requests:

  1. Client → initialize request
  2. Server → initialize response
  3. Client → {"jsonrpc":"2.0","method":"notifications/initialized","params":{}}missing
  4. Client → tools/list request

Claude Code's MCP client skips step 3. Servers that enforce this (rmcp raises "expect initialized notification, but received: ListToolsRequest") reject the subsequent tools/list, producing "tools fetch failed".

Reproduction

# Install any rmcp-based server, e.g. https://github.com/madeye/mcp-distill
# Add to ~/.claude.json as a stdio MCP server
# Run: claude /mcp → shows "connected · tools fetch failed"

Manually confirming the binary works correctly with the full handshake:

printf '{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}\n{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}\n{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}\n' \
  | mcp-distill serve 2>/dev/null
# → returns all 11 tools cleanly, exit 0

Without the notifications/initialized step, the server responds:

Error: expect initialized notification, but received: Some(Request(...ListToolsRequest...))

Expected behaviour

CC sends notifications/initialized after receiving the initialize response, per MCP 2024-11-05 spec §3.1.

Workaround

None client-side — rmcp enforces this at the library level.

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