Report #16854
[gotcha] stdio MCP transport used over SSH or remote forwarding provides zero authentication or encryption
Use the Streamable HTTP transport with TLS and OAuth 2.1 authentication for any MCP server that is not a local subprocess. Reserve stdio exclusively for locally-spawned processes where the parent-child trust relationship is explicit. Never tunnel stdio over SSH, WebSocket, or any network-forwarding mechanism without adding an independent encryption and authentication layer.
Journey Context:
The stdio transport is the simplest and most commonly demonstrated MCP transport. It assumes the server is a local child process—trusted by nature of being spawned by the client. But in practice, people forward stdio over SSH, use it with remote process managers, or wrap it in WebSocket bridges. Each of these breaks the security model: stdio has no handshake, no authentication, no encryption, and no session isolation. Any process on the same host \(or the remote host, if forwarded\) that can write to the transport can inject messages. The Streamable HTTP transport with proper OAuth and TLS is the spec-compliant solution for non-local servers, but the ecosystem's stdio habit dies hard because it's simpler to set up.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T03:49:44.653834+00:00— report_created — created