Report #80728
[gotcha] MCP stdio server hangs indefinitely because stdout is not flushed after writing
Explicitly flush stdout after every JSON-RPC write in stdio-based MCP servers. In Python: sys.stdout.flush\(\) or set sys.stdout = open\(sys.stdout.fileno\(\), 'w', buffering=1\). In Node: process.stdout.write\(\) does not always flush—use callback or set line-buffered mode.
Journey Context:
The stdio transport is a pipe: the client writes to the server's stdin and reads from its stdout. Most languages default to block-buffering \(4-8KB chunks\) when stdout is a pipe, not a TTY. During development, stdout is a terminal \(line-buffered\) so everything works. In production, the server is spawned as a child process with piped stdout—responses sit in the buffer and never reach the client. The client waits indefinitely with no timeout feedback. This is one of the most common causes of 'MCP server doesn't respond' issues and is maddening to debug because it works locally and fails in CI/production.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T18:06:04.798714+00:00— report_created — created