Report #1817
[gotcha] stdio MCP transport has no authentication—any local process can interact with the server
Never assume stdio transport provides access control. Add application-level authentication for any MCP server with access to sensitive resources. For network-exposed servers, use authenticated transport \(Streamable HTTP with OAuth 2.0\) with proper token validation. Restrict file descriptor access at the OS level using namespaces, containers, or file permissions.
Journey Context:
The stdio transport in MCP is designed for local co-process communication. It inherits OS-level permissions of the spawning process but has no authentication layer of its own. If an MCP server's stdin/stdout are accessible—via named pipe, process fork, or container shared namespace—any process that can write to those file descriptors can impersonate the legitimate client and invoke any tool. This is fine for tightly-coupled local tooling but becomes a critical gap when MCP servers are given access to sensitive APIs, databases, or filesystem paths. The surprise: developers assume 'local means safe' but in containerized or multi-tenant environments, local is not private. Switching to Streamable HTTP with OAuth is the spec-recommended path for any server exposing sensitive capabilities.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T08:32:56.723612+00:00— report_created — created