claude-code - 💡(How to fix) Fix [BUG] Claude Desktop 2.1.126 (2026-05-12): tools/call never written to MCP server stdin — UI spinner hangs forever, log shows no tools/call entry [1 participants]

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…
GitHub stats
anthropics/claude-code#58836Fetched 2026-05-14 03:38:14
View on GitHub
Comments
0
Participants
1
Timeline
3
Reactions
0
Participants
Timeline (top)
labeled ×2cross-referenced ×1

Error Message

→ valid response in <100 ms, no error. After a successful tools/list, tools/call requests should be written to the MCP server's stdin and the response returned to the model. If the dispatch fails the client should surface an error, not hang the UI indefinitely.

Error Messages/Logs

Root Cause

Related issues

  • #37806 — same symptom, macOS Apple Silicon, March 2026, marked stale and now locked so I can't comment there. Root cause is very likely the same.
  • #58771 — different MCP regression filed for build dated 2026-05-12 (Optional[List[str]] serialization). Suggests a broader MCP client regression landed in that build.
  • #22299 — similar "tools/call never appears in log" symptom on Windows, regression in CCD v2.1.22.
  • #50319 — silent tools/call hang in a different edge case (namespace collision); also macOS.

Fix Action

Fix / Workaround

Same symptom in both. So the regression is in the Claude Desktop MCP client dispatch path, not in any individual server.

After a successful tools/list, tools/call requests should be written to the MCP server's stdin and the response returned to the model. If the dispatch fails the client should surface an error, not hang the UI indefinitely.

Code Example

{ printf '%s\n' '{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"test","version":"0.1"}}}'
  printf '%s\n' '{"jsonrpc":"2.0","method":"notifications/initialized"}'
  printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
  sleep 1
  printf '%s\n' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search","arguments":{"query":"NavigationStack","limit":3}}}'
  sleep 2
} | /opt/homebrew/bin/cupertino serve

---

/Applications/Claude.app/Contents/Helpers/disclaimer /path/to/server serve

---

Usage: disclaimer <command> [args...]
Failed to set disclaim attribute: %s

---



---

{
  "mcpServers": {
    "cupertino": {
      "command": "/opt/homebrew/bin/cupertino",
      "args": ["serve"]
    }
  }
}
RAW_BUFFERClick to expand / collapse

Preflight Checklist

  • I have searched existing issues and this hasn't been reported yet
  • This is a single bug report (please file separate reports for different bugs)
  • I am using the latest version of Claude Code

What's Wrong?

After connecting any local stdio MCP server, the full lifecycle works:

  • initialize → OK
  • notifications/initialized → OK
  • tools/list → OK (tools appear in the UI)
  • claude mcp list reports the server as ✓ Connected

But the moment the model attempts a tools/call, the UI shows the spinner ("Utilizzo di cupertino: search · 5m 28s · 25 tokens") and never moves. The token counter stays frozen — the model is not waiting on a slow response, it is blocked before sending the request.

No "method":"tools/call" line ever appears in ~/Library/Logs/Claude/mcp-server-<name>.log. The request is never written to the server's stdin.

Verified the MCP server binary is healthy

Feeding the same JSON-RPC sequence by hand via stdio returns tools/call results in milliseconds:

{ printf '%s\n' '{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"test","version":"0.1"}}}'
  printf '%s\n' '{"jsonrpc":"2.0","method":"notifications/initialized"}'
  printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
  sleep 1
  printf '%s\n' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search","arguments":{"query":"NavigationStack","limit":3}}}'
  sleep 2
} | /opt/homebrew/bin/cupertino serve

→ valid response in <100 ms, no error.

Not server-specific

Reproduced with two unrelated MCP servers:

  • cupertino 0.10.0 (native Swift binary, Apple docs MCP)
  • iterm-mcp (Node.js, via npx -y iterm-mcp)

Same symptom in both. So the regression is in the Claude Desktop MCP client dispatch path, not in any individual server.

New disclaimer helper introduced in this build

The 2026-05-12 build adds a new wrapper at /Applications/Claude.app/Contents/Helpers/disclaimer. Every configured MCP server is now spawned as:

/Applications/Claude.app/Contents/Helpers/disclaimer /path/to/server serve

strings on the helper shows it is just a shim around responsibility_spawnattrs_setdisclaim() (a private macOS API to detach TCC responsibility from the parent process). Its only relevant strings are:

Usage: disclaimer <command> [args...]
Failed to set disclaim attribute: %s

It should be transparent on stdio (just execs the child after the disclaim syscall), but its introduction is coincident with this regression for me. Worth checking whether the shim's process detachment is interacting badly with how the parent pipes JSON-RPC to the server's stdin after tools/list.

Related issues

  • #37806 — same symptom, macOS Apple Silicon, March 2026, marked stale and now locked so I can't comment there. Root cause is very likely the same.
  • #58771 — different MCP regression filed for build dated 2026-05-12 (Optional[List[str]] serialization). Suggests a broader MCP client regression landed in that build.
  • #22299 — similar "tools/call never appears in log" symptom on Windows, regression in CCD v2.1.22.
  • #50319 — silent tools/call hang in a different edge case (namespace collision); also macOS.

Platform

Claude Desktop (macOS app)

What Should Happen?

After a successful tools/list, tools/call requests should be written to the MCP server's stdin and the response returned to the model. If the dispatch fails the client should surface an error, not hang the UI indefinitely.

Error Messages/Logs

Steps to Reproduce

  1. macOS Tahoe (26), Apple Silicon, Claude Desktop with Claude Code 2.1.126 (build dated 2026-05-12).
  2. Configure any local stdio MCP server in ~/Library/Application Support/Claude/claude_desktop_config.json, e.g. cupertino:
{
  "mcpServers": {
    "cupertino": {
      "command": "/opt/homebrew/bin/cupertino",
      "args": ["serve"]
    }
  }
}
  1. Start a new conversation and ask the model to use a cupertino tool (e.g. "use cupertino to search for NavigationStack").
  2. Observe the "Utilizzo di cupertino: search" spinner with the token counter frozen for minutes.
  3. tail -f ~/Library/Logs/Claude/mcp-server-cupertino.log while the spinner spins — you will see tools/list and resources/list arrive and be answered, but no "method":"tools/call" line ever appears.

Claude Model

Opus

Is this a regression?

Yes, this worked in a previous version

Last Working Version

Worked before the 2026-05-12 Claude Desktop build (binaries in /Applications/Claude.app/Contents/Helpers/ are dated 2026-05-12, which matches the day the failure began).

Claude Code Version

2.1.126

Platform

Other

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

No response

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

claude-code - 💡(How to fix) Fix [BUG] Claude Desktop 2.1.126 (2026-05-12): tools/call never written to MCP server stdin — UI spinner hangs forever, log shows no tools/call entry [1 participants]