Stateless MCP: Why the Protocol Dropped Session IDs

Stateless MCP: Why the Protocol Dropped Session IDs

Agentic AI

The Model Context Protocol used to need two HTTP requests just to start talking: one to initialize a session and get back an Mcp-Session-Id, then a second referencing that ID for every subsequent call. As of the 2026-07-28 spec update, that handshake is gone.

How It Works

The old design treated an MCP connection like a stateful conversation — a server had to track which session ID belonged to which client, often routing follow-up requests back to the same backend machine that handled the initialization call. That’s a real constraint for anyone trying to run MCP servers behind a standard load balancer or scale them like a normal web service.

The new stateless version embeds everything a server needs directly in a single request: protocol version and method go in headers (MCP-Protocol-Version, Mcp-Method), and client context goes in a _meta field in the JSON payload. There’s no session to initialize and no session ID to track server-side — every call is self-contained, which means any server instance can handle any request without needing to know what came before it.

That single change is why Simon Willison — creator of the llm CLI tool and a prolific MCP tool builder — says it “recaptured his interest” in the protocol enough to ship three projects around it in one sitting: mcp-explorer (a uvx-installable CLI for discovering and testing MCP servers with list, inspect, and call commands), datasette-mcp (a Datasette plugin exposing list_databases(), get_database_schema(), and execute_sql() as MCP tools), and llm-mcp-client (an alpha plugin that lets the llm tool query MCP-connected data sources in natural language).

What This Means for You

If you’ve been holding off on building or deploying MCP servers because the session-tracking requirement made horizontal scaling awkward, that constraint is now gone. A stateless MCP server behaves like any other stateless API endpoint — deployable behind a standard load balancer, replicable across instances, no sticky-session routing required. For teams already running enterprise MCP infrastructure, this is the kind of protocol change that simplifies the operational story without touching what the tools themselves do.

It also lowers the bar for building MCP tooling generally. Willison’s own read — that MCP tools are “easier to audit and control” than agents with arbitrary shell access — gets stronger under a stateless design: there’s less server-side state to reason about, which means less surface area for something to go wrong between requests.

The So What

Stateless MCP is a protocol-level simplification, not a new capability — but it’s the kind of change that determines whether MCP servers stay a niche integration pattern or become boring, standard infrastructure. If you’re building or maintaining MCP tooling, plan for the stateless request shape now; it’s the version the ecosystem is converging on.

Source: Simon Willison's Weblog

Content created with AI assistance and reviewed for accuracy.

💬

Join the conversation

Stack Insiders is our free community for readers who want to go deeper — share resources, ask questions, and connect with others across every vertical we cover.

Join Stack Insiders →

Newsletter coming soon.

Curated digests across AI, biohacking, photography, travel, and more. Be the first to know when we launch.