René's URL Explorer Experiment


Title: Multi-version protocol types: per-version delta packages (candidate 3/3) by maxisbey · Pull Request #2845 · modelcontextprotocol/python-sdk · GitHub

Open Graph Title: Multi-version protocol types: per-version delta packages (candidate 3/3) by maxisbey · Pull Request #2845 · modelcontextprotocol/python-sdk

X Title: Multi-version protocol types: per-version delta packages (candidate 3/3) by maxisbey · Pull Request #2845 · modelcontextprotocol/python-sdk

Description: Draft — not intended to merge as-is. This is one of three candidate implementations of multi-version protocol type support, pushed side by side so the approaches can be compared concretely. The companion drafts are #2843 (complete per-version model packages) and #2844 (per-version fact tables); all three ship the same public surface and the same behavioral contract, differing in how the per-version knowledge is represented. Once a direction is chosen, the selected approach would be re-cut as a reviewable PR series. This branch adds versioned wire-shape support for protocol revisions 2024-11-05 through 2026-07-28: mcp.types stays one superset model set (the "monolith"), and each revision gets a wire-shape module that defines only what changed since the previous revision, importing everything else from the module that last defined it. The mechanism is "delta modules + one boundary": serialize_for/parse_as in src/mcp/types/wire.py re-validate payloads through the negotiated revision's models, loaded lazily on first boundary use. The mechanism lives in src/mcp/types/v2024_11_05/ … v2026_07_28/ and src/mcp/types/wire.py; everything else is shared surface. Marker note: comments of the form # OD- alternative: … (and # M- in mcp.types.jsonrpc) mark reviewed design decisions at the spot where they bite; the convention is explained in the mcp.types._types module docstring, and the register below maps each id to its location. They are records, not TODOs. Motivation and Context The SDK currently models one protocol revision at a time, but a server or client negotiates a version per session and the 2026-07-28 revision changes wire shapes materially (required resultType, required _meta identity triple on some client requests, removed server→client requests, multi-round-trip (MRTR) input requests, subscriptions, discovery). This candidate explores the "delta" answer: each revision's module IS the reviewable diff against the previous revision, so future small revisions cost a small module rather than a full copy. How Has This Been Tested? Full suite: 2,197 passed / 4 skipped / 1 xfailed; coverage 100.00% (branch) with strict-no-cover clean; pyright strict 0 errors; ruff format + check clean. tests/spec_oracles/: generated per-version schema oracles (pinned to public spec-repo SHA 6d44151…) compared against the SDK types, with a burn-down allowlist whose entries each carry a self-contained reason; green for all five revisions plus the extension and SDK directions. Each oracle module doubles as the flattened one-page view of its revision. tests/types/: per-revision surface pins against the oracles (test_version_surfaces.py), boundary emission/parse behavior, version registry and method tables, public-surface ratchet (mcp.types.__all__ = 196 names), result-union resolution pins. Import cost: no per-revision module is in sys.modules after import mcp (subprocess-asserted); total import time grows ~+30 ms vs main, of which the version mechanism itself contributes ~+1.4 ms (the rest is the larger shared model set). Breaking Changes None new on this branch: docs/migration.md gains feature notes only, and LATEST_PROTOCOL_VERSION / DEFAULT_NEGOTIATED_VERSION / SUPPORTED_PROTOCOL_VERSIONS are byte-identical. Types of changes Bug fix (non-breaking change which fixes an issue) New feature (non-breaking change which adds functionality) Breaking change (fix or feature that would cause existing functionality to change) Documentation update Checklist I have read the MCP Documentation My code follows the repository's style guidelines New and existing tests pass locally I have added appropriate error handling I have added or updated documentation as needed Additional context Reading order src/mcp/types/_types.py — the superset payload types; the module docstring explains the superset principle and the # OD- alternative: marker convention. src/mcp/types/jsonrpc.py — version-independent JSON-RPC envelope. src/mcp/types/_versions.py — per-version method tables (plain data). src/mcp/types/_spec_names.py — the SDK-name ↔ schema-name divergence record. src/mcp/types/_wire_base.py — the wire-shape model base (closed-by-default rationale). src/mcp/types/v2024_11_05/__init__.py — the full base revision; its header documents the delta layout. src/mcp/types/v2025_03_26/__init__.py — the smallest delta; the template in action. Then v2025_06_18, v2025_11_25, v2026_07_28 (the last leads with its recursive JSON alias pair). src/mcp/types/wire.py — serialize_for (shape rules, validate, re-dump, restore walk) and parse_as (superset parse, mandates, result-union selection). tests/types/ — boundary, parse, registry, surface, and import-budget pins. tests/spec_oracles/ — generated per-version oracles + burn-down gate; each oracle module is also the flattened one-page view of that revision. Decision register (targets of the in-source OD-n / M-n markers) OD-1 structured content: plain Any = None (key absent when unset; interim, see open questions) — src/mcp/types/_types.py:1741 OD-2 removed-revision types stay in flat mcp.types, grouped section — src/mcp/types/_types.py:645 OD-3 tasks: 2025-11-25 task types restored types-only; extension package not built — src/mcp/types/_types.py:759 OD-5 caching defaults: don't-cache pair injected on 2026-07-28 emission — src/mcp/types/wire.py:311 OD-9 extra fields: single extra="allow" carve-out on SubscriptionFilter — src/mcp/types/_types.py:1266 OD-11 no outbound narrowing of opened schemas/content on older revisions — src/mcp/types/wire.py:299 OD-12 the four public adapters stay plain smart unions — src/mcp/types/_types.py:2381, 2396, 2414, 2435 OD-13 elicitation requestedSchema stays an untyped dict — src/mcp/types/_spec_names.py:111 M-2 JSONRPCError.id keeps the required-nullable v2 shape — src/mcp/types/jsonrpc.py:189 Key behavioral facts (shared across all three candidates) Emission strips ONLY the documented six-key ledger; no narrowing of caller values beyond it. At 2026-07-28 the boundary injects only protocolVersion and refuses a request missing caller-supplied clientInfo/clientCapabilities in params._meta — identity is session-owned by design. Tool-content emission bound is ≤ 2025-06-18 (the 2025-11-25 schema admits tool content, with the array-content sampling carrier); capability gating is session-layer. Reserved io.modelcontextprotocol/* _meta keys pass through verbatim at every revision. serialize_for refuses bare fragments (content blocks, capabilities, params) with TypeError. Result-bearing unions parse by ranked structural member selection (first success wins; all-fail surfaces the best-ranked arm's errors). The emission alignment walk is keys-only: re-validation through a revision module decides only which keys survive; every emitted leaf value comes from the superset dump, so a revision module's numeric kind never rewrites a caller's value (1.0 stays 1.0). Number-render widening: the elicitation form-answer values (2025-06-18/2025-11-25/2026-07-28) and the NumberSchema bounds/default (the two older revisions that model them) carry a float arm — the pinned schema rendering says integer where schema.ts says number; each widening is pinned per position, and a closure sweep fails any remaining int-only field that is not pinned intended-integer. Embedded input-request entries must carry method at 2026-07-28 (missing at the entry's own method key; earlier and unknown revisions stay lenient); unknown method values classify as invalid params at every revision. Null-valued elicitation content entries (constructible for v1.x compatibility, typed by no schema version) pass through verbatim at every revision that models elicitation; the boundary withholds them from the revision module's re-validation and the alignment walk restores them. Open questions for the maintainer structuredContent interim: structured_content: Any = None, no Unset sentinel, no wrap serializer — the sentinel form breaks 7 existing tests at this base. The sentinel + carve-out path remains the post-review option. Annotations.last_modified deferred in the superset model set (it trips an existing listing-snapshot test); the per-revision modules from 2025-06-18 on model lastModified exactly as their schemas do. ServerResult resolution pin: the Discover-keyed adversarial frame resolves to DiscoverResult (pinned in tests/types/test_wire_parse.py); reverting remains an option. ElicitResult.content | None value arm: null has no wire form at any schema version; the arm exists for v1.x constructor compatibility. Drop vs keep is an open API decision. Conformance-suite gaps (surfaced per AGENTS.md, to raise on the conformance repo) No conformance-suite scenario currently exists for most 2026-07-28 type features; the in-repo oracle and boundary tests substitute for now. Gaps identified: Generic resultType: "complete" emission on ordinary (non-MRTR) results, incl. the empty-result surface (only MRTR scenarios assert resultType). Superset-union membership / version-gated dispatch+emission as such. ClientCapabilities.extensions / ServerCapabilities.extensions — unasserted on both sides. structuredContent any-JSON-value widening incl. explicit null; inputSchema/outputSchema 2020-12 widening. prompts/list draft pagination/required-params scenario — none; per-method MRTR coverage of prompts/get (vs resources/read) unconfirmed. Roots draft behavior: no top-level roots/list on 2026-07-28 (embedded delivery); must not emit notifications/roots/list_changed on draft — none. Required-params/_meta materialization (PaginatedRequest half) — none identifiable. Subscriptions: resourceSubscriptions filter path; extension taskIds; removed-era-method -32601 — three gaps. MRTR-embedded sampling member payloads specifically — none. Tasks: zero scenarios (conformance issues #244/#261 unmerged) — family-wide gap. Known limitations Honest cost: only the 2025-03-26 delta is small. Three of the four transitions rewrite 50–90% of the surface, so the committed-source saving vs full per-revision packages is roughly 27–32% — and "read one revision as a single page" requires the oracle module (the flattened per-version view, shipped in tests/spec_oracles/) or an import-following editor. The genuine advantage is review-shape: the next small revision's delta module IS the reviewable change. The tasks extension (mcp/extensions/tasks/) is not built; its types remain provisional upstream. Session-layer halves are out of scope: method-table enforcement, the sampling-tools and elicitation-url capability gates, the per-request logLevel send condition (listed at src/mcp/types/wire.py:77-86). Caller-supplied identity at 2026-07-28 (see behavioral facts above) is designed; the session layer pre-seeds identity. Tooling asymmetry: the delta-split generator is not committed (the per-revision modules carry pathless provenance and are pinned to their schemas by tests/types/test_version_surfaces.py); the oracle generator is committed (scripts/update_spec_types.py). AI Disclaimer

