[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
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
After connecting any local stdio MCP server, the full lifecycle works:
initialize→ OKnotifications/initialized→ OKtools/list→ OK (tools appear in the UI)claude mcp listreports 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:
cupertino0.10.0 (native Swift binary, Apple docs MCP)iterm-mcp(Node.js, vianpx -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
staleand 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/callhang 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
- macOS Tahoe (26), Apple Silicon, Claude Desktop with Claude Code 2.1.126 (build dated 2026-05-12).
- 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"]
}
}
}
- Start a new conversation and ask the model to use a cupertino tool (e.g. "use cupertino to search for NavigationStack").
- Observe the "Utilizzo di cupertino: search" spinner with the token counter frozen for minutes.
tail -f ~/Library/Logs/Claude/mcp-server-cupertino.logwhile the spinner spins — you will seetools/listandresources/listarrive 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_
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