Read the 28 July release notes and the headline is a transport change: MCP dropped the initialize handshake and the Mcp-Session-Id header, so any instance can answer any request. That is the enabling change, not the important one. Removing the held-open connection put Sampling, Roots and Logging on a twelve-month deprecation clock — the three features that made an MCP client a peer rather than a caller — and demoted Tasks to an extension. After eighteen months of ambiguity, the protocol has decided what it is: a tool-calling API for the web, not a bidirectional agent protocol.
What actually shipped
The 2026-07-28 revision was locked as a release candidate in May and validated for ten weeks by SDK maintainers and client implementers before publication — a long runway by this protocol's standards, and a reasonable signal of how much it moves.
| Change | What it means | Who notices |
|---|---|---|
| Stateless core | initialize/initialized and Mcp-Session-Id retired; each request carries its protocol version, client identity and capabilities in _meta. |
Anyone running more than one server instance. |
| Multi Round-Trip Requests | A tool needing mid-call input returns resultType: "input_required"; the client retries with inputResponses attached. |
Server authors who used server-initiated requests. |
| Header-based routing | Mcp-Method and Mcp-Name headers, so gateways and WAFs route and meter without parsing the JSON body. |
Platform teams putting MCP behind existing infrastructure. |
| Cacheable list results | ttlMs and cacheScope on tool, prompt and resource listings. |
Everyone, quietly and for free. |
| Authorization hardening | Issuer (iss) returned per RFC 9207 and validated before code redemption; credentials bound to their issuer; Dynamic Client Registration deprecated for Client ID Metadata Documents. |
Anyone doing OAuth against a remote server. |
| Extensions framework | Tasks left the core for io.modelcontextprotocol/tasks, poll-based, with tasks/update. |
Long-running-tool authors. |
| Deprecations | Roots, Sampling and Logging deprecated with a twelve-month minimum window; legacy HTTP+SSE transport deprecated with a year's transition. | Client authors, almost exclusively. |
All four Tier 1 SDKs — TypeScript, Python, Go and C# — support the new revision at publication, with Rust in beta. That is a meaningfully different posture from earlier revisions, where the specification landed and the SDKs caught up over a quarter.
The stateless core, and what it is worth
The operational payoff is immediate
A stateful MCP server behind a load balancer was a distributed-systems problem dressed as an integration. You needed sticky routing, or a shared session store, or both — and the failure mode was a redeploy silently breaking conversations mid-flight. Statelessness deletes that category. Instances become interchangeable, a rolling deploy stops being an event, and horizontal scaling stops requiring a design review. If you operate MCP servers at any scale, this release is a straightforward gift.
Two smaller changes compound it
Header-based routing matters more than it reads. Putting the method and tool name in Mcp-Method and Mcp-Name means an API gateway can rate-limit per tool, a WAF can block a dangerous method, and a router can shard by name — all without body inspection, which is exactly the layer at which enterprises already own policy. Cacheable list results are the same idea one level up: tools/list is issued constantly and changes rarely, so a ttlMs turns a per-conversation round trip into a CDN hit.
Mid-call input, without holding a connection
Multi Round-Trip Requests are the mechanism that made the rest survivable. A tool that needs a confirmation or a missing parameter used to require the server to call back to the client mid-execution, which required the stream to stay open, which required the session. MRTR inverts the control flow: the server returns what it needs and stops, the client resolves it however it wants — asking a user, consulting a policy, filling a default — and re-sends the original call with the answers attached.
This is a better design for reasons beyond statelessness. The retry is idempotent, the pending question is a value you can persist rather than a callback you must keep alive, and an agent that goes away for ten minutes before answering costs the server nothing. It is also more work for client authors, who now own a state machine they previously got for free.
The deprecation list is the actual news
Sampling let a server ask the client to run a model completion on its behalf. Roots let a client tell a server which parts of its filesystem were in scope. Logging let a server stream structured log messages back. All three are now on a twelve-month clock, and all three depended on the connection being bidirectional and alive.
What those three had in common
They were the features that made an MCP client something other than an HTTP caller. Sampling in particular was the interesting one: a server that can request inference is a participant in the agent loop rather than a resource it reaches into. Losing it draws a hard line — the model stays entirely on the client's side, the server is a thing you call, and the interesting agent behaviour lives in exactly one place.
The honest reading
They also never got implemented widely. Sampling in particular was supported by a small minority of clients, which meant server authors could not rely on it, which meant fewer used it, which meant fewer clients bothered. Cutting features that the ecosystem declined to adopt is a healthier outcome than carrying them as a permanent asterisk — and a twelve-month window is a serious deprecation rather than a break. But it is worth naming what was decided rather than letting it read as housekeeping: the spec has given up on the client as a peer.
Tasks moving out is the same decision in a different register
Long-running work is now an extension — io.modelcontextprotocol/tasks, poll-based, with tasks/update — rather than a core concern. Polling is the right shape for a stateless protocol and the wrong shape for anything wanting push, which is consistent, and the extensions framework at least gives the pattern a defined home instead of leaving it experimental in the core.
The auth change nobody is writing about
Dynamic Client Registration is formally deprecated in favour of Client ID Metadata Documents, and for enterprise deployments this is the line item with the longest tail. DCR let a client register itself with an authorization server at runtime, which was convenient and which security teams disliked precisely because of that convenience. CIMD replaces runtime registration with a document at a URL the client controls, so the authorization server resolves the client's identity rather than accepting a self-assertion.
Alongside it: authorization servers must return the issuer per RFC 9207, clients must validate that issuer before redeeming a code, and credentials bind to the issuer that produced them. Together these close mix-up attacks, in which a client is fooled into redeeming a code at the wrong authorization server. If you have an MCP integration in front of a compliance review, this is the paragraph worth quoting — see MCP auth & OAuth 2.1 for the shape of the flow this hardens.
What breaks, and who pays
If you run a local stdio server, most of this is not addressed to you: no session bookkeeping to delete, no auth layer, no transport to migrate. If you operate an HTTP fleet, the stateless core is the reason this revision exists and the CIMD migration is the real work. If you wrote a client, you inherit both the new per-request identity plumbing and the loss of the peer features — and you are the one who has to tell users that a server capability they relied on is going away.
The genuine rewrite is narrower than the noise suggests: it is servers that used server-initiated requests, which now need the MRTR pattern. Everything else is deletion, a config change, or a twelve-month calendar entry.
What to do this quarter
Pin the revision explicitly rather than negotiating whatever the SDK defaults to, because two revisions will be live across your dependencies for the next year. Grep your servers for Sampling, Roots and Logging and price the replacements now while the window is long. Start the CIMD work before the DCR path stops being accepted, since it touches an authorization server you probably do not own. And if you have been deferring a horizontally-scaled MCP deployment because sessions made it awkward, that reason has expired.
FAQ
Does the 2026-07-28 revision break my existing MCP server?
Not immediately. The legacy HTTP+SSE transport and the deprecated features carry deprecation windows of a year or more. What breaks now is only code that depended on protocol-level sessions — the initialize exchange and the Mcp-Session-Id header are gone from the new revision.
Why remove sessions at all?
Because a session forces every server instance to share state, which means sticky routing, a shared store, or both. Stateless requests can be answered by any instance behind ordinary HTTP infrastructure — load balancers, gateways, CDNs — which is what makes MCP scale like the rest of the web.
What replaces Sampling?
Nothing, by design. Inference moves entirely to the client side; a server that wants a model completion is expected to call a model itself rather than borrow the client's. You have a twelve-month minimum window to migrate.
Is Dynamic Client Registration gone today?
It is formally deprecated in favour of Client ID Metadata Documents, not removed. Treat it as a migration to plan this year rather than an outage to fix this week — but start early, because it usually involves an authorization server owned by another team.
Which SDKs support it?
All four Tier 1 SDKs — TypeScript, Python, Go and C# — shipped support with the specification, and the Rust SDK supports it in beta.
Further reading
On this wiki:
- What Is the Model Context Protocol? — the one-page version if you are arriving cold.
- MCP Streamable HTTP, in depth — the transport this revision simplifies.
- MCP Auth & OAuth 2.1 — the flow the issuer-validation changes harden.
- MCP Sampling & Elicitation — what the deprecated peer features were for.
- MCP Ops in Production — running servers now that instances are interchangeable.