What shipped on 28 July
The Model Context Protocol released its fifth specification on 28 July, and it is the largest change since the protocol launched. The core is now stateless. The initialize and initialized handshake is gone, the Mcp-Session-Id header is retired, and each request instead carries the protocol version, the client identity and the client's capabilities in a _meta field. The practical effect is that a plain round-robin load balancer works: any instance can serve any request, and there is no shared session store to run.
Several other pieces follow from that decision. Multi Round-Trip Requests replace the server-initiated calls that used to need a held-open stream, so instead of pushing a request down an open channel, a server returns a result type of input_required and the client retries the original call with its answers attached. Streamable HTTP requests now carry Mcp-Method and Mcp-Name headers so a gateway or rate limiter can route and meter without parsing a JSON body. List results from tools, prompts and resources carry a time-to-live and a cache scope. Tasks and MCP Apps move into a formal extensions framework rather than sitting in the core.
The adoption numbers explain why this matters beyond the people who write servers. The Tier 1 SDKs, TypeScript, Python, Go and C sharp, are approaching 500 million downloads a month between them, and the TypeScript and Python packages have each passed a billion downloads in total. David Soria Parra, one of the lead maintainers, called it the most important release since remote MCP launched over a year ago. If your business bought a product in the last eighteen months that connects an assistant to your systems, this specification is underneath it whether or not anyone told you the name.
Sampling's removal moves an inference bill
The deprecation list reads as housekeeping: Roots, Sampling and Logging, all with a twelve-month support window. Two of those are genuinely minor. Roots becomes directory and file paths passed as tool parameters or set in server configuration. Logging moves to standard error or to OpenTelemetry, which is where most operators wanted it anyway. Sampling is different, and it is different in a way that touches a budget rather than a codebase.
Sampling was the mechanism by which an MCP server could ask the client to run a model completion on its behalf. The server needed language model output but did not have to hold model credentials, because the client did the inference and the client paid for it. That is a real commercial arrangement expressed as a protocol feature. The published migration guidance for servers losing Sampling is to integrate directly with LLM provider APIs from the server side. Read that as an operator and the consequence is plain: the party running the server now needs its own provider account, its own key, and its own line item.
Which direction that moves money depends on which seat you are in. If you run MCP servers for your own staff against a vendor's client, inference you were not paying for lands on your account, and for a mid-sized deployment that is a new four-figure monthly commitment in euros or pounds rather than a rounding error. If you consume a vendor's MCP server, expect the vendor to reprice, because a cost it used to push onto your client is now its own. Neither of those is announced in a release note. Both of them show up on an invoice within a year.
Stateless moved the state, it did not delete it
The vendor commentary around this release is uniformly about scale, and it comes from the companies that benefit most when servers become easy to host: cloud and edge providers describing the protocol as routable, cacheable and globally scalable, and platform firms welcoming the end of session management. All of that is true. Dropping sticky sessions removes a class of failure where an interrupted stream destroyed the whole conversation, and it lets a server run on serverless infrastructure that could never have held a session open.
What none of it says is that the state did not evaporate. Anything that genuinely needs to persist across calls now has to be represented explicitly: the server mints an identifier, a basket, a token, a workflow handle, and returns it inside a result for the client to send back. That is a sound design, but it converts an invisible protocol concern into a visible part of your tool contracts. Someone has to decide what those identifiers mean, how long they last, and what happens when a client replays a stale one. That work did not disappear when the session header did. It moved into your schemas, where it is your team's to get right.
Put 28 July 2027 in the plan
The governing rule is that anything marked for deprecation stays functional for at least twelve months. That makes 28 July 2027 the earliest date on which Roots, Sampling, Logging, Dynamic Client Registration or the legacy HTTP and SSE transport can actually be removed, and it is the only date in this release worth writing into a roadmap. Nothing breaks this week. The authorization changes are the ones to read first regardless: authorization servers must now return an issuer parameter and clients must validate it before redeeming a code, client credentials are bound to the server that issued them, and Dynamic Client Registration gives way to Client ID Metadata Documents.
For a European operation the piece worth acting on early is Enterprise Managed Authorization, which arrives as an extension and lets administrators provision MCP server access centrally through an identity provider. Until now authorization in MCP deployments was frequently an afterthought, which is precisely why so many internal agent projects stalled at the security review. If yours is one of them, the reason it stalled has now been addressed in the specification, and the honest next step is to ask your vendors when they will support the extension rather than waiting to be told.
Read next: A Single Message Reached the Host's SSH Keys | Anthropic Asked a Memory Maker for Its Own Chips



