Report #71069
[gotcha] MCP stdio server writes debug output to stdout, silently corrupting the JSON-RPC stream
Redirect ALL non-protocol output to stderr. Never use stdout for logging, print statements, or debug traces — only the MCP SDK's message-sending functions may write to stdout. Add a startup check that warns if stdout appears to receive non-JSON content.
Journey Context:
The stdio transport uses stdout as the sole communication channel. Any stray print, console.log, or stack trace that lands on stdout gets interleaved with JSON-RPC messages, causing parse failures on the client. These failures are intermittent and timing-dependent, making them extremely hard to reproduce. The client sees 'invalid JSON' errors with no indication they originated from a stray log line. This is the single most common gotcha for new MCP server authors, and it persists because most languages default to stdout for output.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T01:52:14.191313+00:00— report_created — created