The Model Context Protocol (MCP) is undergoing a significant update, shifting from a stateful, session-based design to a more stateless, HTTP-like model. This architectural change aims to simplify distributed deployments, reduce operational overhead, and improve scalability by offloading session management to existing infrastructure and making requests self-contained.
Read original on The New StackThe original design of MCP, while suitable for local desktop applications, presented significant challenges when deployed in remote, horizontally scaled environments. The protocol's reliance on sessions introduced statefulness at the transport layer, leading to complexities like session affinity requirements, shared session stores, or MCP-aware gateway logic to correctly route requests. These necessities added a substantial "tax" on development and operations teams, forcing them to solve distributed system problems that the protocol itself created.
The core of the MCP update is to make every request self-contained. This involves removing sessions and the initialization handshake, and instead, including protocol version, client capabilities, and identity in the metadata of each call. This "pay-as-you-go complexity" principle ensures the core protocol remains lean, with statefulness only appearing where genuinely needed and managed explicitly by the application layer.
Explicit Handles vs. Hidden Session State
Instead of relying on hidden session state in transport metadata, the updated MCP encourages the use of explicit handles (e.g., `basket_id` for a shopping cart). These handles are visible to the application model, allowing for easier composition across tools and workflow steps, and enabling better reasoning about state. However, this also shifts the responsibility for authentication and authorization verification to the application for each use of a handle.
While the shift to statelessness simplifies many aspects, it also introduces new responsibilities for developers. The protocol no longer manages state, but application state (like handles, task records, and idempotency keys) still needs a place to live and be managed. Features like client-mediated sampling and structured log streams, previously handled by the protocol, now require direct integration with provider APIs or external observability tools (e.g., OpenTelemetry). Migrations from deprecated features are not drop-in replacements, requiring careful re-architecture, especially for authentication and billing concerns previously abstracted away by the protocol.