An MCP transport is the wire layer carrying JSON-RPC messages. Stdio (local subprocess) and streamable HTTP (remote service) are the two active transports; HTTP plus SSE was deprecated.
Think of MCP messages as letters in a specific envelope format. The transport is the delivery service that carries them. The letters do not care which service delivers them. They only care that they arrive intact. MCP has two delivery services in use today. Stdio is for when the destination is on the same machine (a local program on your laptop). Streamable HTTP is for when the destination is across the internet (a remote server in the cloud). An older third service called HTTP plus SSE was retired in March 2025 because it was harder to operate. New servers should not use it.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
A transport in MCP is the layer you rarely think about until something breaks. It is the wire substrate that moves JSON-RPC 2.0 messages between the client (inside the host) and the server (the process wrapping an external system). The protocol defines message shapes and semantics; the transport defines how the bytes travel.
What a transport is and why it is pluggable
A transport is the wire layer that carries JSON-RPC 2.0 messages between an MCP client and an MCP server. The protocol describes the messages (tools/list, tools/call, resources/read, server/discover, notifications) and what each means semantically. It does not describe how the bytes get from one side to the other.
The pluggability is intentional. Different deployment shapes call for different wire layers. A local server that the host launches as a subprocess wants the cheapest inter-process channel (stdin and stdout). A remote multi-tenant SaaS server wants something that crosses the internet and integrates with existing auth systems (HTTP). Forcing both shapes onto one transport would compromise both.
The payoff is that the JSON-RPC framing, the capability negotiation, and the request handling are identical regardless of transport. From host code, calling a tool on a stdio server looks the same as calling a tool on a streamable HTTP server. The difference is contained in the connection setup phase.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
Real products, models, and research that use this idea.
- Claude Desktop's filesystem server uses stdio: launched as a Node subprocess on the user's machine, messages over stdin/stdout.
- GitHub MCP server (rewritten in Go in 2025) uses streamable HTTP: multi-tenant, OAuth 2.1 authentication, deployed in GitHub's cloud.
What an interviewer would ask next. Try answering before peeking at the approach.
QWhy did the spec move from HTTP plus SSE to streamable HTTP?
HTTP plus SSE required two HTTP connections (POST for client to server, SSE for server to client) and was harder to operate across proxies, load balancers, and CDNs. Streamable HTTP uses one endpoint: each message is a POST, and the server can reply with JSON or an SSE stream on the same response, which fits standard HTTP infrastructure.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Targeting HTTP plus SSE for new servers. That transport was deprecated in March 2025 in favor of streamable HTTP. New remote servers should use streamable HTTP exclusively.
60 second bullets to scan on the way to the call.
Define an MCP transport as the wire layer for JSON-RPC messages.
Name the two transports in active use (stdio, streamable HTTP).
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.