{"slug": "mcp-sdk-betas-are-live-migrate-before-july-28", "title": "MCP SDK Betas Are Live: Migrate Before July 28", "summary": "MCP released beta SDKs for Python, TypeScript, Go, and C# on June 29, requiring migration before the July 28 deadline. The TypeScript SDK splits into separate client and server packages and drops CommonJS, while Python renames its FastMCP class to MCPServer. Infrastructure teams must remove sticky-session load balancing and server-side session state to comply with the new stateless protocol.", "body_md": "The MCP 2026-07-28 SDK betas landed June 29. You have 18 days. Four official SDKs updated simultaneously — Python, TypeScript, Go, and C# — and each has at least one change that will silently break production if you wait for the stable release to learn about it. This is not another post about what the stateless spec means conceptually. This is what changes in your actual code and your deployment infra before July 28.\n\n## TypeScript: The One That Fools Your CI\n\nThe TypeScript migration is the sneakiest of the four. MCP v2 does not ship as a new version of `@modelcontextprotocol/sdk`\n\n. It ships under two entirely new package names:\n\n```\nnpm install @modelcontextprotocol/server@beta\nnpm install @modelcontextprotocol/client@beta\n```\n\nThe old `@modelcontextprotocol/sdk`\n\npackage remains at v1, unchanged. Any tool watching that package name — Dependabot, Renovate, your internal scanner — will report you as current while you are a full major version behind. The upgrade plan of “bump the version number” does not work here.\n\nBeyond the package split, v2 is ESM-only and requires Node.js 20 or later. The `.tool()`\n\nmethod is renamed to `registerTool()`\n\n, though a codemod handles that automatically:\n\n```\nnpx @modelcontextprotocol/codemod@beta v1-to-v2 .\n```\n\nHTTP deployments get a backwards-compatible escape hatch: `createMcpHandler`\n\nserves the new 2026-07-28 protocol per request with an automatic 2025-11-25 fallback from the same endpoint, so clients on v1 keep connecting during the transition.\n\n## Python: One Import Line, One Clarification\n\nThe Python migration is straightforward, but there is a naming confusion worth clearing up before it burns you. The official MCP Python SDK renamed its bundled `FastMCP`\n\nclass to `MCPServer`\n\n. Install the beta with `uv add \"mcp[cli]==2.0.0b1\"`\n\nand update the import:\n\n```\n# OLD — raises ModuleNotFoundError after upgrade\nfrom mcp.server.fastmcp import FastMCP\n\n# NEW\nfrom mcp.server import MCPServer\n```\n\nThe decorator API — `@server.tool()`\n\n, `@server.resource()`\n\n— is unchanged. Your tool definitions do not need rewriting. The standalone FastMCP project maintained by PrefectHQ is not affected; this rename applies only to the class bundled inside `modelcontextprotocol/python-sdk`\n\n. V2 servers answer both the new `server/discover`\n\nmethod and the legacy `initialize`\n\nhandshake, so clients on the old spec keep connecting during the transition.\n\n## Infrastructure: Where Most Teams Will Actually Spend Time\n\nThe stateless architecture shift has a larger real-world blast radius than any API rename, and it lives in your infrastructure config more than your application code. Run this test before July 28: point a v1 client at a round-robin load balancer distributing across two MCP server instances. The client mints a session on instance A. Follow-up requests hitting instance B fail — that instance has no session context. That failure mode is exactly what the deadline enables for teams still running session-affinity infrastructure.\n\nFour concrete things need attention:\n\n- Remove sticky-session and session-affinity rules from your load balancer\n- Drop server-side per-session state storage\n- Fix client reconnection logic that assumes persistent SSE channels\n- Update any code matching the literal\n`-32002`\n\nerror code — missing resource now returns JSON-RPC standard`-32602`\n\nApplication state does not have to disappear. Servers that need cross-call continuity should mint an explicit handle from a tool and pass it back as a standard argument. That is now the application’s responsibility, not the protocol’s — which is the right separation of concerns.\n\n## Go and C#: The Gentler Paths\n\nGo teams get the easiest migration. Version v1.7.0-pre.1 uses the same module path (`go get github.com/modelcontextprotocol/go-sdk@v1.7.0-pre.1`\n\n), so the upgrade is a drop-in for most codebases. Stateless mode is opt-in via `StreamableHTTPOptions.Stateless = true`\n\n— servers that leave it unset continue negotiating the v1 protocol by default. C# is similarly gentle: stable v1 APIs are retained in 2.0.0-preview.1, deprecated capabilities are marked `[Obsolete]`\n\nbut remain functional, and the HTTP transport defaults to stateless mode — confirm that in your test suite.\n\n## Deprecated Features: Plan It, Not Now\n\nRoots, Sampling, and Logging enter deprecation on July 28. They are not removed — the minimum window is 12 months, putting actual removal no earlier than July 2027. The replacements are direct: tool parameters or resource URIs for Roots, direct LLM API calls for Sampling, stderr or [OpenTelemetry](https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-spans/) for Logging. Add it to your Q3 backlog and move on.\n\n## Your 18-Day Checklist\n\n- TypeScript: install\n`@modelcontextprotocol/server`\n\nand`@modelcontextprotocol/client`\n\nexplicitly — do not rely on a version bump to the old SDK - Python: swap\n`FastMCP`\n\nfor`MCPServer`\n\nin import paths; pin to`mcp==2.0.0b1`\n\nfor testing - Run the round-robin load-balancer test against your server before the stable release lands\n- Audit client code that matches\n`-32002`\n\nand update to`-32602`\n\n- Go: set\n`StreamableHTTPOptions.Stateless = true`\n\nto exercise the new protocol path in tests - Report issues to the\n[Python](https://github.com/modelcontextprotocol/python-sdk/releases)or[TypeScript](https://github.com/modelcontextprotocol/typescript-sdk/releases)SDK repositories before July 28, not after\n\nThe stable SDKs land July 27 — one day before the spec finalizes. The full [release candidate spec](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/) and [SDK beta announcement](https://blog.modelcontextprotocol.io/posts/sdk-betas-2026-07-28/) are the authoritative sources. Teams that have not tested by July 27 are chasing a moving target while the rest of the ecosystem moves on.", "url": "https://wpnews.pro/news/mcp-sdk-betas-are-live-migrate-before-july-28", "canonical_source": "https://byteiota.com/mcp-sdk-betas-are-live-migrate-before-july-28/", "published_at": "2026-07-10 09:15:16+00:00", "updated_at": "2026-07-10 09:43:33.571799+00:00", "lang": "en", "topics": ["developer-tools", "ai-infrastructure"], "entities": ["MCP", "Python", "TypeScript", "Go", "C#", "PrefectHQ", "Node.js"], "alternates": {"html": "https://wpnews.pro/news/mcp-sdk-betas-are-live-migrate-before-july-28", "markdown": "https://wpnews.pro/news/mcp-sdk-betas-are-live-migrate-before-july-28.md", "text": "https://wpnews.pro/news/mcp-sdk-betas-are-live-migrate-before-july-28.txt", "jsonld": "https://wpnews.pro/news/mcp-sdk-betas-are-live-migrate-before-july-28.jsonld"}}