René's URL Explorer Experiment


Title: Client-side 2026-07-28 support: .discover()/.adopt() + Client(mode=); request-metadata green by maxisbey · Pull Request #2950 · modelcontextprotocol/python-sdk · GitHub

Open Graph Title: Client-side 2026-07-28 support: .discover()/.adopt() + Client(mode=); request-metadata green by maxisbey · Pull Request #2950 · modelcontextprotocol/python-sdk

X Title: Client-side 2026-07-28 support: .discover()/.adopt() + Client(mode=); request-metadata green by maxisbey · Pull Request #2950 · modelcontextprotocol/python-sdk

Description: Client-side support for the 2026-07-28 per-request-envelope path: ClientSession gains .discover() and .adopt() alongside .initialize(); Client gains mode='legacy'|'auto'| and prior_discover=. Removes request-metadata and auth/authorization-server-migration from the conformance baseline, plus the carried-forward tools_call/auth/scope-step-up/auth/scope-retry-limit entries from the 2026-07-28 baseline. Part of #2891. Touches #2894, #2892, #2900. Motivation and Context #2928 landed the server side of the 2026-07-28 era split. This PR is the client side: the era difference becomes which outbound-stamping closure was installed at connect time, not a flag the send path reads. ClientSession previously branched on a _stateless_pinned flag inside send_request and held the protocol version in four places (session pin, init result, transport, OAuth context); the transport sniffed InitializeResult responses to learn the version for header setting. What changed ClientSession — three connect-time entry points install a stamp closure. .initialize() (existing) terminates by calling .adopt(result). .adopt(InitializeResult | DiscoverResult) installs negotiated state without wire traffic. A DiscoverResult selects the newest mutually-supported modern version and installs the modern stamp; an InitializeResult installs the handshake stamp. .discover() probes server/discover, validates the response with DiscoverResult.model_validate before reading any field, and .adopt()s on success. On -32022 it retries once with the intersection of MODERN_PROTOCOL_VERSIONS and data.supported; on -32601 or request timeout it falls back to .initialize(); anything else propagates. send_request and send_notification call self._stamp(data, opts) unconditionally — no era branch in the body. The _stateless_pinned flag, _pinned_version slot, and the ClientSession(protocol_version=) constructor kwarg are removed. Client — policy layer. New mode: Literal['legacy','auto'] | str = 'legacy' and prior_discover: DiscoverResult | None = None. Client.__aenter__ builds the session, then: 'legacy' → .initialize(); 'auto' → .discover(); a version string → .adopt(prior_discover or synthesize(pv)). Client(protocol_version=) is removed. Transport pv-agnostic. StreamableHTTPTransport no longer holds protocol_version, no longer derives Mcp-Method/Mcp-Name headers, and no longer sniffs InitializeResult responses. Per-message headers arrive via CallOptions['headers'] → ClientMessageMetadata.headers → merged at the POST. The transport caches MCP-Protocol-Version from the first stamped POST for transport-internal GET/DELETE/reconnect (per-connection state, same pattern as session_id). In-process modern path. New modern_on_request(server, lifespan_state) driver in runner.py returns an OnRequest callback that builds Connection.from_envelope per call and drives serve_one. Client(Server | MCPServer, mode != 'legacy') enters the lifespan once, creates a DirectDispatcher peer-pair, and runs the server side with this callback. The interaction suite's in-memory transport is unlocked for 2026-07-28 (71 tests now run on that arm). Version constants. SUPPORTED_PROTOCOL_VERSIONS renamed to HANDSHAKE_PROTOCOL_VERSIONS (the versions reachable via the initialize handshake); the old name survives as a deprecated union. LATEST_PROTOCOL_VERSION bumped to "2026-07-28". The three duplicate mcp-protocol-version header constant definitions collapsed to one in shared/inbound. report_progress routes through DispatchContext.progress(). Context.report_progress was gating on a JSONRPC-specific _meta.progressToken and reimplementing the notification path; it now delegates to ServerSession.report_progress → dctx.progress(), so progress reaches the client on the in-process modern path too. Conformance fixture. .github/actions/conformance/client.py reads MCP_CONFORMANCE_PROTOCOL_VERSION and drives Client(mode='auto') for the modern leg, 'legacy' otherwise. New handlers for request-metadata and http-standard-headers. How Has This Been Tested? Conformance: request-metadata 7/7, auth/authorization-server-migration 27/27, http-standard-headers 3/3 on both legs; tools_call/auth/scope-step-up/auth/scope-retry-limit pass on the 2026-07-28 leg ./scripts/test: 100% branch coverage, strict-no-cover clean 9 unit tests cover each .discover() ladder rung; 10 interaction tests in test_client_connect.py cover the mode= policy and envelope stamping end to end In-memory@2026-07-28: 71 interaction tests run, 67 pass (4 progress-on-streamable-http xfails remain scoped to that transport) Breaking Changes All documented in docs/migration.md: ClientSession(protocol_version=) removed → use .adopt() after construction Client(protocol_version=) removed → use mode= StreamableHTTPTransport.protocol_version and streamable_http_client(protocol_version=) removed SUPPORTED_PROTOCOL_VERSIONS deprecated → use HANDSHAKE_PROTOCOL_VERSIONS or MODERN_PROTOCOL_VERSIONS LATEST_PROTOCOL_VERSION value changed "2025-11-25" → "2026-07-28"; code that meant "the version .initialize() offers" should switch to HANDSHAKE_PROTOCOL_VERSIONS[-1] Client.send_progress_notification / ClientSession.send_progress_notification deprecated (client-to-server progress is server-to-client only at 2026-07-28) Outbound.notify Protocol grew an opts: CallOptions | None = None parameter ServerMessageMetadata.protocol_version removed (no readers) Types of changes 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 The three stamp closures: _preconnect_stamp (cancel-suppressed only — only initialize/discover go out before connect, both forbid cancel), _make_handshake_stamp(pv) (sets the MCP-Protocol-Version header), _make_modern_stamp(pv, info, caps) (the _meta triple + cancel_on_abandon=False + all three routing headers). __init__ installs the first; .initialize()/.adopt()/.discover() install one of the other two. The in-process modern path reuses the existing DirectDispatcher peer-pair (no new dispatcher class) — the era-specific bit is the modern_on_request callback wired into the server side, mirroring how ServerRunner.on_request is wired in for the legacy path. http-custom-headers and http-invalid-tool-headers (the Mcp-Param-* header scenarios) and sep-2322-client-request-state (multi-round-trip results) stay waived — separate work. AI Disclaimer

