MCP Transports: stdio vs Streamable HTTP (and What the 2026 Spec Changed)
MCP servers talk to clients over stdio (a local subprocess) or Streamable HTTP (a remote endpoint). How each works, when to choose which, how to add both to Claude Code, why the old HTTP+SSE transport is deprecated, and what the stateless 2026-07-28 specification means for building and hosting HTTP servers.
The Model Context Protocol defines what an AI client and a tool server say to each other. Transports define how the messages travel. There are two you need to know: stdio and Streamable HTTP.
stdio: a local subprocess
The client starts the server as a child process on the same machine and exchanges JSON-RPC messages over standard input and output.
claude mcp add playwright -- npx @playwright/mcp@latest
- No network, no ports, no auth — the server runs as you, with your permissions.
- One client per server process. Each Claude Code session starts its own.
- Perfect for local tools: filesystem helpers, browser automation, a database CLI on your machine. (Playwright MCP)
The catch is the same as its strength: a stdio server can do anything your user account can. Only run servers you trust. (Secure MCP Servers)
Streamable HTTP: a remote endpoint
The server is a web service. The client sends JSON-RPC messages as HTTP POSTs to one endpoint (e.g. https://mcp.example.com/mcp); the server responds with JSON, or streams responses using Server-Sent Events on the same request when it needs to send several messages.
claude mcp add --transport http linear https://mcp.linear.app/mcp
- Remote and shared: one deployment serves many users and clients.
- Real authentication: OAuth, so each user grants access to their own account.
- Ideal for SaaS integrations — GitHub, Linear, Sentry, Supabase all offer hosted MCP servers. (GitHub MCP Server, Supabase MCP)
Which should you use?
| stdio | Streamable HTTP | |
|---|---|---|
| Runs | On the user's machine | On a server |
| Setup for users | Needs the runtime (Node, Python…) installed | Just a URL |
| Auth | Inherits the local user | OAuth / tokens |
| Users per instance | One | Many |
| Good for | Local files, local apps, dev tools | SaaS APIs, team services, anything shared |
| You must operate | Nothing | A web service (TLS, scaling, auth) |
Building something only you will use on your laptop? stdio. Building an integration for your product's customers? Streamable HTTP.
What about SSE?
The original remote transport was HTTP+SSE: one endpoint for POSTs and a separate long-lived SSE stream for responses. It was replaced by Streamable HTTP in 2025 and the 2026-07-28 spec formally deprecates it, with a year-long off-ramp. Don't build new servers on it. (Server-Sent Events vs WebSockets)
The 2026-07-28 spec: stateless HTTP
The biggest change in the July 2026 revision affects HTTP servers:
- No more sessions. The
initializehandshake and theMcp-Session-Idheader are gone. Each request carries its protocol version, client info and capabilities in_meta. Any instance behind a round-robin load balancer can serve any request — far easier to scale and host. (What Is a Load Balancer?) - Routing headers. Requests include
Mcp-MethodandMcp-Name, so gateways and rate limiters can act without parsing the JSON body. - Server-to-client requests reworked. Elicitation, sampling and roots move to "multi round-trip requests": the server answers
input_required, and the client retries with the answers. Roots, Sampling and Logging are deprecated. - Cacheable lists —
tools/listand friends return TTLs. - Auth hardening, and Client ID Metadata Documents preferred over dynamic client registration.
If your server stored state per session, mint an explicit handle from a tool and have the model pass it back as an argument instead.
The official TypeScript, Python, Go and C# SDKs support the new revision. Claude Code negotiates 2026-07-28 with local stdio servers by default from version 2.1.292 (MCP_PROTOCOL_NEGOTIATION=legacy opts out if an older server breaks).
Building one
Start with stdio while you develop — it's the simplest to debug — and add a Streamable HTTP entry point when you need remote access. The SDKs let one server expose both. (How to Build an MCP Server)
The summary
- stdio: local subprocess, no network, one user — for local tools.
- Streamable HTTP: remote endpoint with OAuth, many users — for shared and SaaS integrations.
- HTTP+SSE is deprecated; the 2026-07-28 spec makes HTTP servers stateless.
EasySpawn gives Claude Code a persistent server where local stdio MCP servers stay installed and configured between sessions, alongside the remote ones you connect. See how it works or join the waitlist.
Related: Connecting MCP Servers to Claude Code · Best MCP Servers · MCP vs API · What Is Function Calling?
Keep reading
Claude Code Routines: Scheduled, API and GitHub-Triggered Agents in the Cloud
Routines are saved Claude Code tasks — a prompt, repositories and connectors — that run on Anthropic's cloud or an organization's self-hosted environment. How to create one with /schedule or the web, use schedule, API and GitHub triggers, and manage limits and security.
Claude Code /goal: Keep Claude Working Until the Job Is Actually Done
/goal sets a completion condition and Claude keeps taking turns until a separate model confirms it's met — no prompting each step. How to write conditions the evaluator can verify, how evaluation and check-ins work, combining it with auto mode, running it headless, and when to use /loop or a Stop hook instead.