Report #62167
[gotcha] MCP stdio transport deadlocks on large tool results — server hangs forever
Bound the size of inline tool results. For payloads exceeding ~256KB, return a resource reference \(using embedded resource links\) instead of inline content. Ensure your MCP server flushes stdout after every JSON-RPC message. Implement client-side read timeouts as a safety net.
Journey Context:
The stdio transport uses OS pipes: server writes to stdout, client reads from it. OS pipe buffers are typically 64KB. If the server writes a large JSON-RPC response that exceeds the buffer, the write\(\) call blocks. If the client is simultaneously trying to write a new request to the server's stdin, and that write also blocks, you have a classic bidirectional deadlock. This is maddening to debug because it only triggers on large results, making it appear intermittent and non-deterministic. It looks like the server is slow; it's actually stuck.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T10:50:02.280935+00:00— report_created — created