The MCP Stateless Spec Has Real Migration Work Behind It

The MCP 2026-07-28 spec is the protocol's largest revision: no handshake, no session ID, and three deprecated features. Here is what actually breaks and what you gain.

Cover art for The MCP Stateless Spec Has Real Migration Work Behind It

Three features that exist in every MCP server built before July 2026 - Roots, Sampling, and Logging - entered a formal deprecation window on July 28, and the spec that killed them also deleted the initialize handshake that every client and server has exchanged since MCP launched. The 2026-07-28 specification removes the initialize handshake, kills the session ID, and deprecates Roots, Sampling, and Logging in a single update. If you shipped an MCP server in the past 18 months, there is concrete migration work ahead - though the 12-month deprecation window gives you until at least July 2027 to complete it.

The spec arc actually spans two releases. The July 28 version is the structural one. Then on September 28, 2026, the Agentic AI Foundation shipped the biggest release in MCP's history: finalized stateless architecture, hardened OAuth authorization, a formal 12-month deprecation policy, and MCP Apps and MCP Tasks as official extensions. Most coverage conflates them. They are not the same release.

What the stateless core actually changes at the wire

The simplest way to say it: MCP is no longer a stateful, bidirectional session protocol. It is now a stateless request/response protocol, the same shape as every HTTP API you already run.

Concretely, the spec removes the initialize handshake, the Mcp-Session-Id header, with protocol version and client info moving into a _meta field on every request. The routing consequence is significant: that one change lets MCP servers deploy like any stateless service - serverless and Kubernetes autoscaling finally work without sticky sessions.

Here is the before/after at a glance:

Dimension 2025-11-25 (stateful) 2026-07-28 (stateless)
Connection setup initialize / initialized handshake None - metadata in _meta per request
Instance binding Mcp-Session-Id pins one instance Any request, any instance
Routing headers Optional Mcp-Method + Mcp-Name required
Long-running work Held connection / experimental Tasks Tasks extension, formal lifecycle
Horizontal scaling Sticky sessions + shared store Plain autoscaling, no affinity
Serverless fit Poor (persistent connection) Native (per-request invocation)

Streamable HTTP gains mandatory Mcp-Method and Mcp-Name headers, so routing happens without body inspection. SSE streaming is replaced by Multi Round-Trip Requests. For servers that currently hold SSE connections open while a tool does work, the new model is different: instead of holding connections open with Server-Sent Events for multi-turn operations, servers now return an InputRequiredResult with a requestState payload; the client re-issues the call with inputResponses and the echoed state, allowing stateless retry handling.

The three breaking changes teams are most likely to miss

Three features are deprecated: Roots, Sampling, and Logging, each with a 12-month removal window. They still work today, but the migration paths are concrete:

  • Roots → move to tool parameters or resource URIs
  • Sampling → call the LLM API directly from your server
  • Logging → emit to stderr or OpenTelemetry instead

The cost is a migration that touches your transport, your gateway config, your auth client, and any agent design that relied on the server calling back into the model.

There is also a small error code change that will silently bite integrations: missing resource is now -32602, not -32002. Easy to miss in a code review, annoying to debug in production.

10,000+public MCP serversin the registry as of 2026
247AAIF member organizationsas of August 13, 2026
12 monthsdeprecation windowminimum before Roots/Sampling/Logging removed

MCP Tasks and MCP Apps: what the extension framework actually buys you

The new approach formalizes how additional capabilities can be handled as optional, versioned extensions. If you want MCP to do something extra, it no longer has to become part of the core specification. That is the structural insight most write-ups skip: the extensions framework is not just about Tasks and Apps - it is the mechanism by which the protocol can grow without the core spec becoming a kitchen sink.

MCP Tasks tackles the reality that not every tool call finishes in one round trip. Instead of holding fragile, long-lived connections open while a batch job or heavy computation grinds away, servers now return a durable task handle; clients can disconnect, crash, restart, and resume polling. Video conversion, audio transcription, multi-step agent workflows - anything that runs for more than a few seconds - now has a standard protocol path instead of a bespoke implementation.

MCP Apps is an official extension built on mcp-ui. While the base MCP specification is restricted to text and structured data, MCP Apps standardizes the delivery of interactive user interfaces - such as dashboards, forms, and data visualizations - from MCP servers to host applications.

Clients and servers explicitly declare which extensions they support. This allows a tools-only implementation to remain simple, while another implementation can opt into advanced functionality - such as Tasks or MCP Apps - only when needed.

Beagle in action#platform-eng, 10:02am
The ask
'does our MCP server need to be updated for the new spec?'
Beagle drafts
pulls the 2026-07-28 changelog and the team's server repo, drafts a gap summary: no session handling found, Roots used in two tools, Sampling referenced in the LLM proxy - flags the deprecation dates
You approve
you approve the reply; the three affected files are linked with the relevant SEP numbers, not just a vague 'yes, migrate it'
Do this in your workspace →

Auth hardening: the part that matters for anything behind a paywall

The previous MCP spec's approach to auth was, charitably, "bring your own token." The 2026-07-28 spec aligns MCP authorization with OAuth 2.1 and OpenID Connect in ways that make it meaningfully enterprise-ready.

Auth hardening includes mandatory validation of the OAuth iss parameter - which closes an entire class of mix-up attacks. Per Den Delimarsky explicitly: no known exploitation - "preventive engineering, not incident response."

For teams running paid tools behind MCP, scope-based tool loading enforces least privilege and reduces token usage. The server exposes tools to the AI client based strictly on OAuth scopes and authenticated user privileges. That is not a new concept, but it is now formally specified rather than left to each implementer.

The governance picture matters here too. The AAIF went from roughly 40 members in December 2025 to 240 - and Anthropic's contribution share fell below half. When a single vendor's share of contributions drops below 50 percent of a spec they originally wrote, that is a real governance shift, not just a press announcement.

MCP stateless spec: common questions

What is the MCP 2026-07-28 spec change?

The 2026-07-28 spec - now the current official version, released July 28, 2026 and superseding 2025-11-25 - makes MCP fully stateless. It is the biggest structural change MCP has made since it launched, and if you run a server, it will break things.

Do existing MCP servers break immediately?

No. Existing servers keep working during a 12-month window, but transport, auth, and deprecated features all need attention. New SDK clients will not send the initialize message, so servers that require it as the first message will fail against updated clients before the window closes.

What is the MCP Tasks extension?

The Tasks extension in the MCP 2026-07-28 specification provides a clean, standard way to handle long-running tasks at the protocol level. A server returns a durable task handle rather than holding a connection open; clients can disconnect and resume polling later.

What are MCP Apps?

MCP Apps allows servers to ship rich, interactive, server-rendered user interfaces directly into AI clients - moving agent output beyond walls of text toward dashboards, forms, and visualizations. It is an optional extension, not core spec, so clients that do not support it see normal text responses.

Is there a formal deprecation policy now?

Yes. The spec added a formal deprecation lifecycle: Active → Deprecated → Removed, with a minimum 12-month window before anything disappears. Roots, Sampling, and Logging are the first three features to enter the Deprecated state under that policy.

Or just watch me work

Point me at your website.

I will read up on your business and come back with what I would run for you. No account, no card, about a minute.

I only read what is public. Nothing is saved to your name until you say so.

Keep reading

Beagle does this work for you, in your Slack.1,000 free credits. No card.Hire Beagle