René's URL Explorer Experiment


Title: Two-surface protocol types: per-surface fact tables (candidate 2/2) by maxisbey · Pull Request #2850 · modelcontextprotocol/python-sdk · GitHub

Open Graph Title: Two-surface protocol types: per-surface fact tables (candidate 2/2) by maxisbey · Pull Request #2850 · modelcontextprotocol/python-sdk

X Title: Two-surface protocol types: per-surface fact tables (candidate 2/2) by maxisbey · Pull Request #2850 · modelcontextprotocol/python-sdk

Description: Draft — not intended to merge as-is. This is one of two candidate implementations of the same design, pushed side by side so the approaches can be compared concretely. The companion draft is #2849: identical public surface, identical wire behavior, differing only in how the per-surface knowledge is represented — declarative fact rows here, committed model packages in the companion. The pair supersedes the earlier per-version-factored drafts #2843, #2844, and #2845, which stay open for comparison. Once a direction is chosen, the selected approach would be re-cut as a reviewable PR series. The design Protocol types are organized as two wire surfaces plus one user-facing type set: mcp.types — the single public type set (the "monolith" throughout the source): one class per protocol construct, a superset covering every released protocol revision plus the upcoming 2026-07-28 revision. Existing names are unchanged; everything new is additive. A v2025_11_25 surface serving every released revision (2024-11-05 through 2025-11-25). The released schemas evolved strictly additively — each defines a subset of the newest one — and tests/types/test_version_facts_oracle.py proves that coverage field-by-field against generated oracles of all four schemas. A v2026_07_28 surface carrying strict typing for the upcoming revision. The wire boundary — mcp.types.wire.serialize_for(model, version) / parse_as(type, data, version) — is additive-only. Serializing dumps the model; on a 2026-07-28 session it additionally injects the fields that revision requires when the caller left them unset (resultType, the ttlMs/cacheScope don't-cache defaults, the reserved protocolVersion _meta entry) and validates strictly. Nothing is ever removed from a payload at any version: deployed peers ignore unknown fields, so a newer field flowing to an older peer is harmless, while silently deleting a caller's field never is. Parsing is one lenient superset parse at every version, plus the checks the 2026-07-28 revision mandates. This candidate: declarative fact rows The per-surface knowledge is data: src/mcp/types/_version_facts.py holds the per-version method tables plus two surface fact blocks of inject/refuse/mandate rows, applied by one small engine (src/mcp/types/_shaping.py) that carries no per-version knowledge of its own. The v2025_11_25 block is empty by design — emitting to a released-revision peer is the plain dump, by construction rather than by check — and the v2026_07_28 block carries the new revision's required-field injections, its emission refusals, and its inbound mandates. An oracle test pins the fact blocks against the generated schemas, including the additive-evolution claim that lets one empty block serve all four released revisions. Motivation and Context The SDK models one protocol revision at a time, but every session negotiates its own version, and the upcoming 2026-07-28 revision changes wire shapes materially: a required resultType on results, required reserved _meta entries on client requests, the initialize handshake and the server→client request channel removed in favor of server/discover and embedded input requests, resource subscriptions, and tasks continuing as an extension. One type set can carry all of that only if something version-aware sits at the wire boundary. Keying that boundary on two surfaces instead of five versions follows from a property of the released schemas: from 2024-11-05 to 2025-11-25 they only ever added, so one lenient surface serves all of them and only the upcoming revision needs strict treatment. How Has This Been Tested? Full suite passes at 100% line + branch coverage (./scripts/test); pyright in strict mode and ruff are clean. A 185-case wire-fixture corpus exercises serialization and parsing at every protocol revision, in both directions (client→server and server→client). tests/spec_oracles/ holds per-version schema oracles regenerated verbatim from the pinned public schemas; tests/types/test_version_facts_oracle.py pins the fact blocks against them, oracle by oracle. Breaking Changes None — additive only. Existing mcp.types names and shapes are unchanged (pinned by tests/types/test_public_surface.py), and mcp.types.wire is new API. 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 monolith: one class per protocol construct, every revision's fields, removed-construct sections marked in place. (src/mcp/types/jsonrpc.py is the version-independent envelope; src/mcp/types/_spec_names.py records the deliberate SDK↔schema naming divergences.) src/mcp/types/_version_facts.py — the mechanism: per-version method tables as literal frozensets, then the two surface fact blocks; the released-revisions block is empty on purpose, with the reasoning stated in the module docstring. src/mcp/types/_shaping.py — the one interpreter for the fact rows; fixed order refuse → dump → inject → required-_meta, with the parse mandates on the inbound side. src/mcp/types/wire.py — the public boundary: version registry, method-table re-exports, serialize_for / parse_as, and the two error types. tests/types/test_version_facts_oracle.py — pins the fact blocks against the generated schema oracles, including the proof that one surface covers all four released schemas. tests/types/test_wire_boundary.py and tests/types/test_wire_parse.py — emission and parse behavior across versions (alongside test_shaping_engine.py, test_unions.py, test_version_registry.py, test_public_surface.py, and test_import_budget.py). tests/spec_oracles/ — the generated per-version oracles and the burn-down comparison; regenerated by scripts/update_spec_types.py. Decision markers Source comments tagged OD-n / M-n flag open decisions at the line where they bite. They are records of considered alternatives, not TODOs, and are resolved before release. Index: OD-1 src/mcp/types/_types.py:1981 — structured_content ships as plain Any = None, vs a sentinel distinguishing wire-absent from explicit null. OD-2 src/mcp/types/_types.py:704 — types removed in 2026-07-28 stay in mcp.types in marked sections, vs moving to a lazily-aliased legacy module. OD-3 src/mcp/types/_types.py:1547 — the 2025-11-25 task types are kept for those sessions (their tasks/* methods stay out of the unions and method tables); the extension's own task types are not built. OD-5 src/mcp/types/_version_facts.py:376 — when a handler leaves the required caching fields unset on 2026-07-28 emission, the boundary injects the don't-cache pair (ttlMs=0, cacheScope="private"), vs requiring handlers to set both fields. OD-9 src/mcp/types/_types.py:1165 — one extra="allow" carve-out on SubscriptionFilter (extensions merge keys into it on the wire), vs a parse-side allow layer on every extension-carrying model. OD-11 src/mcp/types/wire.py:81 — no outbound narrowing when emitting to released revisions; pass-through chosen over stripping content a peer's revision predates. OD-13 src/mcp/types/_spec_names.py:67 — elicitation requestedSchema stays an untyped dict; the restricted-schema vocabulary is not modeled. M-2 src/mcp/types/jsonrpc.py:207 — JSONRPCError.id keeps the required-but-nullable shape; the 2025-11-25 schema reading that allows an absent id would give the field a None default. AI Disclaimer

