MCP Transitions to Stateless Architecture
Better Stackgo watch the original →
the gist
The Model Context Protocol (MCP) has moved to a stateless architecture, removing the initialize handshake and session IDs to enable standard HTTP load balancing and serverless scaling.
Removal of Protocol-Level State
The 2026-07-28 MCP specification eliminates the initialize handshake and the Mcp-Session-Id header, effectively making every request independent. This shift removes the requirement for sticky sessions or shared state stores like Redis, allowing developers to use standard round-robin load balancing. Servers can now scale to zero, as they no longer need to maintain persistent connections or session-specific memory, making the protocol compatible with serverless environments like Cloudflare Workers or Google Cloud Run.
HTTP-Aligned Infrastructure
The update introduces standard HTTP-style mechanisms to improve performance and caching:
- Header-based routing: New
Mcp-MethodandMcp-Nameheaders allow gateways and firewalls to inspect requests without parsing the JSON body. - Caching hints: The spec adds
ttlMsandcacheScopefields to tool, prompt, and resource list calls, enabling clients to manage freshness and user-specific caching. - Server discovery: An optional
server/discovermethod replaces the previous handshake for clients to query server capabilities.
Handling State and Asynchronous Workflows
Developers must now manage application-level state explicitly by passing identifiers (e.g., basketId) as arguments within tool calls. For interactive or long-running operations, the protocol has been updated as follows:
- Multi-round-trip requests: Instead of pushing follow-up questions over a persistent stream, servers return an
input_requiredresult containing a serializedrequest_statepayload. The client reissues the original call with the user's input and the echoed state, allowing any server instance to resume the operation. - Official Tasks: The Tasks extension is now official, allowing tools to return an immediate response while processing long-running jobs in the background. Clients track progress via
tasks/getorsubscription/is_onmethods.