[{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/361117325","assets_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/361117325/assets","upload_url":"https://uploads.github.com/repos/modelcontextprotocol/python-sdk/releases/361117325/assets{?name,label}","html_url":"https://github.com/modelcontextprotocol/python-sdk/releases/tag/v2.0.0","id":361117325,"author":{"login":"maxisbey","id":224885523,"node_id":"U_kgDODWd7Ew","avatar_url":"https://avatars.githubusercontent.com/u/224885523?v=4","gravatar_id":"","url":"https://api.github.com/users/maxisbey","html_url":"https://github.com/maxisbey","followers_url":"https://api.github.com/users/maxisbey/followers","following_url":"https://api.github.com/users/maxisbey/following{/other_user}","gists_url":"https://api.github.com/users/maxisbey/gists{/gist_id}","starred_url":"https://api.github.com/users/maxisbey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxisbey/subscriptions","organizations_url":"https://api.github.com/users/maxisbey/orgs","repos_url":"https://api.github.com/users/maxisbey/repos","events_url":"https://api.github.com/users/maxisbey/events{/privacy}","received_events_url":"https://api.github.com/users/maxisbey/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOM2n80s4VhjaN","tag_name":"v2.0.0","target_commitish":"main","name":"v2.0.0","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-07-28T13:31:36Z","updated_at":"2026-07-28T13:42:35Z","published_at":"2026-07-28T13:41:36Z","assets":[],"tarball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/tarball/v2.0.0","zipball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/zipball/v2.0.0","body":"# MCP Python SDK v2 Stable Release\r\n\r\nThis is v2.0.0, the stable v2 release of the MCP Python SDK. It supports the 2026-07-28 revision of the Model Context Protocol and serves every earlier revision from the same server. `pip install mcp` now installs 2.x.\r\n\r\n```bash\r\npip install \"mcp[cli]\"\r\n# or\r\nuv add \"mcp[cli]\"\r\n```\r\n\r\n### Documentation Rewrite\r\n\r\nThe [documentation](https://py.sdk.modelcontextprotocol.io/) has the full tutorial and API reference. Coming from v1? [What's new in v2](https://py.sdk.modelcontextprotocol.io/whats-new/) is the tour of what changed and why, and the [migration guide](https://py.sdk.modelcontextprotocol.io/migration/) lists every breaking change with before-and-after code.\r\n\r\n### V1 Maintenance mode\r\n\r\n**v1.x is in maintenance mode and will only receive security fixes from now on** The 1.x line lives on the [`v1.x` branch](https://github.com/modelcontextprotocol/python-sdk/tree/v1.x), continues to receive critical bug fixes and security patches, and is documented at https://py.sdk.modelcontextprotocol.io/v1/. If your project is not ready to migrate, keep a `<2` upper bound on your requirement (for example `mcp>=1.28,<2`).\r\n\r\n## Highlights\r\n\r\n### One SDK, both protocol eras\r\n\r\nv2 speaks the 2026-07-28 revision (stateless requests with no handshake, `server/discover`, `subscriptions/listen`, multi-round-trip requests) and still serves every 2025-era client from the same `MCPServer`, over Streamable HTTP and stdio, with nothing to configure. `Client(target)` negotiates the version automatically.\r\n\r\n### `FastMCP` is now `MCPServer`, and there is a first-class `Client`\r\n\r\nThe decorator API is unchanged; the low-level `Server` is rebuilt around a shared dispatcher engine, and one `Client` object replaces v1's transport-plus-`ClientSession`-plus-`initialize()` layering. It connects to a URL, a stdio subprocess, a custom transport, or straight to a server object in memory for tests.\r\n\r\n### Multi-round-trip requests and resolver dependency injection\r\n\r\nAt 2026-07-28 the server can no longer call the client, so tools return the question instead. A `Resolve(fn)` parameter is filled by your function invisibly to the model and can put a question to the user; one tool body serves both eras.\r\n\r\n### Extension APIs, OpenTelemetry, and a standalone types package\r\n\r\nServers and clients compose protocol extensions through pluggable extension APIs (MCP Apps built in); OpenTelemetry tracing ships on by default; every protocol type is its own package, `mcp-types` (imported as `mcp_types`), published in lock-step with `mcp`.\r\n\r\n### Hardened stdio and auth\r\n\r\nstdio servers keep handler subprocesses and stray prints off the wire, and stdout is diverted to stderr while serving. OAuth adds RFC 9207 issuer validation, the SEP-990 identity-assertion flow, and the client-credentials extension.\r\n\r\n## Coming from a v2 pre-release\r\n\r\nSince the last release candidate: the per-version wire packages are private (`mcp_types._v*`), `mcp.types` is a permanent alias for `mcp_types`, the auth registration request model is split from the registered-client record, cancelled requests are no longer answered, and log notifications are gated on the per-request log-level opt-in at 2026-07-28. Since the betas: `Client(cache=False)` is now `cache=None` with `CacheConfig()` the default; `Context.client_id`, `RFC7523OAuthClientProvider`, and `OAuthClientProvider(timeout=)` are removed; the client-credentials providers take `scope=`; `message_handler` receives notifications and exceptions only; `FileResource(is_binary=)` becomes `encoding`; `MCP_*` env vars are gone with `pydantic-settings`; Streamable HTTP servers reject bodies over 4 MiB with HTTP 413. The migration guide covers all of it.\r\n\r\n## Known gaps\r\n\r\nThe tasks extension (SEP-2663) is not part of this release. On the client, the DPoP proof binding (SEP-1932) and the workload-identity `jwt-bearer` grant are not implemented; both are additive and can land in 2.x.\r\n\r\n## Feedback\r\n\r\nSomething rough, confusing, or broken? [Open an issue](https://github.com/modelcontextprotocol/python-sdk/issues/new/choose) or find us in [#python-sdk-dev on the MCP Contributors Discord](https://discord.gg/6CSzBmMkjX).\r\n\r\n**Full Changelog**: https://github.com/modelcontextprotocol/python-sdk/compare/v2.0.0rc1...v2.0.0","reactions":{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/361117325/reactions","total_count":6,"+1":0,"-1":0,"laugh":0,"hooray":5,"confused":0,"heart":0,"rocket":0,"eyes":1}},{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/361114323","assets_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/361114323/assets","upload_url":"https://uploads.github.com/repos/modelcontextprotocol/python-sdk/releases/361114323/assets{?name,label}","html_url":"https://github.com/modelcontextprotocol/python-sdk/releases/tag/v1.29.0","id":361114323,"author":{"login":"maxisbey","id":224885523,"node_id":"U_kgDODWd7Ew","avatar_url":"https://avatars.githubusercontent.com/u/224885523?v=4","gravatar_id":"","url":"https://api.github.com/users/maxisbey","html_url":"https://github.com/maxisbey","followers_url":"https://api.github.com/users/maxisbey/followers","following_url":"https://api.github.com/users/maxisbey/following{/other_user}","gists_url":"https://api.github.com/users/maxisbey/gists{/gist_id}","starred_url":"https://api.github.com/users/maxisbey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxisbey/subscriptions","organizations_url":"https://api.github.com/users/maxisbey/orgs","repos_url":"https://api.github.com/users/maxisbey/repos","events_url":"https://api.github.com/users/maxisbey/events{/privacy}","received_events_url":"https://api.github.com/users/maxisbey/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOM2n80s4VhirT","tag_name":"v1.29.0","target_commitish":"v1.x","name":"v1.29.0","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-07-28T12:57:32Z","updated_at":"2026-07-28T13:37:06Z","published_at":"2026-07-28T13:37:06Z","assets":[],"tarball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/tarball/v1.29.0","zipball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/zipball/v1.29.0","body":"## What's Changed\r\n* [v1.x] Route Context.report_progress() to the originating request stream by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2994\r\n* [v1.x] docs: publish llms.txt and markdown renditions of the docs by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3029\r\n* [v1.x] docs: pin mkdocs<2 by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3074\r\n* [v1.x] Add Streamable HTTP request body limits by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/3101\r\n* [v1.x] fix: reject trailing newline in tool-name validation by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3086\r\n* [v1.x] ci: pick the docs toolchain per worktree in build-docs.sh by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3082\r\n* [v1.x] Move the v1.x docs to /v1/ and mark v1.x as the maintenance line by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3177\r\n\r\n\r\n**Full Changelog**: https://github.com/modelcontextprotocol/python-sdk/compare/v1.28.1...v1.29.0","mentions_count":2},{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/360447778","assets_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/360447778/assets","upload_url":"https://uploads.github.com/repos/modelcontextprotocol/python-sdk/releases/360447778/assets{?name,label}","html_url":"https://github.com/modelcontextprotocol/python-sdk/releases/tag/v2.0.0rc1","id":360447778,"author":{"login":"maxisbey","id":224885523,"node_id":"U_kgDODWd7Ew","avatar_url":"https://avatars.githubusercontent.com/u/224885523?v=4","gravatar_id":"","url":"https://api.github.com/users/maxisbey","html_url":"https://github.com/maxisbey","followers_url":"https://api.github.com/users/maxisbey/followers","following_url":"https://api.github.com/users/maxisbey/following{/other_user}","gists_url":"https://api.github.com/users/maxisbey/gists{/gist_id}","starred_url":"https://api.github.com/users/maxisbey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxisbey/subscriptions","organizations_url":"https://api.github.com/users/maxisbey/orgs","repos_url":"https://api.github.com/users/maxisbey/repos","events_url":"https://api.github.com/users/maxisbey/events{/privacy}","received_events_url":"https://api.github.com/users/maxisbey/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOM2n80s4Ve_8i","tag_name":"v2.0.0rc1","target_commitish":"main","name":"v2.0.0rc1","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-07-27T13:23:57Z","updated_at":"2026-07-27T23:53:00Z","published_at":"2026-07-27T13:29:47Z","assets":[],"tarball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/tarball/v2.0.0rc1","zipball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/zipball/v2.0.0rc1","body":"First v2 release candidate. Pre-releases are opt-in only; `pip install mcp` still resolves to the stable 1.x line.\r\n\r\n```bash\r\npip install mcp==2.0.0rc1\r\n# or\r\nuv add \"mcp==2.0.0rc1\"\r\n```\r\n\r\nThe [documentation](https://py.sdk.modelcontextprotocol.io/v2/) has the full tutorial and API reference, and the [migration guide](https://py.sdk.modelcontextprotocol.io/v2/migration/) covers coming from v1. Stable v2 is planned for 2026-07-28 alongside the spec release - keep pinning an exact version until then.\r\n\r\n## Highlights\r\n\r\n### API cleanup ahead of stable (breaking for beta users)\r\n\r\nThe last pre-release pass over the public surface; every item has a migration guide entry.\r\n\r\n- `Client(cache=False)` is now `Client(cache=None)`: `CacheConfig()` is the default and `None` switches the response cache off (#3164).\r\n- `Context.client_id` is removed - read `_meta` via `ctx.request_context.meta`, or the authenticated client via `get_access_token().client_id` (#3167).\r\n- `RFC7523OAuthClientProvider` and `JWTParameters` are removed - use `ClientCredentialsOAuthProvider`, `PrivateKeyJWTOAuthProvider`, or `IdentityAssertionOAuthProvider` (#3169).\r\n- The client-credentials providers take `scope=`, not `scopes=` (#3166).\r\n- `OAuthClientProvider(timeout=...)` is removed; it never bounded anything (#3165).\r\n- `message_handler` receives `ServerNotification | Exception` only; the dead `RequestResponder` arm and the `mcp.shared.session` module are gone (#3168).\r\n- `FileResource(is_binary=...)` is replaced by `encoding: str | None` (#3171).\r\n- `MCP_*` environment variables never configured `MCPServer` and are no longer advertised; `pydantic-settings` is dropped from the runtime dependencies (#3170).\r\n- Streamable HTTP servers reject request bodies over 4 MiB with HTTP 413; raise `max_request_body_size` if you accept larger messages (#3095).\r\n\r\n### Aligned with the final 2026-07-28 identity shape (#3143)\r\n\r\nThe request-side `clientInfo` `_meta` key is optional (the required pair is `protocolVersion` + `clientCapabilities`), and `serverInfo` moved out of the `server/discover` result body into every 2026-era result's `_meta`; `client.server_info` is now `Implementation | None`. This tracks spec change [#3002](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/3002) and fixes interop with servers that already omit body `serverInfo`.\r\n\r\n### The full 2026-07-28 revision over stdio (#3152)\r\n\r\nA stdio (or in-memory) server now decides the protocol era from the client's opening request, so `subscriptions/listen` and every other 2026-07-28 feature serve over stdio, not only Streamable HTTP.\r\n\r\n### stdio servers keep handlers off the wire (#3117)\r\n\r\n`stdio_server()` serves from private duplicates of stdin/stdout and points fd 0 at the null device and fd 1 at stderr while it runs, so a stray `print()` or a chatty child process can no longer corrupt the JSON-RPC stream. This fixes the classic print-corrupts-the-wire class ([#409](https://github.com/modelcontextprotocol/python-sdk/issues/409)) and the Windows tool-call hang ([#671](https://github.com/modelcontextprotocol/python-sdk/issues/671)).\r\n\r\n## Notes\r\n\r\n- Tool results validated against an output schema are much faster: the JSON Schema validator is compiled once and cached (#3134).\r\n- The tasks extension (SEP-2663) is not in this release, and will not be in v2.0.0.\r\n- If you install under uv's `exclude-newer` cooldown: `mcp` pins `mcp-types` to the exact same version, so exempt both packages - `exclude-newer-package = { mcp = false, mcp-types = false }`.\r\n\r\n\r\n## What's Changed\r\n* Add Streamable HTTP request body limits by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/3095\r\n* docs: document Windows stdio subprocess stdin handling by @AndreKalberer in https://github.com/modelcontextprotocol/python-sdk/pull/3079\r\n* docs: make API reference rendering independent of page order by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3107\r\n* Pin pymdown-extensions back to 11.0 by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3106\r\n* docs: load media examples from disk instead of inline base64 by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3108\r\n* Align with spec #3002: optional clientInfo, serverInfo in result _meta by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3143\r\n* Serve the 2026-07-28 protocol over stdio: decide the era from the opening request by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3152\r\n* Isolate the stdio server's stdin and stdout from handler subprocesses by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3117\r\n* Make CacheConfig() the Client cache default and None the off switch by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3164\r\n* Remove Context.client_id by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3167\r\n* Rename scopes= to scope= on the client-credentials OAuth providers by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3166\r\n* Correct stable v2 target date to 2026-07-28 by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3105\r\n* Remove the deprecated RFC7523OAuthClientProvider by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3169\r\n* Stop advertising MCP_* env vars for MCPServer settings; drop pydantic-settings by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3170\r\n* Remove the unused timeout parameter from OAuthClientProvider by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3165\r\n* Narrow message_handler's parameter to notifications and exceptions by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3168\r\n* Replace FileResource.is_binary with an encoding field by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3171\r\n* Cache compiled output-schema validators on ClientSession by @jlowin in https://github.com/modelcontextprotocol/python-sdk/pull/3134\r\n* Lengthen the demo signing keys in the identity-assertion examples by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3180\r\n* Repin conformance harness to the published 0.2.0-alpha.10 by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3184\r\n* Point pre-release install pins at 2.0.0rc1 by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3186\r\n\r\n## New Contributors\r\n* @AndreKalberer made their first contribution in https://github.com/modelcontextprotocol/python-sdk/pull/3079\r\n\r\n**Full Changelog**: https://github.com/modelcontextprotocol/python-sdk/compare/v2.0.0b2...v2.0.0rc1","reactions":{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/360447778/reactions","total_count":1,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"mentions_count":4},{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/353933457","assets_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/353933457/assets","upload_url":"https://uploads.github.com/repos/modelcontextprotocol/python-sdk/releases/353933457/assets{?name,label}","html_url":"https://github.com/modelcontextprotocol/python-sdk/releases/tag/v2.0.0b2","id":353933457,"author":{"login":"maxisbey","id":224885523,"node_id":"U_kgDODWd7Ew","avatar_url":"https://avatars.githubusercontent.com/u/224885523?v=4","gravatar_id":"","url":"https://api.github.com/users/maxisbey","html_url":"https://github.com/maxisbey","followers_url":"https://api.github.com/users/maxisbey/followers","following_url":"https://api.github.com/users/maxisbey/following{/other_user}","gists_url":"https://api.github.com/users/maxisbey/gists{/gist_id}","starred_url":"https://api.github.com/users/maxisbey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxisbey/subscriptions","organizations_url":"https://api.github.com/users/maxisbey/orgs","repos_url":"https://api.github.com/users/maxisbey/repos","events_url":"https://api.github.com/users/maxisbey/events{/privacy}","received_events_url":"https://api.github.com/users/maxisbey/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOM2n80s4VGJiR","tag_name":"v2.0.0b2","target_commitish":"main","name":"v2.0.0b2","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-07-14T16:05:08Z","updated_at":"2026-07-14T16:44:05Z","published_at":"2026-07-14T16:41:00Z","assets":[],"tarball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/tarball/v2.0.0b2","zipball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/zipball/v2.0.0b2","body":"Second v2 beta. Pre-releases are opt-in only; `pip install mcp` still resolves to the stable 1.x line.\r\n\r\n```bash\r\npip install mcp==2.0.0b2\r\n# or\r\nuv add \"mcp==2.0.0b2\"\r\n```\r\n\r\nThe [documentation](https://py.sdk.modelcontextprotocol.io/v2/) has the full tutorial and API reference, and the [migration guide](https://py.sdk.modelcontextprotocol.io/v2/migration/) covers coming from v1. Stable v2 is still targeted for 2026-07-28 alongside the spec release - keep pinning an exact version.\r\n\r\n## Highlights\r\n\r\n### httpx is replaced by httpx2 (#2972)\r\n\r\nThe SDK's HTTP stack now runs on [httpx2](https://pypi.org/project/httpx2/) (`>=2.5.0`), the next-generation httpx fork with SSE support built in, replacing `httpx` + `httpx-sse`. Most code needs no changes; if you pass your own `http_client` into a transport, change the import to `httpx2`. Runtime behavior that changes:\r\n\r\n- TLS verification uses the operating system trust store (via `truststore`) instead of certifi's bundle. `SSL_CERT_FILE` / `SSL_CERT_DIR` are honored first.\r\n- Loggers are renamed: `httpx` -> `httpx2`, `httpcore.*` -> `httpcore2.*` - update logging filters that match on those names.\r\n- SSE GET streams send `Accept: application/json, text/event-stream` (previously exactly `text/event-stream`).\r\n\r\n### Client-side subscriptions/listen (#3047)\r\n\r\nThe client half of `subscriptions/listen` (SEP-2575), promised in the b1 notes: one context manager, `async for` consumption, typed events.\r\n\r\n```python\r\nasync with client.listen(tools_list_changed=True, resource_subscriptions=[\"note://todo\"]) as sub:\r\n    print(sub.honored)  # the subset the server agreed to deliver\r\n    async for event in sub:\r\n        match event:\r\n            case ToolsListChanged():\r\n                tools = await client.list_tools()\r\n            case ResourceUpdated(uri=uri):\r\n                body = await client.read_resource(uri)\r\n```\r\n\r\nEntering waits for the server's acknowledgment, so `sub.honored` is always populated and pre-ack failures raise instead of degrading silently.\r\n\r\n### Request cancellation works on the 2026 transports (#3046)\r\n\r\nCancelling or timing out a client request now actually stops it: over streamable HTTP the request's own POST/SSE stream is closed (the spec's cancellation signal), and over stdio the client sends `notifications/cancelled`. Callers can also supply the request id for a call - the seam the listen driver builds on.\r\n\r\n### Resolvers can sample and list roots (#3049)\r\n\r\nResolver dependency injection now covers all three multi-round-trip request kinds (SEP-2322): a dependency can return `Sample(...)` or `ListRoots()` in addition to `Elicit(...)`, so a tool can ask the client's LLM or fetch its roots mid-call, on both protocol eras.\r\n\r\n## Notes\r\n\r\n- Tool-name validation now rejects names with a trailing newline (#3076).\r\n- The tasks extension is still in review and will ship in a later pre-release.\r\n- If you install under uv's `exclude-newer` cooldown: `mcp` pins `mcp-types` to the exact same version, so exempt both packages - `exclude-newer-package = { mcp = false, mcp-types = false }`.\r\n\r\n## What's Changed\r\n* De-flake conformance CI: solo re-verification, spawn-storm reduction, result artifacts by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3043\r\n* Harden the dual-era stream loop's era-lock and rejection semantics by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3040\r\n* docs: restructure into topical sections and add the four most-asked-for pages by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3044\r\n* docs: add a \"What's new in v2\" page by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3054\r\n* docs: modernize the site theme by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3057\r\n* docs: restructure the migration guide around topical groups with a navigation layer by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3058\r\n* Make client-side cancellation work over the 2026 transports by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3046\r\n* Extend resolver DI to sampling and roots requests by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3049\r\n* Share one event loop per test module to stop Windows socketpair churn by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3070\r\n* docs: pin mkdocs<2 and silence the mkdocs-material advisory banner in CI by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3072\r\n* Add the client-side subscriptions/listen driver by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3047\r\n* Gate the test matrix and retry setup-uv's flaky manifest fetch by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3080\r\n* ci: pick the docs-preview toolchain from the PR checkout by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3081\r\n* docs: replace MkDocs with Zensical by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/3073\r\n* fix: reject trailing newline in tool-name validation by @Otis0408 in https://github.com/modelcontextprotocol/python-sdk/pull/3076\r\n* Replace httpx and httpx-sse with httpx2 by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2972\r\n\r\n## New Contributors\r\n* @Otis0408 made their first contribution in https://github.com/modelcontextprotocol/python-sdk/pull/3076\r\n\r\n**Full Changelog**: https://github.com/modelcontextprotocol/python-sdk/compare/v2.0.0b1...v2.0.0b2","reactions":{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/353933457/reactions","total_count":8,"+1":0,"-1":0,"laugh":0,"hooray":2,"confused":0,"heart":3,"rocket":3,"eyes":0},"mentions_count":3},{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/347148890","assets_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/347148890/assets","upload_url":"https://uploads.github.com/repos/modelcontextprotocol/python-sdk/releases/347148890/assets{?name,label}","html_url":"https://github.com/modelcontextprotocol/python-sdk/releases/tag/v2.0.0b1","id":347148890,"author":{"login":"maxisbey","id":224885523,"node_id":"U_kgDODWd7Ew","avatar_url":"https://avatars.githubusercontent.com/u/224885523?v=4","gravatar_id":"","url":"https://api.github.com/users/maxisbey","html_url":"https://github.com/maxisbey","followers_url":"https://api.github.com/users/maxisbey/followers","following_url":"https://api.github.com/users/maxisbey/following{/other_user}","gists_url":"https://api.github.com/users/maxisbey/gists{/gist_id}","starred_url":"https://api.github.com/users/maxisbey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxisbey/subscriptions","organizations_url":"https://api.github.com/users/maxisbey/orgs","repos_url":"https://api.github.com/users/maxisbey/repos","events_url":"https://api.github.com/users/maxisbey/events{/privacy}","received_events_url":"https://api.github.com/users/maxisbey/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOM2n80s4UsRJa","tag_name":"v2.0.0b1","target_commitish":"main","name":"v2.0.0b1","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-06-30T23:14:52Z","updated_at":"2026-06-30T23:24:45Z","published_at":"2026-06-30T23:18:18Z","assets":[],"tarball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/tarball/v2.0.0b1","zipball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/zipball/v2.0.0b1","body":"First v2 beta, and the first release with full support for the [2026-07-28 MCP specification](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/). Pre-releases are opt-in only; `pip install mcp` still resolves to the stable 1.x line.\r\n\r\n```bash\r\npip install mcp==2.0.0b1\r\n# or\r\nuv add \"mcp==2.0.0b1\"\r\n```\r\n\r\nThe [documentation](https://py.sdk.modelcontextprotocol.io/v2/) has the full tutorial and API reference, and the [migration guide](https://py.sdk.modelcontextprotocol.io/v2/migration/) covers coming from v1. Beta means the architecture is settled and changes from here should be much smaller than between alphas, but the API can still shift before stable v2, targeted for 2026-07-28 alongside the spec release - keep pinning an exact version.\r\n\r\n## What's new in v2\r\n\r\nThe whole v2 line so far (alphas included), condensed:\r\n\r\n- **A new core.** The session-centric v1 internals are replaced by a dispatcher/runner pipeline built for the stateless 2026 protocol: `ServerRunner` is a pure handler kernel, transports are thin drivers over it, and one endpoint serves both protocol eras side by side.\r\n- **`FastMCP` is now `MCPServer`.** The decorator API stays; the low-level `Server` takes handlers as constructor parameters, fields are snake_case, and traffic is validated against the negotiated spec version on the wire.\r\n- **A new `Client`.** `Client(target, mode='auto')` speaks every protocol version - it probes `server/discover` and falls back to `initialize` automatically. The target can be a URL, a stdio subprocess, a custom transport, or a server object in memory (great for tests).\r\n- **Protocol types are a standalone package.** `mcp-types` (imported as `mcp_types`) depends only on `pydantic` and `typing-extensions`, so tooling can speak MCP without the transport stack. Published in lock-step with `mcp`.\r\n- **Resolver dependency injection.** Tools declare what they need as typed parameters; a resolver can compute the value server-side or ask the user, with questions delivered over elicitation on 2025 sessions and multi-round-trip requests on 2026 sessions.\r\n- **RFC 6570 URI templates.** Resource templates support the full operator set - query parameters, path segments, explode modifiers - with path-security validation built in.\r\n- **Extension APIs on both sides.** Servers compose protocol extensions - including MCP Apps - through a pluggable API; clients mirror it with `Client(extensions=[...])`.\r\n- **Middleware and observability.** Server middleware is `(ctx, call_next)`, and OpenTelemetry tracing ships on by default with GenAI semantic conventions.\r\n- **Docs rebuilt on tested examples.** Every snippet in the [book](https://py.sdk.modelcontextprotocol.io/v2/) is an executable, CI-tested file, plus a story-style examples suite and llms.txt renditions for agents.\r\n\r\n## 2026-07-28 spec support\r\n\r\nClient and server:\r\n\r\n- **Stateless core**: self-describing requests with no handshake, `server/discover`, scale-out on plain HTTP with no session affinity - progress and log notifications stream within the same single POST exchange.\r\n- **Multi-round-trip requests**: tools, prompts, and resources can ask for input mid-call; clients auto-resolve through their existing callbacks; on `MCPServer`, `requestState` is sealed by default (authenticated encryption) so clients cannot read or forge it.\r\n- **Header-based routing and caching**: `Mcp-Method` / `Mcp-Name` / `Mcp-Param-*` headers stamped by the client and validated by the server (SEP-2243), and `ttlMs` / `cacheScope` caching hints stamped by servers and honored by the client-side response cache (SEP-2549).\r\n- **subscriptions/listen**: served with a pluggable event bus (SEP-2575); the client-side listen driver follows in a later pre-release.\r\n- **2026-07-28 over stdio (#3038)**: auto-mode clients negotiate the new revision over stdio too - existing alpha clients upgrade with zero code changes.\r\n- **Enterprise auth**: SEP-990 identity assertion (ID-JAG) for enterprise IdP flows, on top of the OAuth hardening from the alphas (RFC 9207, SEP-837, SEP-2350, SEP-2352).\r\n- **Spec deprecations**: roots, sampling, and `logging/setLevel` are deprecated per SEP-2577 - advisory warnings only; everything keeps working for sessions on 2025-11-25 or earlier.\r\n\r\nv2 passes the official [MCP conformance suite](https://github.com/modelcontextprotocol/conformance), client and server, except the tasks suite: tasks moved to an extension in 2026-07-28, and support is in review to ship in an upcoming pre-release.\r\n\r\n## Try it, tell us what breaks\r\n\r\n- Coming from v1? Start with the [migration guide](https://py.sdk.modelcontextprotocol.io/v2/migration/). v1.x remains the stable line and keeps getting critical bug fixes and security patches.\r\n- If your package depends on `mcp`, add a `<2` upper bound now (for example `mcp>=1.27,<2`) so the stable release doesn't surprise your users.\r\n- Feedback is the most useful thing you can give us during the beta: [open a v2 issue](https://github.com/modelcontextprotocol/python-sdk/issues/new?template=v2-feedback.yaml) or find us in [#python-sdk-dev on the MCP Contributors Discord](https://discord.gg/6CSzBmMkjX).\r\n\r\n## What's Changed (since previous alpha)\r\n\r\n* Remove comment-on-release workflow by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2985\r\n* Preserve empty issuer/resource paths on AuthSettings by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2987\r\n* find_invalid_x_mcp_header: never repr a non-string annotation value by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2989\r\n* Add story-style examples suite (27 stories + harness + CI) by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2957\r\n* Rebuild the docs around tested examples; shrink README.v2.md to a pitch by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2978\r\n* Add .claude/skills/test-quality and reference it from AGENTS.md by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2993\r\n* Fix docs/release follow-ups from the mcp-types package split by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2977\r\n* Mirror x-mcp-header tool arguments into Mcp-Param-* request headers (SEP-2243) by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2990\r\n* Switch RFC7523OAuthClientProvider warning to MCPDeprecationWarning by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2996\r\n* Make OpenTelemetry tracing the single default middleware by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2995\r\n* Pin conformance harness to main@b18aa918 (merge of #371) via pkg.pr.new by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3000\r\n* Remove the dispatch-tier middleware hook by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2997\r\n* Client auto-resolves InputRequiredResult via existing callbacks (SEP-2322) by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2998\r\n* Deprecate Server.__init__ handlers for removed capabilities by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/3002\r\n* Support RFC 8693 token exchange for enterprise IdP flows (SEP-990) by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2988\r\n* Add SSE response mode to the 2026 streamable-HTTP server entry by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3001\r\n* feat: RFC 6570 URI templates with operator-aware security by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2356\r\n* Add docs, tested examples, and a story for SEP-990 identity assertion by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3004\r\n* Re-vendor 2026-07-28 schema at spec ead35b59 (SubscriptionsListenResult) by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3006\r\n* Wire SEP-990 enterprise-managed-authorization conformance fixture by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3007\r\n* Add a pluggable server extension API with MCP Apps by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/3003\r\n* Add resolver dependency injection for MCPServer tools by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2969\r\n* Promote the v2 README to README.md ahead of the first v2 beta by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3014\r\n* docs: convert bold cross-references into links, link SEP and RFC mentions by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3017\r\n* Drive resolver elicitation over the 2026-07-28 input_required flow by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2986\r\n* Add cache_hints constructor map for SEP-2549 caching hints by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3015\r\n* Consult request_state only for the question a resolver is asking by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3019\r\n* Pass InputRequiredResult through the MCPServer prompt and resource pipelines by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3020\r\n* docs: publish llms.txt and markdown renditions of the docs by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3024\r\n* Add a client-side response cache honoring SEP-2549 caching hints by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3023\r\n* Surface skipped conformance scenarios as baselined known failures by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3030\r\n* Add Cloudflare Pages docs preview with /preview-docs slash command by @localden in https://github.com/modelcontextprotocol/python-sdk/pull/3028\r\n* Require integrity protection for MRTR requestState by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3032\r\n* Add a client extension API by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3034\r\n* Validate Mcp-Param-* headers server-side on the 2026-07-28 HTTP path (SEP-2243) by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3033\r\n* Serve subscriptions/listen with a pluggable event bus (SEP-2575) by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3035\r\n* Add v2 feedback issue template by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3037\r\n* Document pydantic.ValidationError in client Raises sections by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3036\r\n* Serve the 2026-07-28 era over stdio and other stream-pair transports by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3038\r\n* Point pre-release install pins at 2.0.0b1 by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/3039\r\n\r\n\r\n**Full Changelog**: https://github.com/modelcontextprotocol/python-sdk/compare/v2.0.0a3...v2.0.0b1","mentions_count":3},{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/345210186","assets_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/345210186/assets","upload_url":"https://uploads.github.com/repos/modelcontextprotocol/python-sdk/releases/345210186/assets{?name,label}","html_url":"https://github.com/modelcontextprotocol/python-sdk/releases/tag/v2.0.0a3","id":345210186,"author":{"login":"maxisbey","id":224885523,"node_id":"U_kgDODWd7Ew","avatar_url":"https://avatars.githubusercontent.com/u/224885523?v=4","gravatar_id":"","url":"https://api.github.com/users/maxisbey","html_url":"https://github.com/maxisbey","followers_url":"https://api.github.com/users/maxisbey/followers","following_url":"https://api.github.com/users/maxisbey/following{/other_user}","gists_url":"https://api.github.com/users/maxisbey/gists{/gist_id}","starred_url":"https://api.github.com/users/maxisbey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxisbey/subscriptions","organizations_url":"https://api.github.com/users/maxisbey/orgs","repos_url":"https://api.github.com/users/maxisbey/repos","events_url":"https://api.github.com/users/maxisbey/events{/privacy}","received_events_url":"https://api.github.com/users/maxisbey/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOM2n80s4Uk31K","tag_name":"v2.0.0a3","target_commitish":"main","name":"v2.0.0a3","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-06-26T07:51:59Z","updated_at":"2026-06-26T08:42:18Z","published_at":"2026-06-26T08:42:18Z","assets":[],"tarball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/tarball/v2.0.0a3","zipball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/zipball/v2.0.0a3","body":"Third v2 alpha. Pre-releases are opt-in only; `pip install mcp` still resolves to the stable 1.x line.\r\n\r\n```bash\r\npip install mcp==2.0.0a3\r\n# or\r\nuv add \"mcp==2.0.0a3\"\r\n```\r\n\r\nSee the [migration guide](https://github.com/modelcontextprotocol/python-sdk/blob/main/docs/migration.md) for the full list of breaking changes.\r\n\r\n## Warning\r\n\r\nThe public API is likely to change between alpha releases, and ideally less-so between beta releases.\r\n\r\n## Highlights\r\n\r\n### 2026-07-28 stateless protocol is now negotiable end to end (#2928, #2950)\r\n\r\nThe 2026-07-28 spec revision drops the `initialize` handshake on streamable HTTP: each POST is self-describing (protocol version, client info, and capabilities ride in `params._meta`) and the server replies with a single JSON-RPC response. Both sides of that path are now wired up.\r\n\r\nServer side: `ServerRunner` is now a pure handler kernel composed by three drivers (`serve_one`, `serve_connection`, `serve_loop`). A new `Connection` object owns per-peer state with two factories - `from_envelope` for the per-request stateless path and `for_loop` for handshake-driven connections - so `protocol_version` is always set and the old `stateless: bool` flag is gone from `ServerRunner`, `ServerSession`, and `Server.run()`. The streamable-HTTP session manager routes by header: known handshake versions go to the legacy transport; everything else hits a new per-POST entry that classifies, builds a `Connection.from_envelope`, and drives `serve_one`. `server/discover` is auto-derived from registered handlers, and `lifespan` is entered once at manager startup in both modes.\r\n\r\nClient side: `ClientSession` gains `.discover()` and `.adopt()` alongside `.initialize()`, each of which installs an outbound stamp closure at connect time so the send path has no era branch. `Client` gains `mode='legacy'|'auto'|<version>` and `prior_discover=`; `mode='auto'` probes `server/discover` and falls back to `initialize` on `-32601` or timeout. The streamable-HTTP transport is now version-agnostic (per-message headers arrive via `CallOptions`), and an in-process `modern_on_request` driver lets `Client(server, mode='auto')` run the stateless path against an in-memory server.\r\n\r\n`LATEST_PROTOCOL_VERSION` is now `\"2026-07-28\"`. `SUPPORTED_PROTOCOL_VERSIONS` is deprecated in favour of `HANDSHAKE_PROTOCOL_VERSIONS` and `MODERN_PROTOCOL_VERSIONS`.\r\n\r\n### Protocol types split into a standalone `mcp-types` package (#2973)\r\n\r\nThe wire types now ship as a separate `mcp-types` distribution (imported as `mcp_types`) that depends only on `pydantic` and `typing-extensions`. Tooling and lightweight clients can serialize and validate MCP traffic without pulling in `httpx`, `starlette`, `uvicorn`, or the rest of the transport stack.\r\n\r\n`mcp.types` and `mcp.shared.version` are removed; import from `mcp_types` and `mcp_types.version` instead. The top-level `from mcp import Tool` re-exports are unchanged. The two packages are version-locked and published together from the same tag.\r\n\r\n### Multi-round tool calls: `InputRequiredResult` plumbed through both sides (#2967, #2968, #2974)\r\n\r\nThe lowlevel `Server` `on_*` return types are widened to admit `InputRequiredResult`, and a `subscriptions/listen` handler slot is added. On the client, `ClientSession.call_tool` gains `input_responses=` and `request_state=` retry kwargs and returns `CallToolResult | InputRequiredResult`; `Client.call_tool` and `ClientSessionGroup.call_tool` are overloaded on a new `allow_input_required` flag so existing callers keep their `CallToolResult` return type. `ClientSession.send_request` now accepts a `TypeAdapter` for union result parsing.\r\n\r\n### `ServerMiddleware` reshaped to `(ctx, call_next)` and `OpenTelemetryMiddleware` added (#2941, #2970)\r\n\r\n`ServerMiddleware.__call__` goes from `(ctx, method, params, call_next)` to `(ctx, call_next)`; `method` and raw `params` now live on `ServerRequestContext`, and `call_next(ctx)` lets middleware rewrite the inbound message via `replace(ctx, params=...)` before the handler runs. A new context-tier `OpenTelemetryMiddleware` spans both requests and notifications and sets the OpenTelemetry GenAI semantic-convention attributes.\r\n\r\n### OAuth client conformance: RFC 9207, SEP-837, SEP-2350, SEP-2352 (#2921, #2930, #2931, #2933)\r\n\r\nThe OAuth client now validates the `iss` authorization-response parameter (RFC 9207), sends `application_type` during Dynamic Client Registration (SEP-837), unions previously requested scopes on step-up re-authorization (SEP-2350), and binds client credentials to the authorization server that issued them (SEP-2352). #2936 and #2946 harden the edge cases (refresh-token retention on non-rotating refresh, same-origin issuer binding).\r\n\r\n### Roots, sampling, and logging methods deprecated per SEP-2577 (#2926)\r\n\r\nThe user-facing methods for roots, sampling, and `logging/setLevel` are now marked with `typing_extensions.deprecated`. The deprecation is advisory only - capability negotiation and wire behaviour are unchanged, and everything keeps working for sessions negotiating 2025-11-25 or earlier.\r\n\r\n## What's Changed\r\n* Pass a list to parametrize in test_docs_examples (pytest 9.1.0 compat) by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2890\r\n* docs: add AI-assisted contribution policy to CONTRIBUTING.md by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2887\r\n* Resolve protocol version per request and expose it as ctx.protocol_version by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2886\r\n* tests/interaction: era-axis machinery for the requirements manifest by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2909\r\n* ci(conformance): add 2026-07-28 carried-forward leg + bump harness to 0.2.0-alpha.4 by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2911\r\n* Re-vendor 2026-07-28 schema and absorb spec #2907 error-code renumber by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2912\r\n* Relax monolith ElicitRequestURLParams.elicitation_id for 2026-07-28 by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2913\r\n* First end-to-end 2026-07-28 stateless tools/call (experimental entry + ClientSession pin) by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2917\r\n* Add uv ecosystem to dependabot and drop weekly lockfile workflow by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2919\r\n* Return -32602 for resource not found (SEP-2164) by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2920\r\n* fix: correct MCPServer call_tool result type by @fengjikui in https://github.com/modelcontextprotocol/python-sdk/pull/2816\r\n* Ignore pre-2026 protocol_version pins at the StreamableHTTP transport by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2923\r\n* Preserve empty URL paths on OAuth metadata models by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2925\r\n* Validate the `iss` authorization-response parameter (RFC 9207 / SEP-2468) by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2921\r\n* ci(conformance): bump harness to 0.2.0-alpha.5 preview by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2927\r\n* Document `redirect_uri` wire-format change in OAuth migration note by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2929\r\n* Send `application_type` during Dynamic Client Registration (SEP-837) by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2930\r\n* Pass json-schema-ref-no-deref conformance scenario (SEP-2106) by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2924\r\n* Deprecate roots, sampling, and logging methods per SEP-2577 by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2926\r\n* Union previously requested scopes on step-up re-authorization (SEP-2350) by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2931\r\n* Move scope step-up test to top-level function by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2932\r\n* Bind client credentials to their authorization server (SEP-2352) by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2933\r\n* Server-side 2026-07-28 stateless support: classifier, driver split, server/discover by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2928\r\n* OAuth client: harden SEP-2352/SEP-2350 edge cases; fix conformance comment by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2936\r\n* Slim ServerMiddleware to `(ctx, call_next)` and add `OpenTelemetryMiddleware` by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2941\r\n* OAuth client: keep refresh_token on non-rotating refresh; restore same-origin issuer binding by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2946\r\n* Buffer per-request StreamableHTTP streams to avoid serial-router head-of-line block by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2934\r\n* lowlevel Server: widen on_* return types for InputRequiredResult; add subscriptions/listen slot by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2967\r\n* Client-side 2026-07-28 support: .discover()/.adopt() + Client(mode=); request-metadata green by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2950\r\n* Add GenAI semantic-convention attributes to OpenTelemetryMiddleware by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2970\r\n* Stop flagging snake_case is_error results as tool errors in OTel span by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2971\r\n* Client call_tool: input_responses/request_state retry params; InputRequiredResult via allow_input_required by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2968\r\n* Split protocol types into a standalone `mcp-types` package by @Kludex in https://github.com/modelcontextprotocol/python-sdk/pull/2973\r\n* Set Development Status classifier to Production/Stable by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2975\r\n* Conformance burn-down: server-side InputRequiredResult, Mcp-Method/Name validation, x-mcp-header filter (14 scenarios → green) by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2974\r\n\r\n## New Contributors\r\n* @fengjikui made their first contribution in https://github.com/modelcontextprotocol/python-sdk/pull/2816\r\n\r\n**Full Changelog**: https://github.com/modelcontextprotocol/python-sdk/compare/v2.0.0a2...v2.0.0a3","reactions":{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/345210186/reactions","total_count":2,"+1":2,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"mentions_count":3},{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/345305601","assets_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/345305601/assets","upload_url":"https://uploads.github.com/repos/modelcontextprotocol/python-sdk/releases/345305601/assets{?name,label}","html_url":"https://github.com/modelcontextprotocol/python-sdk/releases/tag/v1.28.1","id":345305601,"author":{"login":"maxisbey","id":224885523,"node_id":"U_kgDODWd7Ew","avatar_url":"https://avatars.githubusercontent.com/u/224885523?v=4","gravatar_id":"","url":"https://api.github.com/users/maxisbey","html_url":"https://github.com/maxisbey","followers_url":"https://api.github.com/users/maxisbey/followers","following_url":"https://api.github.com/users/maxisbey/following{/other_user}","gists_url":"https://api.github.com/users/maxisbey/gists{/gist_id}","starred_url":"https://api.github.com/users/maxisbey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxisbey/subscriptions","organizations_url":"https://api.github.com/users/maxisbey/orgs","repos_url":"https://api.github.com/users/maxisbey/repos","events_url":"https://api.github.com/users/maxisbey/events{/privacy}","received_events_url":"https://api.github.com/users/maxisbey/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOM2n80s4UlPIB","tag_name":"v1.28.1","target_commitish":"v1.x","name":"v1.28.1","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-06-26T11:31:33Z","updated_at":"2026-06-26T12:32:57Z","published_at":"2026-06-26T12:32:57Z","assets":[],"tarball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/tarball/v1.28.1","zipball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/zipball/v1.28.1","body":"## What's Changed\r\n* [v1.x] Buffer per-request StreamableHTTP streams; store priming event before dispatch by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2948\r\n* [v1.x] Set Development Status classifier to Production/Stable by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2976\r\n* [v1.x] Support TransportSecuritySettings in the WebSocket server transport by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2992\r\n\r\n\r\n**Full Changelog**: https://github.com/modelcontextprotocol/python-sdk/compare/v1.28.0...v1.28.1","mentions_count":1},{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/340429720","assets_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/340429720/assets","upload_url":"https://uploads.github.com/repos/modelcontextprotocol/python-sdk/releases/340429720/assets{?name,label}","html_url":"https://github.com/modelcontextprotocol/python-sdk/releases/tag/v2.0.0a2","id":340429720,"author":{"login":"maxisbey","id":224885523,"node_id":"U_kgDODWd7Ew","avatar_url":"https://avatars.githubusercontent.com/u/224885523?v=4","gravatar_id":"","url":"https://api.github.com/users/maxisbey","html_url":"https://github.com/maxisbey","followers_url":"https://api.github.com/users/maxisbey/followers","following_url":"https://api.github.com/users/maxisbey/following{/other_user}","gists_url":"https://api.github.com/users/maxisbey/gists{/gist_id}","starred_url":"https://api.github.com/users/maxisbey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxisbey/subscriptions","organizations_url":"https://api.github.com/users/maxisbey/orgs","repos_url":"https://api.github.com/users/maxisbey/repos","events_url":"https://api.github.com/users/maxisbey/events{/privacy}","received_events_url":"https://api.github.com/users/maxisbey/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOM2n80s4USouY","tag_name":"v2.0.0a2","target_commitish":"main","name":"v2.0.0a2","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-06-16T21:08:29Z","updated_at":"2026-06-16T21:56:55Z","published_at":"2026-06-16T21:55:31Z","assets":[],"tarball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/tarball/v2.0.0a2","zipball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/zipball/v2.0.0a2","body":"Second v2 alpha. Pre-releases are opt-in only; `pip install mcp` still resolves to the stable 1.x line.\r\n\r\n```bash\r\npip install mcp==2.0.0a2\r\n# or\r\nuv add \"mcp==2.0.0a2\"\r\n```\r\n\r\nSee the [migration guide](https://github.com/modelcontextprotocol/python-sdk/blob/main/docs/migration.md) for the full list of breaking changes.\r\n\r\n## Highlights\r\n\r\n### Full 2026-07-28 types added along with per-version protocol types and version-gated wire validation (#2849)\r\n\r\nThe SDK now ships three type sets:\r\n\r\n- `mcp.types` - the hand-maintained superset monolith. This remains the public API you import from; it covers every field from every supported spec version.\r\n- `mcp.types.v2025_11_25` - generated verbatim from the 2025-11-25 schema (also serves earlier versions).\r\n- `mcp.types.v2026_07_28` - generated verbatim from the 2026-07-28 schema.\r\n\r\nThe generated per-version packages are wired into both `ServerRunner` and `ClientSession` via `mcp.types.methods`, which maps each `(method, version)` pair to its request/result/notification types. At runtime, the negotiated protocol version selects which generated set is used to validate traffic on the wire:\r\n\r\n- Inbound requests and notifications are validated against the negotiated version's types. A spec method that does not exist at that version returns `METHOD_NOT_FOUND`; a malformed payload returns `INVALID_PARAMS`.\r\n- Inbound results (in both directions) are validated against the negotiated version's result type before being parsed into the monolith type.\r\n- Outbound results are serialized through the negotiated version's type, so fields that only exist in a newer spec version are stripped before they reach an older peer.\r\n\r\nUser code keeps working with the monolith `mcp.types`; the per-version packages are an internal validation layer. `2026-07-28` is modeled but not yet negotiable - `SUPPORTED_PROTOCOL_VERSIONS` is unchanged in this alpha.\r\n\r\nThis makes validation stricter than a1: handlers that returned spec-invalid output (for example `Tool(inputSchema={})` without `\"type\": \"object\"`) now fail with `INTERNAL_ERROR`, and clients now reject spec-invalid server output that was previously tolerated.\r\n\r\n### ClientSession now runs on the dispatcher (#2838)\r\n\r\n`ClientSession` has been rewritten to sit on the same `JSONRPCDispatcher` receive path that `ServerRunner` adopted in a1, and `BaseSession` is removed. The public surface (constructor, typed request methods, `initialize()`, context-manager lifecycle) is unchanged, but the internals fix several long-standing v1 issues:\r\n\r\n- Server-initiated requests (sampling, elicitation, roots) now run concurrently instead of inline in the receive loop, so a slow callback no longer blocks the whole session and a callback that itself sends a request no longer deadlocks.\r\n- A raising notification or request callback is contained at the dispatcher and no longer takes down the connection.\r\n- Timed-out or caller-cancelled requests now send `notifications/cancelled` to the peer.\r\n- Server-to-client cancellation now actually interrupts the running client callback.\r\n\r\nA new keyword-only `dispatcher=` constructor argument lets you pass a pre-built dispatcher (for example `DirectDispatcher` for in-process embedding) instead of the read/write stream pair.\r\n\r\n## What's Changed\r\n* Fix unknown-method error code and add a protocol version registry by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2836\r\n* Flush the stdio subprocess's coverage data before the clean-exit line by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2840\r\n* Fix 404 links in v1 README to renamed example files by @jerome3o-anthropic in https://github.com/modelcontextprotocol/python-sdk/pull/2822\r\n* [v2] ClientSession runs on JSONRPCDispatcher; BaseSession removed by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2838\r\n* ci(conformance): pin harness to 0.2.0-alpha.3 with expected-failures baseline by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2877\r\n* ci(conformance): run server --suite draft and baseline the 2026-07-28 scenarios by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2878\r\n* Deflake the issue-1363 tests: wait for lifespan startup instead of sleeping by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2879\r\n* Widen the stdio round-trip test's termination grace and overall timeout by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2880\r\n* chore(deps): bump the github-actions group across 1 directory with 9 updates by @dependabot[bot] in https://github.com/modelcontextprotocol/python-sdk/pull/2636\r\n* Protocol types for 2026-07-28: superset monolith, committed per-version packages, and wire-method maps by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2849\r\n* Expand site-absolute spec links in generated docstrings to full URLs by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2885\r\n* Drop stale superset-leniency note from ElicitResult.content docstring by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2884\r\n\r\n\r\n**Full Changelog**: https://github.com/modelcontextprotocol/python-sdk/compare/v2.0.0a1...v2.0.0a2","reactions":{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/340429720/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":1},"mentions_count":3},{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/340421086","assets_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/340421086/assets","upload_url":"https://uploads.github.com/repos/modelcontextprotocol/python-sdk/releases/340421086/assets{?name,label}","html_url":"https://github.com/modelcontextprotocol/python-sdk/releases/tag/v1.28.0","id":340421086,"author":{"login":"maxisbey","id":224885523,"node_id":"U_kgDODWd7Ew","avatar_url":"https://avatars.githubusercontent.com/u/224885523?v=4","gravatar_id":"","url":"https://api.github.com/users/maxisbey","html_url":"https://github.com/maxisbey","followers_url":"https://api.github.com/users/maxisbey/followers","following_url":"https://api.github.com/users/maxisbey/following{/other_user}","gists_url":"https://api.github.com/users/maxisbey/gists{/gist_id}","starred_url":"https://api.github.com/users/maxisbey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxisbey/subscriptions","organizations_url":"https://api.github.com/users/maxisbey/orgs","repos_url":"https://api.github.com/users/maxisbey/repos","events_url":"https://api.github.com/users/maxisbey/events{/privacy}","received_events_url":"https://api.github.com/users/maxisbey/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOM2n80s4USmne","tag_name":"v1.28.0","target_commitish":"v1.x","name":"v1.28.0","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-06-16T21:29:51Z","updated_at":"2026-06-16T21:30:35Z","published_at":"2026-06-16T21:30:35Z","assets":[],"tarball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/tarball/v1.28.0","zipball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/zipball/v1.28.0","body":"## Deprecations\n\nTwo API surfaces now emit `DeprecationWarning` ahead of their removal in v2. Nothing is removed in 1.x, and the warnings fire only when the deprecated API is *called* - importing the modules stays silent.\n\n- **WebSocket transport** - `mcp.client.websocket.websocket_client` and `mcp.server.websocket.websocket_server`. WebSocket was never part of the MCP specification; use the streamable HTTP transport instead. The TypeScript SDK has likewise removed its WebSocket client for v2 (modelcontextprotocol/typescript-sdk#1783).\n- **Experimental tasks API** - `ClientSession.experimental`, `Server.experimental`, `ServerSession.experimental`, and the `experimental_task_handlers=` kwarg on `ClientSession`. Tasks (SEP-1686) were removed from the MCP specification and are expected to return as a separate MCP extension.\n\nIf your test suite runs with `filterwarnings = [\"error\"]` and exercises these paths, add a scoped ignore such as `ignore:The experimental tasks API is deprecated:DeprecationWarning` or `ignore:The WebSocket .* transport is deprecated:DeprecationWarning`.\n\nSee #2828 for full details.\n\n## What's Changed\n\n* [v1.x] Support Python 3.14 by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2769\n* fix: omit null optional fields from task result payloads by @liuzemei in https://github.com/modelcontextprotocol/python-sdk/pull/2809\n* [v1.x] Deprecate the WebSocket transport and the experimental tasks entry points by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2828\n* [v1.x] Add a v2 status banner to the README by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2835\n* [v1.x] Deflake the child process cleanup tests by @maxisbey in https://github.com/modelcontextprotocol/python-sdk/pull/2839\n\n## New Contributors\n\n* @liuzemei made their first contribution in https://github.com/modelcontextprotocol/python-sdk/pull/2809\n\n**Full Changelog**: https://github.com/modelcontextprotocol/python-sdk/compare/v1.27.2...v1.28.0\n","reactions":{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/340421086/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":1},"mentions_count":2},{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/337836084","assets_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/337836084/assets","upload_url":"https://uploads.github.com/repos/modelcontextprotocol/python-sdk/releases/337836084/assets{?name,label}","html_url":"https://github.com/modelcontextprotocol/python-sdk/releases/tag/v2.0.0a1","id":337836084,"author":{"login":"maxisbey","id":224885523,"node_id":"U_kgDODWd7Ew","avatar_url":"https://avatars.githubusercontent.com/u/224885523?v=4","gravatar_id":"","url":"https://api.github.com/users/maxisbey","html_url":"https://github.com/maxisbey","followers_url":"https://api.github.com/users/maxisbey/followers","following_url":"https://api.github.com/users/maxisbey/following{/other_user}","gists_url":"https://api.github.com/users/maxisbey/gists{/gist_id}","starred_url":"https://api.github.com/users/maxisbey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxisbey/subscriptions","organizations_url":"https://api.github.com/users/maxisbey/orgs","repos_url":"https://api.github.com/users/maxisbey/repos","events_url":"https://api.github.com/users/maxisbey/events{/privacy}","received_events_url":"https://api.github.com/users/maxisbey/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOM2n80s4UIvg0","tag_name":"v2.0.0a1","target_commitish":"1e21814ed5d2be7fa3624a3e979c4931d27baa4f","name":"v2.0.0a1","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-06-11T08:41:19Z","updated_at":"2026-06-11T09:35:12Z","published_at":"2026-06-11T09:35:12Z","assets":[],"tarball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/tarball/v2.0.0a1","zipball_url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/zipball/v2.0.0a1","body":"# First V2 Alpha Release\r\n\r\nThis is the first alpha of v2 of the MCP Python SDK.\r\n\r\nPublishing this alpha changes nothing for existing users. Installers don't pick up pre-releases unless you explicitly opt in, so if you do nothing you stay on v1.x.\r\n\r\n## Why v2\r\n\r\nThe upcoming MCP spec release (2026-07-28) has [significant protocol changes](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/), including moving from a stateful, bidirectional protocol to stateless request/response. The v1 SDK is built around long-lived sessions, so supporting the new spec means replacing the SDK's core. Since that's breaking anyway, v2 also fixes some long-standing API problems.\r\n\r\n## What's in this alpha\r\n\r\n- A new Dispatcher pipeline replaces ServerSession on the server side (ServerSession remains as a thin proxy). The same change is coming to ClientSession, which will most likely stay as a shim.\r\n- The low level Server interface has changed quite a bit: handlers are now constructor parameters instead of decorators, and return values are no longer auto-wrapped.\r\n- Server middleware, partially added.\r\n- Type changes throughout, including snake_case field names and stricter validation.\r\n- FastMCP is renamed to MCPServer.\r\n\r\nThe full list is in the [migration guide](https://github.com/modelcontextprotocol/python-sdk/blob/main/docs/migration.md), which is currently the most complete documentation for v2.\r\n\r\n**NOTE:** that this alpha release **only** implements the 2025-11-25 spec revision. Support for 2026-07-28 feature will be added over time through each alpha release with full 2026-07-28 support targeted for beta release on 2026-06-30.\r\n\r\n## Stability and timeline\r\n\r\nRight now v2 is very breaking, and each alpha will likely contain breaking changes from the previous one, so pin exact versions if you try it. Before the stable release we plan to add a good amount of backwards compatibility shims to reduce the breakage.\r\n\r\nAlphas run from now through late June, with a beta targeted for 2026-06-30 and stable v2 targeted for 2026-07-27 (the spec releases 2026-07-28). v1.x is the only stable version of the SDK for now: it stays in maintenance mode and continues to get critical bug fixes and security patches.\r\n\r\n### **TLDR**:\r\n\r\n- **Today (v2.0.0.a1)** - Only 2025-11-25 spec functionality support\r\n- **Today -> 2026-06-30** - New MCP 2026-07-28 spec functionality will be added to v2 alpha versions and released regularly during this time\r\n  - Each alpha release during this should be considered breaking\r\n- **2026-06-30 (estimated)** - A beta version of the SDK will be released with full MCP 2026-07-28 spec support\r\n- **2026-07-01 -> 2026-07-27** - Bug fixes and cleanup\r\n  - Ideally significantly less breaking that each alpha release, although not guaranteed\r\n- **2026-07-28** - A stable v2.0.0 version of the Python SDK will be released along side the MCP 2026-07-28 spec release.\r\n\r\n## What you should do\r\n\r\nIf you maintain a package that depends on mcp, add an upper bound now. 84% of the 10,000+ PyPI packages that depend on mcp declare no upper bound, and they'll all resolve to v2 the day the stable release ships. Add `<2` to your existing constraint, for example `mcp>=1.27,<2`, and your users stay on v1 until you've migrated.\r\n\r\nIf you want to try v2:\r\n\r\n```shell\r\npip install mcp==2.0.0a1\r\n# or\r\nuv add mcp==2.0.0a1\r\n```\r\n\r\nOne ask: only pin an mcp pre-release from a pre-release of your own package, otherwise you'll drag your users onto the alpha.\r\n\r\nFeedback is much appreciated in [#python-sdk-dev on the MCP Contributors Discord](https://discord.gg/6CSzBmMkjX), or open an issue with the `v2-alpha` label.","reactions":{"url":"https://api.github.com/repos/modelcontextprotocol/python-sdk/releases/337836084/reactions","total_count":9,"+1":1,"-1":0,"laugh":0,"hooray":5,"confused":0,"heart":0,"rocket":0,"eyes":3}}]