The 2026-07-28 revision of the Model Context Protocol removed the initialize handshake (SEP-2575) and the Mcp-Session-Id header along with the protocol-level session it carried (SEP-2567). Every request now describes itself: protocol version, client info, and capabilities travel in a _meta field on each call, instead of being negotiated once at connection time.

Most of the write-ups are reading this as a scaling story. They are not wrong. Removing the session is what lets any request land on any server instance behind a plain round-robin load balancer, which is what makes MCP servers behave like ordinary HTTP services that run on serverless and edge and survive restarts. That part is real and it is the spec's own headline.

But the scaling is the consequence, not the idea. The interesting question is where the state went, because it did not disappear. It moved somewhere the model can see it.

What actually changed

Under the old model, talking to a server meant running a handshake, getting back a session id, and carrying that id on every later request. The session was a live object inside one specific server process, holding the negotiated state.