The Model Context Protocol shipped its largest revision since launch on July 28, 2026. MCP 2026-07-28 removes the stateful session layer, replaces elicitation with request/response exchange, and adds HTTP headers so load balancers can route MCP traffic without parsing JSON. The protocol now logs 400M monthly SDK downloads—4x growth in one year—driven by ecosystem pressure to run servers on standard HTTP infrastructure.
| Aspect | Previous MCP | MCP 2026-07-28 |
|---|---|---|
| Session model | Stateful — initialize/initialized handshake + Mcp-Session-Id header | Stateless — protocol version, client identity, and capabilities inline per request |
| Elicitation / mid-request input | Server holds stream open until user responds | Multi Round-Trip Requests (MRTR): server returns input_required, client retries with input attached |
| Load balancing | Sticky sessions required; body inspection to route | Standard HTTP routing via Mcp-Method and Mcp-Name headers; HeaderMismatch on mismatch |
| Caching | No protocol-level support | ttlMs and cacheScope fields on list and resource responses |
| Distributed tracing | Custom instrumentation required | W3C Trace Context in fixed _meta keys; OpenTelemetry-compatible out of the box |
| Tasks extension | Experimental; tasks/list exposed | Official; tasks/list removed (unsafe without sessions); tools/call returns task handle |
| Authorization | Unspecified | OAuth 2.0 + OIDC alignment; iss validation per RFC 9207 (mix-up attack mitigation) |
The core change: removal of the initialize/initialized handshake and Mcp-Session-Id header. Six Specification Enhancement Proposals converged on a single design: each request carries protocol version, client identity, and capabilities inline. Any server instance can handle any request. Sticky sessions, session stores, and stream-hold logic are gone at the protocol layer. Cloudflare's Agents SDK shipped support immediately; the new primitive is createMcpHandler running in a plain Worker. Amazon Bedrock AgentCore Gateway (enabled via a single UpdateGateway API call), the .NET C# SDK v2.0, and updated TypeScript, Python, and Go SDKs shipped alongside the spec.
Three infrastructure upgrades follow statelessness. Routability: new Mcp-Method and Mcp-Name headers let load balancers route traffic without body inspection; header/body mismatch returns HeaderMismatch error. Cacheability: list and resource responses carry ttlMs and cacheScope fields modeled on HTTP Cache-Control. Traceability: W3C Trace Context propagates through fixed key names in _meta, enabling OpenTelemetry-compatible distributed tracing across SDKs and gateways without custom instrumentation.
| Capability | Mechanism | What Changes |
|---|---|---|
| Routability | Mcp-Method and Mcp-Name HTTP headers | Load balancers route MCP traffic without body inspection; header/body mismatch returns HeaderMismatch error |
| Cacheability | ttlMs and cacheScope fields on list/resource responses | Responses declare their own cache lifetime, modeled on HTTP Cache-Control |
| Traceability | W3C Trace Context in fixed _meta key names | OpenTelemetry-compatible distributed tracing across SDKs and gateways without custom instrumentation |
Elicitation poses the harder migration. When an MCP server needs input mid-request—approval before a deploy, billing confirmation, design choice—the old protocol held open a stream. The new spec introduces Multi Round-Trip Requests (MRTR): the server returns input_required with what it needs, the client collects the answer, and the operation retries with that input attached. No session is preserved between rounds. Teams using server-initiated elicitation cannot upgrade with an SDK bump; the interaction model requires code rewrite.
The Tasks extension moved from experimental to official. Lifecycle is stateless by design: tools/call returns a task handle, and clients drive progress via tasks/get, tasks/update, and tasks/cancel. The tasks/list method is removed—without sessions, enumerating active tasks is unsafe to expose. MCP Apps, a second new extension, adds server-rendered UIs as sandboxed iframes; tools declare UI templates up front so clients can prefetch and security-review before rendering.
Authorization hardening rounds out the release. Six SEPs align MCP auth with OAuth 2.0 and OpenID Connect. Clients must now validate the iss parameter on responses per RFC 9207, closing a class of mix-up attacks. Roots, Sampling, Logging, and SSE transport enter a 12-month deprecation clock starting July 28—earliest removal July 28, 2027.
| Feature | Deprecation Start | Earliest Removal |
|---|---|---|
| Roots | July 28, 2026 | July 28, 2027 |
| Sampling | July 28, 2026 | July 28, 2027 |
| Logging | July 28, 2026 | July 28, 2027 |
| SSE Transport | July 28, 2026 | July 28, 2027 |
| Feature | Deprecation Start | Earliest Removal |
|---|---|---|
| Roots | July 28, 2026 | July 28, 2027 |
| Sampling | July 28, 2026 | July 28, 2027 |
| Logging | July 28, 2026 | July 28, 2027 |
| SSE transport | July 28, 2026 | July 28, 2027 |
Migration risk lies not in the stateless default but in hidden session state in application logic. Teams that threaded implicit connection state through transport metadata must make it explicit—a basket_id or browser_id returned by a tool and passed back as an ordinary argument on later calls. Teams running remote MCP servers behind load balancers get immediate horizontal scaling without infrastructure changes. Teams with streaming elicitation flows face real code migration—the 10-week window between May 21 release candidate and July 28 final spec was the window to find those dependencies before production breaks.