Open Graph Description: Draft — not intended to merge as-is. This is one of three candidate implementations of multi-version protocol type support, pushed side by side so the approaches can be compared concretely. The com...

X Description: Draft — not intended to merge as-is. This is one of three candidate implementations of multi-version protocol type support, pushed side by side so the approaches can be compared concretely. The com...

Opengraph URL: https://github.com/modelcontextprotocol/python-sdk/pull/2845

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:cb5fd475-beb2-0a54-6d20-32f66d2ed3ae
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idDAB4:159FE3:CA5D3B:1233ED5:6A5A0199
html-safe-nonce5e729e5f1ebd8990a644eb0a816c805952c901fb5bb54c5121cfde08c966f54d
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEQUI0OjE1OUZFMzpDQTVEM0I6MTIzM0VENTo2QTVBMDE5OSIsInZpc2l0b3JfaWQiOiI4NjQ0NDkzMjcxMjg3NTk1NDE3IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmac7f690a8aab357b4224a4300714bb6734f27dc658828b4d03049eb5eaad0f5b3d
hovercard-subject-tagpull_request:3853699805
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/modelcontextprotocol/python-sdk/pull/2845/files
twitter:imagehttps://avatars.githubusercontent.com/u/224885523?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/224885523?s=400&v=4
og:image:altDraft — not intended to merge as-is. This is one of three candidate implementations of multi-version protocol type support, pushed side by side so the approaches can be compared concretely. The com...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None4d3f961cfc83a4348ee5be7691cf4ae3515aab3ef5200c13a7e41b048125fb61
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/modelcontextprotocol/python-sdk git https://github.com/modelcontextprotocol/python-sdk.git
octolytics-dimension-user_id182288589
octolytics-dimension-user_loginmodelcontextprotocol
octolytics-dimension-repository_id862584018
octolytics-dimension-repository_nwomodelcontextprotocol/python-sdk
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id862584018
octolytics-dimension-repository_network_root_nwomodelcontextprotocol/python-sdk
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
releaseac4d28603af300ac851b62521abb878ab5d3319a
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/modelcontextprotocol/python-sdk/pull/2845/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelcontextprotocol%2Fpython-sdk%2Fpull%2F2845%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelcontextprotocol%2Fpython-sdk%2Fpull%2F2845%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=modelcontextprotocol%2Fpython-sdk
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/2845/files
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/2845/files
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/2845/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2845/files
modelcontextprotocol https://github.com/modelcontextprotocol
python-sdkhttps://github.com/modelcontextprotocol/python-sdk
Notifications https://github.com/login?return_to=%2Fmodelcontextprotocol%2Fpython-sdk
Fork 3.7k https://github.com/login?return_to=%2Fmodelcontextprotocol%2Fpython-sdk
Star 23.6k https://github.com/login?return_to=%2Fmodelcontextprotocol%2Fpython-sdk
Code https://github.com/modelcontextprotocol/python-sdk
Issues 255 https://github.com/modelcontextprotocol/python-sdk/issues
Pull requests 303 https://github.com/modelcontextprotocol/python-sdk/pulls
Actions https://github.com/modelcontextprotocol/python-sdk/actions
Projects https://github.com/modelcontextprotocol/python-sdk/projects
Models https://github.com/modelcontextprotocol/python-sdk/models
Security and quality 6 https://github.com/modelcontextprotocol/python-sdk/security
Insights https://github.com/modelcontextprotocol/python-sdk/pulse
Code https://github.com/modelcontextprotocol/python-sdk
Issues https://github.com/modelcontextprotocol/python-sdk/issues
Pull requests https://github.com/modelcontextprotocol/python-sdk/pulls
Actions https://github.com/modelcontextprotocol/python-sdk/actions
Projects https://github.com/modelcontextprotocol/python-sdk/projects
Models https://github.com/modelcontextprotocol/python-sdk/models
Security and quality https://github.com/modelcontextprotocol/python-sdk/security
Insights https://github.com/modelcontextprotocol/python-sdk/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fmodelcontextprotocol%2Fpython-sdk%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fmodelcontextprotocol%2Fpython-sdk%2Fissues%2Fnew%2Fchoose
maxisbeyhttps://github.com/maxisbey
mainhttps://github.com/modelcontextprotocol/python-sdk/tree/main
maxisbey/types-version-delta-packageshttps://github.com/modelcontextprotocol/python-sdk/tree/maxisbey/types-version-delta-packages
Conversation 1 https://github.com/modelcontextprotocol/python-sdk/pull/2845
Commits 1 https://github.com/modelcontextprotocol/python-sdk/pull/2845/commits
Checks 30 https://github.com/modelcontextprotocol/python-sdk/pull/2845/checks
Files changed https://github.com/modelcontextprotocol/python-sdk/pull/2845/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2845/files
Multi-version protocol types: per-version delta packages (candidate 3/3) https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#top
Show all changes 1 commit https://github.com/modelcontextprotocol/python-sdk/pull/2845/files
e15d722 Add multi-version protocol types: per-version delta packages maxisbey Jun 12, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2845/commits/e15d722db9f79fbb177cce009260d9b715fddf04
Clear filters https://github.com/modelcontextprotocol/python-sdk/pull/2845/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2845/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2845/files
migration.md https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
pyproject.toml https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
update_spec_types.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-74fcf34f2af9ffca784ea9b48ab51162b37cdce352f8d3bf62503f2e70ed5287
version.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-cbd997f5b52f8757771f4257216d82d29862715947778ae776ec13385baf9184
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-9f1fb2e597d3bbb6f7b01cff7178a42325dec6460c16dfa74838da9a766efcf2
_spec_names.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-6704a23d14de4e7bbbc6b90bd4222df373affdd2a9a844610d0dcf8dbf18327a
_types.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-727bcd5cda4a440f63005368c3cbc5f6308f40630901166fd456039c52d3363e
_versions.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-15db83bb97f25f9335b931a74e3005b84e877b4eb2fae828977325b6a57166fa
_wire_base.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-47c8c384133afb34984467c87b77c013ad3ae333d623074bb2d13d1ed944f478
jsonrpc.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-bf630a0253b7e8c4d256296014e66e2f71e362ad890892d1bfbf94b3aebe132c
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-a3b4f248ebc57d9cb052939df0551b4443e7f22dba9a47836eb339333a64d064
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-08f5e2ef0d6db0f4895fe0aca9527669cc16ad76d5e2772c3b28af29ddaf6ffd
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-9c88edd293b30498670d5739de43322d95ff678656a926a0d4ef5e6ef7b7d97e
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-664f6745a57d1995c61cadbcace6ad0be0bf6a2b8755f4e976701fd7701d9d9a
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-bc291e2b116af91e569229d4961fcb6f40f8e814c481288cc1f178ff478f7f19
wire.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-a9010304771c1672381f48e5fc22751af9e56e9e9ea4acc67e2832ca9f505ef9
PINNED.json https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-859b54f32f48e92a9b9534c37df54a72a894217821c75e8ece2a54f0791fa91b
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-20dfeb7709f163b628d96500f59fff05f142de2ffba928771d32e06a09486c1c
_base.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-569f7dbc8058c1f7a84162da02e0077cf54c9104997862c7d873991c3731d9bf
_harness.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-bb401dd84aaccdaaedb92a4fea0626502f9aee24a27b964fb4599cace0d31606
burndown_allowlist.json https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-c10583f5f564633a46531f3d9431d8e1ca6cf28c7111904d9c5c7aafb6b7b49c
ext_tasks.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-e31f054ed929f453cc95751b5bd773aaa70efafa72b08d85558fe7edee229e6e
test_burndown.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-db717043741b5b61991ff18a985427f84751c6cdb7b3e76293c5a9b2c4418037
test_harness_internals.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-9a7635b07b3e453dacaa1d744e7b4d9b7abe43a0d8a3d346f7fb60be6fc6891f
test_oracles_smoke.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-6408250a0242183cb0a77a6325116699cb31b3b5562a9b6eba0a647dea11bf15
v2024_11_05.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-5b9dd0823cd8c72abe97e239768203a20c91caa5d43ecabb94624b0b7b203d24
v2025_03_26.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-f4deeb356ed3a7289644bfd28afc58b458f90084a117ef3f08bccd630ef36f8f
v2025_06_18.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-1b8832b2a6a0109ad4e79279e407be9ce803829a648ab9746124f5acaaf18d7d
v2025_11_25.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-c708c649f7813277b08315e50f327ca2bf5755558352e75f0f1a693ce816aec8
v2026_07_28.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-9fd729ce86d81d90eba4303453d79011b816c87c7f66999a8fc68ced926e5638
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-d1ef93a3632a79f8046b3af364c8d35204d82beb74fd4d603d965721e04950b1
test_import_budget.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-424c0a9c305d22ce71a930e735eaf409ac8d23cef83da4b90b98a1b44ff58439
test_public_surface.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-3479d3b7e16c393d3e50963e02d04b5cc7d0dff8db3aa0ff6c8265937cb58a56
test_spec_names.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-9d2a5331ba12c184ae3bb93a7cf1a7c478e7f21f6ffe82aa53f6a3dbf3a583f6
test_version_registry.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-ce987ba0af8d31778c7f8746d7fe05a5cdd96e280d2c4b70f0409c7012658393
test_version_surfaces.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-dd6f1fa04b5bfa962b6ae26b0d9883b5d00028ed232c61d6df0ce8a315f5c767
test_wire_boundary.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-bde1b90d3ee90a4b4c73ba8e89191f8b877924b2a577fb6cce95e1a09195eae4
test_wire_parse.py https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-5056b38dcc3d5c33f14262105cdffb23fe1ba5b73609edf0d85ef41c5efd2a1b
docs/migration.mdhttps://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
View file https://github.com/modelcontextprotocol/python-sdk/blob/e15d722db9f79fbb177cce009260d9b715fddf04/docs/migration.md
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/2845/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
pyproject.tomlhttps://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
View file https://github.com/modelcontextprotocol/python-sdk/blob/e15d722db9f79fbb177cce009260d9b715fddf04/pyproject.toml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/2845/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
https://github.com/modelcontextprotocol/python-sdk/pull/2845/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2845/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2845/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.