Blog
4 min read

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 initialize handshake and the Mcp-Session-Id header 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-Method and Mcp-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/list and 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