The stateless 2026-07-28 spec is three days out, and this week the tooling caught up: the official Model Context Protocol SDKs published betas across all four Tier-1 languages. If you've been waiting to see the migration in real code before touching your server, the wait is over — you can install it today.
Here's the fast version, because that's the whole point of a beta drop.
What to install#
Four SDKs, four betas, per the SDK betas announcement:
# Python
pip install "mcp[cli]==2.0.0b1"
# TypeScript — now split into server + client packages
npm install @modelcontextprotocol/server@beta @modelcontextprotocol/client@beta
Go is v1.7.0-pre.1 on the same module path, and C# is 2.0.0-preview.1 of the ModelContextProtocol packages. The betas target the final spec that ships July 28; pin them and verify exact import paths against the docs, because the surface is still settling.
The codemod does the boring parts#
The TypeScript SDK ships a codemod for the v1→v2 split:
npx @modelcontextprotocol/codemod@beta v1-to-v2 .
That rewrites the mechanical stuff — the package split, renamed APIs. What it deliberately doesn't do is the judgment work, because it can't: converting your session-scoped state into explicit state handles and moving long-running tools onto the Tasks extension are decisions about your code, not find-and-replace. Run the codemod first, then do those by hand. That division — automate the boilerplate, hand-write the design — is the honest shape of this migration.
The one detail that makes this safe: dual-support#
The reason you can adopt the beta today without a war-room cutover is that a v2 server speaks both protocols at once. It answers the old initialize handshake and the new server/discover flow from the same HTTP endpoint. So:
- Your existing 2025-11-25 clients keep working, unchanged.
- New stateless clients get the new flow.
- New clients talking to old servers fall back automatically.
There's no flag day. And there's a runway on the old versions: per the betas post, TypeScript v1.x keeps getting bug and security fixes for at least six months, and Python v1.x gets critical fixes. The deprecation policy guarantees a minimum twelve-month overlap on anything removed, so nothing forces a same-day rewrite.
Turning on stateless#
Going stateless is a per-language switch rather than a rewrite:
- Python — v2 servers answer both protocol revisions from one endpoint automatically.
- TypeScript — serve HTTP through
createMcpHandlerfrom@modelcontextprotocol/server. - Go — set
StreamableHTTPOptions.Stateless = true; omit it and the server negotiates the old 2025-11-25 revision.
The reward is the same in every language: no Mcp-Session-Id, no sticky routing, no shared session store. Your server sits behind a plain round-robin load balancer, and any request lands on any node.
What this means for you#
The spec locked as a release candidate on May 21, which gave SDK maintainers roughly a ten-week validation window before the July 28 final. That window is now nearly closed, and the betas landing across all four languages at once is the signal that the ecosystem is ready — not just the spec.
If you run an MCP server, the move this week is small and reversible: install the beta, run the codemod, flip the stateless switch in a staging deploy, and confirm your old clients still connect. You don't have to finish the full migration — state handles and Tasks can follow — but there's no longer any reason to wait to start. The tooling is in your package manager today, and the thing it unlocks, a stateless tool surface that scales with a dumb load balancer, is exactly what the agent stack has been asking MCP to become.



