[BUG] Claude Desktop silently drops MCP stdio tool calls when argument payload exceeds ~1KB
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?
Claude Desktop fails to deliver MCP tools/call requests via stdio transport when the serialized JSON-RPC message exceeds approximately 800–1100 bytes. The request never reaches the MCP server's stdin — it is silently dropped on the client side, and after ~60 seconds Claude Desktop displays:
"No result received from client-side tool execution."
This is NOT a server-side timeout, processing issue, or maxBuffer overflow. The MCP server logs show no incoming request at all.
We conducted systematic testing within a single session using the same tool (litediff_preview), same server, progressively increasing the string argument size:
| Test | patch bytes | JSON-RPC total bytes | Lines | In mcp.log? | In server log? | Result |
|------|-----------|---------------------|-------|-------------|----------------|--------|
| 1 | 133 B | 277 B | 6 | ✅ id:7 | ✅ | Success |
| 2 | 592 B | 766 B | 26 | ✅ id:8 | ✅ | Success |
| 3 | 501 B | 668 B | 29 | ✅ id:10 | ✅ | Success |
| 4 | 919 B | 1,109 B | 52 | ❌ absent | ❌ absent | Silent failure |
| 5 | 1,664 B | 1,888 B | 86 | ❌ absent | ❌ absent | Silent failure |
Both mcp.log (Claude Desktop's own MCP transport log at %APPDATA%\Claude\logs\) and the server's log file show ZERO trace of the failed requests. The sequential JSON-RPC id simply never appears. This proves the message was never written to the child process's stdin pipe.
What Should Happen?
Claude Desktop should write the complete JSON-RPC message to the MCP server's stdin regardless of argument size, or return a clear error indicating the payload was rejected.
Error Messages/Logs
UI error message:
"No result received from client-side tool execution."
mcp.log evidence (successful calls end at id:10, failed calls have no trace):
2026-03-19T18:00:13.923Z [info] [litediff] Message from client: {"method":"tools/call","params":{"name":"litediff_preview","arguments":{"backupLimit":0,"patch":"--- test-large.txt\n+++ test-large.txt\n@@\n line 1: alpha\n-line 2: bravo\n..."}},"jsonrpc":"2.0","id":10}
2026-03-19T18:00:13.932Z [info] [litediff] Message from server: {"jsonrpc":"2.0","id":10,"result":{...}}
-- After id:10, no more entries in either log. The next tool calls (id:11, id:12 for larger payloads) never appear. --
Steps to Reproduce
- Configure a stdio MCP server in
claude_desktop_config.jsonthat accepts a string argument (e.g., a "patch" parameter) - In a Claude Desktop conversation, trigger a tool call with a small string argument (~200 chars) → succeeds, appears in mcp.log
- Trigger the same tool with a medium string argument (~800 chars) → succeeds
- Trigger the same tool with a larger string argument (~1.2KB+) → fails silently
- Check
%APPDATA%\Claude\logs\mcp.log— the failed request never appears - Check the MCP server's own logs — no incoming request logged
- After ~60 seconds, Claude Desktop shows "No result received from client-side tool execution."
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
N/A — this bug is in Claude Desktop, not Claude Code CLI. Filed here as there is no public Claude Desktop issue tracker.
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
Other
Additional Information
Environment:
- Product: Claude Desktop (Windows 11)
- MCP Transport: stdio (JSON-RPC 2.0)
- MCP Server: custom Node.js server (litediff, Node v22.20.0)
- Protocol version negotiated: 2024-11-05
- Client info from logs: claude-ai v0.1.0
Key findings:
- The MCP specification does not define argument size limits for tools/call
- No ERR_CHILD_PROCESS_STDIO_MAXBUFFER errors observed — the message is never sent in the first place
- The threshold appears to be on the serialized JSON-RPC message size (between 766 B and 1,109 B)
- Smaller tool calls in the same session (workspace tree, file read, file info) all succeed, confirming the stdio pipe itself is healthy
- The same payloads work correctly via HTTP/Streamable HTTP transport (e.g., from Cursor IDE to the same MCP server)
- Impact: severely limits MCP tools accepting text content as arguments (code patches, documents, SQL queries, templates, configs). A modest 50-line code diff already crosses this threshold.
This issue has 6 comments on GitHub. Read the full discussion on GitHub ↗