MechanismArticle
Legacy stateful MCP required two HTTP requests — an initialize handshake to obtain a Mcp-Session-Id followed by the actual tool call — while stateless MCP collapses this to a single request, which is much cleaner to implement from both client and server sides and a better fit for scalable web applications that need no server-side session state.
Using the before-and-after example from the spec's RC announcement, Simon shows that legacy MCP needed two HTTP requests (initialize to get a session ID, then the call), while stateless MCP needs just one — cleaner to implement and better for scalable web apps, since there's no server-side session state to maintain or route. ✦ AI generated
Simon Willison · Simon Willison's Weblog · 2026-07-31 · original ↗
The older stateful MCP (I'm going to call it "legacy MCP") required two HTTP requests - the first to initialize a session and obtain a Mcp-Session-Id, and the second to actually call the tool: POST /mcp HTTP/1.1 Content-Type: application/json { "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2025-11-25", "capabilities": { }, "clientInfo": { "name": "my-app", "version": "1.0" } } } POST /mcp HTTP/1.1 Mcp-Session-Id: 1868a90c-3a3f-4f5b Content-Type: application/json { "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "search", "arguments": { "q": "otters" } } } The new stateless way uses a single HTTP request which looks like this: POST /mcp HTTP/1.1 MCP-Protocol-Version: 2026-07-28 Mcp-Method: tools/call Mcp-Name: search Content-Type: application/json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "search", "arguments": { "q": "otters" }, "_meta": { "io.modelcontextprotocol/clientInfo": { "name": "my-app", "version": "1.0" } } } } This is so much cleaner from both a client- and server-side implementation perspective. It's also a better fit for building scalable web applications, since now you don't need to maintain server-side state to keep track of those session IDs, or worry about routing the same session to the same backend machine.
Read full article ↗excerpt · fair-use quotation
Around this claim
This moment responds to
explains mechanism → Giving an agent a shell environment with internet access is fraught with risk and requires a strong driving model, whereas MCP tools are easier to audit and control and are simple enough that smaller laptop models can drive them, and the stateless spec greatly cuts client and server implementation complexity.Simon Willison · Simon Willison's Weblogexplains mechanism → The 2026-07-28 stateless MCP specification (MCP 2.0) is the most significant change to the Model Context Protocol since it first launched, and it has reignited my interest in a protocol that had been eclipsed by Skills and by agent harnesses with terminal and curl access.Simon Willison · Simon Willison's Weblogprovides context → MCP lets a host application route a user request through an embedded MCP client to the correct MCP server, which executes the tool call and returns a structured response the agent uses to continue reasoning.ByteByteGo · ByteByteGo Newsletter