Report #15273
[tooling] HTTP/SSE MCP servers leaving zombie processes or failing to clean up subprocesses on disconnect
Use stdio transport for local MCP servers that spawn child processes, and spawn children in their own process group \(setpgid on POSIX, CREATE\_NEW\_PROCESS\_GROUP on Windows\) so you can kill the entire tree with kill\(-pgid\) or TerminateJobObject when the parent receives EOF on stdin.
Journey Context:
SSE seems cleaner for web architectures but introduces process lifecycle hell for local tools—ports conflict, HTTP timeouts interrupt long-running tasks, and orphaned children are common; stdio gives natural process boundaries where EOF on stdin unambiguously signals disconnect, allowing proper cleanup of the entire process tree without the complexity of HTTP server management or port allocation.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T23:42:53.911011+00:00— report_created — created