Open Graph Description: Draft — not intended to merge as-is. This is one of two candidate implementations of the same design, pushed side by side so the approaches can be compared concretely. The companion draft is #2849:...

X Description: Draft — not intended to merge as-is. This is one of two candidate implementations of the same design, pushed side by side so the approaches can be compared concretely. The companion draft is #2849:...

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

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:55cf632e-3eb9-9b08-8317-5a7ca97ebc1c
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idEC60:1ABBFF:993B95:CE7B98:6A5938E0
html-safe-nonce5b331765a295a1b4affd0b349c9c79b9c600ec7691416cbf0c4bcf3c25bc52fb
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFQzYwOjFBQkJGRjo5OTNCOTU6Q0U3Qjk4OjZBNTkzOEUwIiwidmlzaXRvcl9pZCI6IjY1MzUxMzU0MzgwODg3ODAwMDAiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmac92aabe293bbff20e40c48dc30d8295e26fc18d76e183903d5732b800fedde62e
hovercard-subject-tagpull_request:3854651805
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/2850/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 two candidate implementations of the same design, pushed side by side so the approaches can be compared concretely. The companion draft is #2849:...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None1b31c9453e1607b2781513084b4770f67217e549834c85b76960d7b13626f7c8
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
release220f27779da5b92b5e17fcaef93e474cc8affba3
ui-targetcanary-2
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/modelcontextprotocol/python-sdk/pull/2850/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelcontextprotocol%2Fpython-sdk%2Fpull%2F2850%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%2F2850%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/2850/files
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/2850/files
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/2850/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2850/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 301 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-two-surface-fact-tableshttps://github.com/modelcontextprotocol/python-sdk/tree/maxisbey/types-two-surface-fact-tables
Conversation 1 https://github.com/modelcontextprotocol/python-sdk/pull/2850
Commits 1 https://github.com/modelcontextprotocol/python-sdk/pull/2850/commits
Checks 30 https://github.com/modelcontextprotocol/python-sdk/pull/2850/checks
Files changed https://github.com/modelcontextprotocol/python-sdk/pull/2850/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2850/files
Two-surface protocol types: per-surface fact tables (candidate 2/2) https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#top
Show all changes 1 commit https://github.com/modelcontextprotocol/python-sdk/pull/2850/files
08e9b33 Add multi-version protocol types: two wire-surface fact blocks maxisbey Jun 12, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2850/commits/08e9b336e143d6b975be9c404b51051208436a0b
Clear filters https://github.com/modelcontextprotocol/python-sdk/pull/2850/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2850/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2850/files
migration.md https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
pyproject.toml https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
update_spec_types.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-74fcf34f2af9ffca784ea9b48ab51162b37cdce352f8d3bf62503f2e70ed5287
version.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-cbd997f5b52f8757771f4257216d82d29862715947778ae776ec13385baf9184
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-9f1fb2e597d3bbb6f7b01cff7178a42325dec6460c16dfa74838da9a766efcf2
_shaping.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-a9c0f293ead14b8eeaad7085df18bec352d38afa6dd39edf4bcac9bc48586317
_spec_names.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-6704a23d14de4e7bbbc6b90bd4222df373affdd2a9a844610d0dcf8dbf18327a
_types.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-727bcd5cda4a440f63005368c3cbc5f6308f40630901166fd456039c52d3363e
_version_facts.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-dc1d526e82c2eef210c5e21df0febfbe53275063f20b3878af58bbbd195e72cf
jsonrpc.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-bf630a0253b7e8c4d256296014e66e2f71e362ad890892d1bfbf94b3aebe132c
wire.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-a9010304771c1672381f48e5fc22751af9e56e9e9ea4acc67e2832ca9f505ef9
PINNED.json https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-859b54f32f48e92a9b9534c37df54a72a894217821c75e8ece2a54f0791fa91b
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-20dfeb7709f163b628d96500f59fff05f142de2ffba928771d32e06a09486c1c
_base.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-569f7dbc8058c1f7a84162da02e0077cf54c9104997862c7d873991c3731d9bf
_harness.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-bb401dd84aaccdaaedb92a4fea0626502f9aee24a27b964fb4599cace0d31606
burndown_allowlist.json https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-c10583f5f564633a46531f3d9431d8e1ca6cf28c7111904d9c5c7aafb6b7b49c
ext_tasks.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-e31f054ed929f453cc95751b5bd773aaa70efafa72b08d85558fe7edee229e6e
test_burndown.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-db717043741b5b61991ff18a985427f84751c6cdb7b3e76293c5a9b2c4418037
test_oracles_smoke.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-6408250a0242183cb0a77a6325116699cb31b3b5562a9b6eba0a647dea11bf15
v2024_11_05.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-5b9dd0823cd8c72abe97e239768203a20c91caa5d43ecabb94624b0b7b203d24
v2025_03_26.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-f4deeb356ed3a7289644bfd28afc58b458f90084a117ef3f08bccd630ef36f8f
v2025_06_18.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-1b8832b2a6a0109ad4e79279e407be9ce803829a648ab9746124f5acaaf18d7d
v2025_11_25.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-c708c649f7813277b08315e50f327ca2bf5755558352e75f0f1a693ce816aec8
v2026_07_28.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-9fd729ce86d81d90eba4303453d79011b816c87c7f66999a8fc68ced926e5638
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-d1ef93a3632a79f8046b3af364c8d35204d82beb74fd4d603d965721e04950b1
test_import_budget.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-424c0a9c305d22ce71a930e735eaf409ac8d23cef83da4b90b98a1b44ff58439
test_public_surface.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-3479d3b7e16c393d3e50963e02d04b5cc7d0dff8db3aa0ff6c8265937cb58a56
test_shaping_engine.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-50d41b5223cc5b468951b2b07cd167efb80d4e416c1cf8b96d17d8b6f0c56501
test_spec_names.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-9d2a5331ba12c184ae3bb93a7cf1a7c478e7f21f6ffe82aa53f6a3dbf3a583f6
test_unions.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-32f4fbdfae5ca70b562b04d2f13ec4585e3774eaf1974763ac54e04fa17e0187
test_version_facts_oracle.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-83f7f45e383e962131bd56598800284a90ec74281db93d3a5e730273abc1412c
test_version_registry.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-ce987ba0af8d31778c7f8746d7fe05a5cdd96e280d2c4b70f0409c7012658393
test_wire_boundary.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-bde1b90d3ee90a4b4c73ba8e89191f8b877924b2a577fb6cce95e1a09195eae4
test_wire_parse.py https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-5056b38dcc3d5c33f14262105cdffb23fe1ba5b73609edf0d85ef41c5efd2a1b
docs/migration.mdhttps://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
View file https://github.com/modelcontextprotocol/python-sdk/blob/08e9b336e143d6b975be9c404b51051208436a0b/docs/migration.md
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/2850/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
pyproject.tomlhttps://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
View file https://github.com/modelcontextprotocol/python-sdk/blob/08e9b336e143d6b975be9c404b51051208436a0b/pyproject.toml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/2850/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
https://github.com/modelcontextprotocol/python-sdk/pull/2850/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2850/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2850/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.