Open Graph Description: Client-side support for the 2026-07-28 per-request-envelope path: ClientSession gains .discover() and .adopt() alongside .initialize(); Client gains mode='legacy'|'auto'|<version...

X Description: Client-side support for the 2026-07-28 per-request-envelope path: ClientSession gains .discover() and .adopt() alongside .initialize(); Client gains mode=&#39;legacy&#39;|&#39;auto&...

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

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:797bd5c6-861a-171a-8f92-8b57505bf57e
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-id8484:73BB9:538FCA:766A43:6A59DFC5
html-safe-nonce9287b758e34d6a990a672cba88febea9970693233b64df8b8c4be56e6c007c9a
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4NDg0OjczQkI5OjUzOEZDQTo3NjZBNDM6NkE1OURGQzUiLCJ2aXNpdG9yX2lkIjoiMjE0MTgzNTQxOTg5NzY4MzkwOSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac24f13fe88b4240353b9c1f5d1ff38644ecfded073cee05cf12348091698d69bf
hovercard-subject-tagpull_request:3914063052
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/2950/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:altClient-side support for the 2026-07-28 per-request-envelope path: ClientSession gains .discover() and .adopt() alongside .initialize(); Client gains mode='legacy'|'auto'|<version...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Noneba3976babb66479b1c943a8edc0777d96157da48fadc0161f9ddb219deee8353
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
release26f17126414f953984d8ae42f57c0db48e7dbde3
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/modelcontextprotocol/python-sdk/pull/2950/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelcontextprotocol%2Fpython-sdk%2Fpull%2F2950%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%2F2950%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/2950/files
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/2950/files
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/2950/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2950/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
s3-client-modern-pathhttps://github.com/modelcontextprotocol/python-sdk/tree/s3-client-modern-path
Conversation 80 https://github.com/modelcontextprotocol/python-sdk/pull/2950
Commits 22 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits
Checks 32 https://github.com/modelcontextprotocol/python-sdk/pull/2950/checks
Files changed https://github.com/modelcontextprotocol/python-sdk/pull/2950/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2950/files
Client-side 2026-07-28 support: .discover()/.adopt() + Client(mode=); request-metadata green https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#top
Show all changes 22 commits https://github.com/modelcontextprotocol/python-sdk/pull/2950/files
cb9e260 Rename SUPPORTED_PROTOCOL_VERSIONS to HANDSHAKE_PROTOCOL_VERSIONS; co… maxisbey Jun 22, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/cb9e2605cf7615bd695009e41f6059ce2ddfba6c
e0990bf Thread per-message headers from session to transport via CallOptions/… maxisbey Jun 22, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/e0990bff2f3b2b4cd2c064b38e04f9c4e5850ff8
52546fa ClientSession: install per-request stamp at connect time; transport b… maxisbey Jun 22, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/52546fa1b7f43512790818b61e808d6c95980242
1d33743 Client gains mode= and prior_discover= policy knobs (legacy and versi… maxisbey Jun 22, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/1d33743e3636f3fabb347f421e6fc06bffecf2cf
1fbd075 ClientSession.discover() with the error ladder; Client mode='auto' maxisbey Jun 22, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/1fbd0758e67b1323a0b6085f8032e8901ad11eeb
46c0742 modern_on_request driver + Client in-process modern path via DirectDi… maxisbey Jun 22, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/46c0742010ed7d97be856de48349171ccfa3012c
dcbe6e8 Sweep: route report_progress through DispatchContext.progress; bump L… maxisbey Jun 22, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/dcbe6e8fb6d442e5d44b5420c9327bf7e635c9e5
a97459d Add lifecycle:envelope/discover/mode requirement entries and interact… maxisbey Jun 22, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/a97459d916413bf21fd8e63a7f65f1ffdd0f4c6a
52f200b Conformance client fixture: drive Client(mode='auto') for the modern leg maxisbey Jun 22, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/52f200b13266d24d9e03648ab56b677091cf7784
b6be755 Transport: pre-session 404 maps to METHOD_NOT_FOUND; POSTs never read… maxisbey Jun 23, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/b6be755548a0d96d0d9008e1879d6bb0d8006b3b
a82042a discover() returns DiscoverResult; fallback ladder moves to Client; e… maxisbey Jun 23, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/a82042a37805cab6ab6e86fbe0f0c4bd9aaaf07c
cdfdfd1 migration.md: drop v2-only churn entries; document ctx.report_progres… maxisbey Jun 23, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/cdfdfd11c72243cbde4c8c163a90f46a75864368
b326347 Add named protocol-version scalars and replace tuple indexing maxisbey Jun 23, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/b3263478ba24fe5971bbad2c0ee13d2fd0e03ee0
bdcdeb0 serve_one returns dict; Client accessor and re-entry guard fixes maxisbey Jun 23, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/bdcdeb008538d665925ebceaa60d6cb0b7925989
78823d4 Move to_jsonrpc_response to the HTTP entry; tighten migration.md and … maxisbey Jun 23, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/78823d48c932e8257045f5a2f4fce619a84cec7c
f9a15e1 Client: collapse _inproc_server/_transport into a single _connect clo… maxisbey Jun 23, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/f9a15e15fa16620adba93a89419fe8397b4a3a8c
91c0224 Retag dispatcher-hook TODO with its ledger anchor maxisbey Jun 25, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/91c0224b2ea1487035303c28132403b6c06e0e84
eab740b Restore pv header on dispatcher-written POSTs; widen auto-mode probe … maxisbey Jun 25, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/eab740b91eb3080a75b7b871d334da2c7c7c1d51
a7d1275 Add negotiate_auto: denylist probe classifier for mode='auto' maxisbey Jun 25, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/a7d1275f0a187019d240171dacc76fdf838b62db
2d12b96 Flip Client default mode to 'auto' maxisbey Jun 25, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/2d12b96b4d9eee482ffd09c1c3ac111af1821602
20a564e DirectDispatcher: resync coverage tracer after each request maxisbey Jun 25, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/20a564eee5b040e24e8f9e29db95175c1111cc63
0bb9ee7 Build send_discover params via DiscoverRequest; gate preconnect cance… maxisbey Jun 25, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/2950/commits/0bb9ee772bb23bdca2c2e95537694ab6227cb988
Clear filters https://github.com/modelcontextprotocol/python-sdk/pull/2950/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2950/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2950/files
client.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
expected-failures.2026-07-28.yml https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-a8ea36ef04436cd253292c3fbbe06e88795d93362fba66a5919cc6793c5f2aef
expected-failures.yml https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-9554cfe66b53ce3771454545473fbd08be68a3c6ecdd0f837273a3e41e6b67d7
migration.md https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-758ba107a728fccfdf0d098b2c06ded59127dd53ea287d630f72fb51040bc72d
testing.md https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-c22885d97fa21ad974a3f5f982d92b6f45edc251fd34bc14223492ebd7391245
pyproject.toml https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
_probe.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-59dc4b81d661c03b7619227f60a2d202e7b8bc873cf4a14e7dbd1fdfcd03b501
oauth2.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-b7aaf2062da175cea9a532176d6eb78b659eaadb757cc48929f0bafccfdb8d98
utils.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-1aed3def34492fb7eafa6e7aee6e9cc9973171b28c9574dc5c5b288a09878996
client.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-34e945ebc2fea8a427b8d0c45ccd28eb4e4cceb33c82048bd7998e6bb2f754f3
session.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-634d1abcb8bda1a784f31e3431a10124e387f487dd243a54244515b4972aa0ee
streamable_http.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-e8c18a3067a9b157c5c39a947f53d395afeb00e7026dad2d5a279011da943b5e
_streamable_http_modern.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-c5e06136c127a1503b8eab18375355c38ceb7e71b5a1c04b36ebf2fbc3d9067d
routes.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-6dfb076f1d9772b9a78be06b88bbbae0f92a0108284fcf247f342cd1a88433f2
connection.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-849ab2b2ff6c99a29f2b9dcdc9edc4139ffa7d091cdf45f05fbfc7cb998b03d1
context.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-b8a980ea2822cbd7a2f938f77b794ef9df6724acb5d637fdf87c0ad2bfe2db1a
runner.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-7a9c3e13faa5730f5a8a60062e9d200513c0baeada63e3cc24b37fe68e086e90
session.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-9a603a2587011a188aa76ca19a32fcd343a253516325fbcfb4f7bfb6a814634c
streamable_http.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-0119e4c1bbf2fde7ba89b9c9f5bc472ccc2332f84e96e47cf9e45cebef801da3
streamable_http_manager.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-1071ee05567116cb77322c376307b9071c6212871068ccf41911fc337ed473af
context.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-39333468a87a8b7df9e7916239f97203647716e5465b846328ec277e179c7ceb
direct_dispatcher.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-6566b073a8d9286a5b17e0bb02d6e12e822eaedf2236c0d637dcd57992268076
dispatcher.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-13274512d72e2a34a599019a9226619b150fca24130936cee3dc7d5122934673
inbound.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-aff932577e28e8bde4cd526480a1514700ef52c1b37cb993f27c297813efa86f
jsonrpc_dispatcher.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-3d8fb73fa8b126691302c15bb63bbc44a3a0e9338a17f14b3b4ea1d97bb10c2c
message.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-e87607af2a5ca4eeaf91e471c711340e954899e1504ebb1fcc981afe4639bc70
peer.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-7516fc8e5003b3509266f53789ae4f7873bf19b8ecda78e5ce81ecac9401bf74
version.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-cbd997f5b52f8757771f4257216d82d29862715947778ae776ec13385baf9184
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-9f1fb2e597d3bbb6f7b01cff7178a42325dec6460c16dfa74838da9a766efcf2
_types.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-727bcd5cda4a440f63005368c3cbc5f6308f40630901166fd456039c52d3363e
test_client.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-f91d7d1bfecb41d80a4cc73133b82560b7284a2af2d6630c49b983ca9366ea13
test_list_methods_cursor.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-abcde01e384b945f178e7410d8adbea613035debbc8b23a1ea3b742eb3dcb282
test_list_roots_callback.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-90b39d804728390ef9eab471f7f9877b35f83c44d63b99a1ea9653f6d5e11ee9
test_logging_callback.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-e2c00711f742606cdec4058b3f6121def7c09f5d3e74d16e2a6ba26bba1c91f5
test_notification_response.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-8c7bb1142c1c9cb43b4d2e7bf265054daca89ba175deec8b690f00464c00c182
test_probe.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-088586c579bbead2ed30c7da4a7c5523c167863b134102eb2ced4d3b67c7d86a
test_sampling_callback.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-2644de1d5107de80cb62cb010cb87b5858288fdd961806d4abdbc822f1d30540
test_session.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-623490a9c2dd576cc59e89f8d51f64acfffdeaad940e0bd4a0a51a50bc30d92d
test_session_concurrency.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-dcd16b274ced024cd0d253cd86a1a4c8042327b1b0f150227e73811bdc22c844
test_streamable_http.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-09ecebf3cb1cb198a43bd3159ecf388a4dfdc38f93c9812b671f40fc2c83ec29
test_memory.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-6ae3f0a1371508074d5761d7a67a876ffe72c027c2fd0c3352f009ad902da950
_connect.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-6ed9301844e916542b4f858e556d9e255de8891db09e51b737f5dd1238c50b9d
_requirements.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-c12ce54cbf13a11daa3f93343e5df8c89ca2b25d0f20f00b5408a2402a223228
_harness.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-4ac9813efeab1673bfd09096e1374c2d00a185f7948b812eefeb565db6c23247
test_flow.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-2a572c9bff06790dc0655966553e6d8cc41877f4dacaf5f561bb04bf0f91ad61
conftest.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-b61a049ecf6fc6396e71d1810e6a19663ca307f1e8cfbd1783ae95496d327863
test_client_connect.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-3a887d54ca83d9ef12ffdb0b58a494e9a7c44167381cb3efb59c3176ea663e42
test_completion.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-bf0c284b273d3bb39c7ad04eeecc944fe65dcad178203eaa686d4d295803f5b2
test_initialize.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-019874eb5b0b14b2e3447be2be76b480e12f77f71af8e1be534bec187e0e0852
test_ping.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-15c2ed4498804ea5d1dfa7d35b59f22cc2f3e470fb38bda72a657d9cb68e893d
test_progress.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-adbb27a971d4f833b1e7bcadb8054ba7fda245e02e6e49b0aacbeaec620e205a
test_timeouts.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-72f06b25a7e212f804121ef810f403578c4acd67b76b86ccda04618012a9930d
test_wire.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-163576971f36a4e8babc1808a586ab93dc81945e27aad2f238bd5b77fa441ac5
test_completion.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-b2a3c3e100d7439f4c5b30460f7f9cac4198c738e1345f86c129ad99b0388182
test_context.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-b5f7f25d66f0bed98387a6b630791fe45686eca3ae623b16d89da8a4d01b471e
test_coverage.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-b60708448fb1fbd8bdc0fa50e9ae954833dcfdc17e67bb0ff9d544492b554c64
test_client_transport_http.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-adf5fa9c30305bc38e4d3bbf40b5d2a78c31d08471735f586b79c54e6c19813a
test_hosting_http_modern.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-122f8dfa74b6aa90e3cea5c8da3a5bf7829d8ea82e66caf2ab88c0e107858914
test_hosting_resume.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-85f9daa9bed5aaa4f0692a68b218329bd1d04c2bc0d72d270799730e3e7dfa22
test_legacy_wire.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-a4ea4ba5015e2bfa093bdc62b0bfb44f841d094f84ca23dca89eb81390d9c395
test_sse.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-b6e24975d18a40d61bf597c4517ff67abf1495842a7e1231c8e351e918d76bc8
test_stdio.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-e87dd7470dc7d367b9901aacfcc577a54864d05e8e50b4b9a25c6d1bfc543fb5
test_streamable_http.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-e1892a1b798bbf5427ad12171841966db1086dcbbbd3f6c12b4bcd76405530c7
test_176_progress_token.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-efaa25bf0efec6c430b4f55170db0919caf81ed30266b026bad9993dc484aecd
test_192_request_id.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-544adf255ae3b6d59c63912723666f0e5cd700e1c1a1cc5009a74133332cd83e
test_552_windows_hang.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-75f0c3f56e683e126a1427b31c4c5c2745e19a517433a65dbda20eff519564f4
test_elicitation.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-6cf9570e46bbc0eb2485392dfaa05780418f6295efc86d9f79bf047584880d54
test_integration.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-06853ee92cf7e60bc876d235eb6b3a0ec88c2719e5af44e0a46fb6b71c9ab3e2
test_server.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-c191383f010475fc22bf69d35f14f16d7e45098b05a1a0f03ad66d6c151d1f34
test_title.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-6c5353cc9f22206e5e538a60d2cb711d77c3c31fa2f0e8e888a7dd5ddf6b1c41
test_url_elicitation.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-c35abe7dd7e0015dc6b664d3c8c70f67445f06594578915db32ab0d594df50cb
test_cancel_handling.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-c1f187f0c3cd17c4a86593f3fd13298817256f3be47c48065168959055ad0753
test_completion_with_context.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-7b9f06a84b3dc75676e1efff318066a211e3e0210ba14abd37626d431c400d43
test_connection.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-c85f47c7fa25e0dccd832e8de25b14888b28b4c4d65ca623c7fbffa5ed112d68
test_runner.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-51ad0fc280fc0fb1ed6039b7c5a26a6fafba8d8ffc8533cfa89cb9df18ea3f10
test_session.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-ed22c8fef52dc8c1d840dc0825bc375c48b67dcc2b468bab084aded3af06fdcf
test_stateless_mode.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-9a5f67580e8993a1074a9b3a4ce460932af7f64bfac3c0ed94b56c842ef99101
test_streamable_http_manager.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-ee0bac8ccf39135f1347002539cc4af38ee7e89b85595884e94fb4ab304a111d
test_streamable_http_modern.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-1e3c8aa3513b03c2ac6b7534d2b3a45dcbf59ef32f158028e9cc2fff0760893f
test_inbound.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-dc61ed941aed9d8fc148f5bb36ee60a1a12c9a308fa5cd5dcbaabcbf9de6c934
test_jsonrpc_dispatcher.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-ce6a750fbce4c4bfa60b1845cdd92c08be0c2ed1fdcecdcb2a2efa24170efabd
test_otel.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-84f003b56f0cb53b4aa8d9c9b77caceba5fdebd6874448f02410dffb0815cbaa
test_peer.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-4a0f459cebe082a1548305dfc7e0392930c36ef29665ca62e9ba87051931d22b
test_version.py https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-d1aedee216e160300cab29a3c74113f7ecbabdf4f85af4920bd2a7dd1008fb13
.github/actions/conformance/client.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
View file https://github.com/modelcontextprotocol/python-sdk/blob/0bb9ee772bb23bdca2c2e95537694ab6227cb988/.github/actions/conformance/client.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/2950/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-823c6bf6584b99e84ad74327720949300eb016f0efd6497c143dbd56307b058f
.github/actions/conformance/expected-failures.2026-07-28.ymlhttps://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-a8ea36ef04436cd253292c3fbbe06e88795d93362fba66a5919cc6793c5f2aef
View file https://github.com/modelcontextprotocol/python-sdk/blob/0bb9ee772bb23bdca2c2e95537694ab6227cb988/.github/actions/conformance/expected-failures.2026-07-28.yml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/2950/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-a8ea36ef04436cd253292c3fbbe06e88795d93362fba66a5919cc6793c5f2aef
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-a8ea36ef04436cd253292c3fbbe06e88795d93362fba66a5919cc6793c5f2aef
.github/actions/conformance/expected-failures.ymlhttps://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-9554cfe66b53ce3771454545473fbd08be68a3c6ecdd0f837273a3e41e6b67d7
View file https://github.com/modelcontextprotocol/python-sdk/blob/0bb9ee772bb23bdca2c2e95537694ab6227cb988/.github/actions/conformance/expected-failures.yml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/2950/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-9554cfe66b53ce3771454545473fbd08be68a3c6ecdd0f837273a3e41e6b67d7
https://github.com/modelcontextprotocol/python-sdk/pull/2950/files#diff-9554cfe66b53ce3771454545473fbd08be68a3c6ecdd0f837273a3e41e6b67d7
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2950/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/2950/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.