When to Choose Each Option
Clear guidance based on your specific situation and needs.
Our Recommendation
Four days after the deadline the picture has changed twice over. The specification is final: the 2026-07-28 tag went non-prerelease at 16:47 UTC on July 28, so the governance objection to cutting over is gone. PyPI followed the same day — pip install mcp now resolves to 2.0.0 (uploaded 13:45 UTC on July 28), not the 1.28.1 that was still current on deadline morning. What has not moved is the core TypeScript SDK: @modelcontextprotocol/sdk is still 1.30.0, published 2026-07-27T17:56 UTC, and counting. So the split is no longer TypeScript versus Python; it is server packages and Python versus the one core TypeScript package that almost every custom client imports. Choose v2 Stateless now if you build MCP servers in TypeScript (the scoped @modelcontextprotocol/server, /node and /hono packages are 2.0.0 stable) or in Python, and if you need horizontal scaling without sticky sessions, restart-safe routing and clean serverless execution. Stay on v1 Stateful where you depend on @modelcontextprotocol/sdk itself — client code and anything built on the core SDK has no 2.x to install — or where your clients and adapters are untested against a stateless server. Pin either way: four scoped npm packages and PyPI's mcp all now resolve latest to 2.0.0, so an unpinned install crosses a major version by itself. And nothing broke on July 28: the Roots, Sampling and Logging deprecations are annotation-only for at least a year, so migrate deliberately, package by package. September 2026 makes the asymmetry operational: with 2.2.0 plus the v1.30.0 backport landing the same day, redirect containment became table stakes on both lines — but issuer validation, token-resource checks and session controls are 2.x-only. The v1 line now demonstrably receives maintenance, not progression; if you were waiting for a reason to schedule the cutover, this is it. Snapshot 2026-09-23: with server and node both at 2.1.0, the 2.x line is the default on both package families — remaining 1.x pins now read as transitional debt rather than a stability anchor.
- Choose MCP v2 Stateless when...
- You ship MCP servers in TypeScript (@modelcontextprotocol/server 2.0.0) or in Python, where pip install mcp now resolves to 2.2.0
- You need horizontal scaling without sticky sessions, or serverless and ephemeral hosting for remote tools
- You can move session state into clients, databases or shared stores before cutover
- Your governance required a final specification tag before cutover — the 2026-07-28 tag is now final, not a release candidate
- Choose MCP v1 Stateful when...
- Your code imports @modelcontextprotocol/sdk directly: it is still 1.30.0 and has no 2.x release to install
- Your server logic still relies on long-lived sessions, or your clients and adapters are untested against a stateless server
- You run pinned v1 infrastructure where an in-place major upgrade is riskier than the scaling headroom you would gain
- Your rollout process requires client tooling and servers to sit on the same major version