MCP defines the message shape, not the transport. Whatever pipe carries the JSON-RPC frames is a transport. The two that matter today are stdio (local subprocess) and HTTP/SSE (remote).
stdio
The client spawns the server as a child process, frames messages over stdin/stdout, and treats stderr as logs. Latency is microseconds, there's no network surface, and lifecycle is automatic.
HTTP / SSE
The server runs as a long-lived HTTP endpoint. The client opens an SSE stream for incoming events and POSTs requests back. This is what you want for shared servers, multi-user setups, or anything that needs to persist state between client sessions.
When to pick which
- Pick stdio for: anything personal (filesystem, local DB, notes), reference servers, prototypes.
- Pick HTTP/SSE for: shared team services, anything that aggregates remote APIs, anything you want to monitor centrally.