{"slug": "mcp-2026-07-28-goes-stateless-what-breaks-and-how-to-migrate", "title": "MCP 2026-07-28 Goes Stateless: What Breaks and How to Migrate", "summary": "The MCP 2026-07-28 specification removes the stateful handshake, session IDs, and server instance affinity, making every request self-contained and enabling stateless deployments. The update, the biggest since MCP launched in 2024, requires existing servers to remove initialization gates, rewrite session-keyed state, drop sticky session config, and migrate from SSE to Streamable HTTP. The Python SDK v2 is described as a 'major rework', with TypeScript, Go, and C# also releasing v2 migration guides, while AWS AgentCore Gateway and Microsoft App Service support the new spec.", "body_md": "MCP just killed its session model. The **2026-07-28 specification** — the biggest protocol revision since MCP launched in 2024 — removes the stateful handshake, drops session IDs, and makes every request self-contained. If you have an MCP server in production, some of your code will break. Here is exactly what changed, what stops working, and how to migrate.\n\n## The Handshake Is Dead\n\nThe old model required an `initialize/notifications/initialized`\n\nexchange before any real work could happen. That handshake established a session, and the `Mcp-Session-Id`\n\nheader bound all subsequent requests to the same server instance. It was a reasonable design for a protocol still living on localhost. It was a terrible design for anything running at scale.\n\nThe [official 2026-07-28 changelog](https://modelcontextprotocol.io/specification/2026-07-28/changelog) removes all of it. Every request now carries protocol version, client info, and capabilities in a `_meta`\n\nfield inline. No handshake, no session header, no server instance affinity. There is an optional `server/discover`\n\ncall for capability negotiation upfront — but it is optional, not a prerequisite.\n\nServers that stored cross-call state keyed to a session ID need to rethink their approach. The new spec (SEP-2567) is explicit: servers mint opaque handles and pass them as ordinary tool arguments. State becomes opt-in and visible, not implicit and hidden in a session layer.\n\n## Server-to-Client Requests, Redesigned\n\nSampling, elicitation, and roots discovery used to require an open bidirectional stream — the main reason MCP servers had to maintain persistent connections. The 2026-07-28 spec replaces this with **Multi Round-Trip Requests (MRTR)**.\n\nWhen a tool call needs something from the client mid-execution — an LLM completion, user input, a roots list — the server returns an `InputRequiredResult`\n\ninstead of completing. This result carries `inputRequests`\n\n(what the server needs) and an opaque `requestState`\n\nthe client must echo back. The client re-issues the original call with `inputResponses`\n\nand the echoed state. Any server instance can resume. No session affinity needed.\n\nThe features developers most relied on persistent connections for — sampling, elicitation — now work over plain stateless HTTP. The operational workarounds required to deploy these in production are gone.\n\n## What Actually Breaks in Your Server\n\nHere is the concrete list of what needs to change in an existing MCP server:\n\n**Initialization gates**— Logic that waits for the handshake to complete before processing requests. Remove it: the handshake does not exist.** Session-keyed state**— Any cross-call state keyed to`Mcp-Session-Id`\n\n. Rewrite to use server-minted handles passed as tool arguments.**Sticky session configuration**— Load balancer rules pinning sessions to specific instances. No longer needed.** SSE transport dependencies**— HTTP+SSE is now formally deprecated. Migrate to Streamable HTTP.\n\nThe [Python SDK v2 migration guide](https://github.com/modelcontextprotocol/python-sdk) is the most involved — maintainers describe it as a “major rework.” TypeScript, Go, and C# also have v2 releases with dedicated migration documentation. All four ship 2026-07-28 support as of release day.\n\n## What You Gain\n\nRunning a remote MCP server before 2026-07-28 meant sticky session affinity at the load balancer (which kills autoscaling), a shared session store for horizontal scale, and often deep packet inspection at the gateway to route on session IDs. The operational overhead was real and expensive.\n\nAfter the update: a plain round-robin load balancer is sufficient. `Mcp-Method`\n\nand `Mcp-Name`\n\nHTTP headers let gateways route and authorize without touching the request body. Serverless deployments on Lambda, Cloudflare Workers, or Vercel Edge work without modification. [AWS AgentCore Gateway](https://aws.amazon.com/blogs/machine-learning/how-agentcore-gateway-supports-the-mcp-2026-07-28-spec/), Microsoft App Service, and Google Cloud all confirmed 2026-07-28 support on release day.\n\nTool catalog caching (SEP-2549) is a quieter improvement with real cost impact. `tools/list`\n\nand `prompts/list`\n\nresponses now carry `ttlMs`\n\nand `cacheScope`\n\nfields. Clients cache the tool catalog across reconnects, which keeps upstream LLM prompt caches stable and cuts inference costs on reconnect-heavy workloads.\n\n## The Grace Period\n\nA v2 server answers the legacy `initialize`\n\nhandshake alongside `server/discover`\n\n, so existing clients on the 2025-11-25 spec keep connecting without changes. You can upgrade servers first and migrate clients separately.\n\nRoots, Sampling, and Logging are deprecated, not removed. The HTTP+SSE transport is deprecated. The deprecation policy guarantees a minimum 12-month window — nothing disappears before July 2027. That is a reasonable runway given the size of the change.\n\nPer the [official MCP announcement](https://blog.modelcontextprotocol.io/posts/2026-07-28/), 97 million monthly SDK downloads are in scope for this migration. The stakes of a botched rollout are real. The backward compatibility bridge and the 12-month window exist for exactly this reason. Start migrating now, while the runway is long.", "url": "https://wpnews.pro/news/mcp-2026-07-28-goes-stateless-what-breaks-and-how-to-migrate", "canonical_source": "https://byteiota.com/mcp-2026-07-28-goes-stateless-what-breaks-and-how-to-migrate/", "published_at": "2026-08-09 12:21:01+00:00", "updated_at": "2026-08-09 14:06:32.539454+00:00", "lang": "en", "topics": ["developer-tools", "ai-infrastructure", "ai-policy"], "entities": ["MCP", "Python SDK", "TypeScript", "Go", "C#", "AWS AgentCore Gateway", "Microsoft App Service"], "alternates": {"html": "https://wpnews.pro/news/mcp-2026-07-28-goes-stateless-what-breaks-and-how-to-migrate", "markdown": "https://wpnews.pro/news/mcp-2026-07-28-goes-stateless-what-breaks-and-how-to-migrate.md", "text": "https://wpnews.pro/news/mcp-2026-07-28-goes-stateless-what-breaks-and-how-to-migrate.txt", "jsonld": "https://wpnews.pro/news/mcp-2026-07-28-goes-stateless-what-breaks-and-how-to-migrate.jsonld"}}