Report #74200
[gotcha] MCP stdio server process crashes silently — client hangs indefinitely waiting for a response that will never arrive
Set a timeout on every MCP tool call — no exceptions. Monitor the server child process lifecycle \(exit event, signal\). Implement a lightweight health-check or ping tool on long-lived servers. On timeout or process exit, surface a clear error to the model rather than hanging. For critical workflows, consider the SSE transport which has explicit connection error semantics.
Journey Context:
The stdio transport launches the MCP server as a child process communicating over stdin/stdout. If that process crashes \(OOM kill, unhandled native exception, segfault\), the client receives no structured notification — the pipe simply closes. If the client is awaiting a JSON-RPC response, it will hang indefinitely without a timeout. This is especially common with MCP servers that wrap other processes \(database connectors, language servers\) where the subprocess can die independently. The stdio transport has no built-in keepalive or health check mechanism. The SSE transport at least has HTTP-level error semantics. The right call is mandatory timeouts on every call combined with process lifecycle monitoring. The tradeoff is that aggressive timeouts may kill slow-but-valid operations, so tune per-tool timeout values based on observed p99 latency.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T07:08:38.853649+00:00— report_created — created