René's URL Explorer Experiment


Title: Fix #201: Move incoming message stream from BaseSession to ServerSession by dsp-ant · Pull Request #325 · modelcontextprotocol/python-sdk · GitHub

Open Graph Title: Fix #201: Move incoming message stream from BaseSession to ServerSession by dsp-ant · Pull Request #325 · modelcontextprotocol/python-sdk

X Title: Fix #201: Move incoming message stream from BaseSession to ServerSession by dsp-ant · Pull Request #325 · modelcontextprotocol/python-sdk

Description: This PR fixes a nasty but in the way we handle incoming messages, which currently leads to hanging connections when the clients sends notifications. The observed issue is as follows: A user creates a ClientSession and connects to a server. Server sends messages such as logging events. Upon then next request from the client, the client await hangs. When I looked into this, I suspected that this must be some channel issues. We use in memory channels to handle messages and it has historically caused issues. In particular, we use channels with a max_lenght of 0, effectively making them non buffered. This is one, if not the only part of the codebase that can block as observed. So I looked into the two parts where we use channels, once for read and write stream from the sse/stdio implementation to the ClientSession and then within the shared BaseSession class to handle messages separately in the server and client session. I first changed in client/stdio.py the lines: read_stream_writer, read_stream = anyio.create_memory_object_stream(0) write_stream, write_stream_reader = anyio.create_memory_object_stream(0) to read_stream_writer, read_stream = anyio.create_memory_object_stream(math.inf) write_stream, write_stream_reader = anyio.create_memory_object_stream(math.inf) and tested again. This fixed the bug! However clearly we are now in bounded memory stream territory which we cannot do without growing buffers in memory linearly. I tested da bit more and boiled it down to read_stream_writer, read_stream = anyio.create_memory_object_stream(math.inf) fixing the issue. So we know something is funky in the read stream. I looked into @sheffler's issue #201 and PR #202 and confirmed that removing in src/mcp/shared/session.py await self._incoming_message_stream_writer.send( notification ) will fix the probelm as well. So what does it tell us? It tells us that is that await self._incoming_message_stream_writer is blocking. Which in turn tells us that nobody ever reads from self._incoming_message_stream_reader. So where is self._incoming_message_stream_reader used? In BaseSession.incoming_messages. Now we have theory: incoming_messages is used to read incoming messages on the server. But it's in the BaseSession, so it means the client also offers it. Most clients don't read client.incoming_messages. IF clients don't read client.incoming_messages, the unbuffered stream never empties and once one object is placed, the next write will block. Now that we have the culprit we can figure out what to do. In my mind the probelm happens because we can't guarantee a consumer of incoming messages, however some implementations might want it. Similarly on the server side, incoming_messages is always used, since ServerSession is used inside Server. Okay so the goal was then to: Make consumption of incoming messages optionally for clients Make consumption of incoming message required for servers. So on the server side incoming_messages is fine, but the client needs a way to react if the developer is interested in. This means the approach of providing it via incoming_messages doesnt work. After thinking of ways to automatically drain, I came up what I think is best: The client offers a callback for all messages. This fits into the client interface using callbacks already. The server continues to expose incoming_messages. The BaseSession offers an abstraction for ClientSession and ServerSession to observe events from the _receive_loop but determine what to do by themselve.

Open Graph Description: This PR fixes a nasty but in the way we handle incoming messages, which currently leads to hanging connections when the clients sends notifications. The observed issue is as follows: A user create...

X Description: This PR fixes a nasty but in the way we handle incoming messages, which currently leads to hanging connections when the clients sends notifications. The observed issue is as follows: A user create...

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

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:cb6bc38d-9523-bf22-b56e-628433b60f0e
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idE7D2:1CE497:B3C2B7:EF1FE3:6A5BBB1A
html-safe-nonce7dcc63267495599780564d04501ddc476fb1032e77736110517a97de206a3c00
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFN0QyOjFDRTQ5NzpCM0MyQjc6RUYxRkUzOjZBNUJCQjFBIiwidmlzaXRvcl9pZCI6IjY5MTU2MTAyNjEzNzU5MjUwMTgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmac13ce3a21f8cf238d2653f5b57a6ef87b0a14c85e61f967a259549c7f8bc91d8a
hovercard-subject-tagpull_request:2405154897
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/325/files
twitter:imagehttps://avatars.githubusercontent.com/u/167242713?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/167242713?s=400&v=4
og:image:altThis PR fixes a nasty but in the way we handle incoming messages, which currently leads to hanging connections when the clients sends notifications. The observed issue is as follows: A user create...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None5290d7e14309ad1e76106a9c4237bd1041517e83ea182c8ab756752cb0c6940b
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
release9c975978430e9ad293956f2bbdaf153b1bd84a99
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/modelcontextprotocol/python-sdk/pull/325/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelcontextprotocol%2Fpython-sdk%2Fpull%2F325%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%2F325%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/325/files
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/325/files
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/325/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/325/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 259 https://github.com/modelcontextprotocol/python-sdk/issues
Pull requests 306 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
dsp-anthttps://github.com/dsp-ant
mainhttps://github.com/modelcontextprotocol/python-sdk/tree/main
fix/201https://github.com/modelcontextprotocol/python-sdk/tree/fix/201
Conversation 9 https://github.com/modelcontextprotocol/python-sdk/pull/325
Commits 3 https://github.com/modelcontextprotocol/python-sdk/pull/325/commits
Checks 0 https://github.com/modelcontextprotocol/python-sdk/pull/325/checks
Files changed https://github.com/modelcontextprotocol/python-sdk/pull/325/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/325/files
Fix #201: Move incoming message stream from BaseSession to ServerSession https://github.com/modelcontextprotocol/python-sdk/pull/325/files#top
Show all changes 3 commits https://github.com/modelcontextprotocol/python-sdk/pull/325/files
85514b4 Move incoming message stream from BaseSession to ServerSession dsp-ant Mar 19, 2025 https://github.com/modelcontextprotocol/python-sdk/pull/325/commits/85514b44d74392ba91091d2fe5a5fd868dffca9a
4e0de00 Handle message callbacks in ClientSession dsp-ant Mar 19, 2025 https://github.com/modelcontextprotocol/python-sdk/pull/325/commits/4e0de002624a4e12dc1c99220bf5d5f7139a06ee
abfbfe6 Merge branch 'main' into fix/201 dsp-ant Mar 20, 2025 https://github.com/modelcontextprotocol/python-sdk/pull/325/commits/abfbfe6c812bf701a6f392144692e8bbe8f56d60
Clear filters https://github.com/modelcontextprotocol/python-sdk/pull/325/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/325/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/325/files
__main__.py https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-acedd8b44e9fb1a288cc95191fc773e99af0b75edaa11c78295dad3147cb7eea
session.py https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-634d1abcb8bda1a784f31e3431a10124e387f487dd243a54244515b4972aa0ee
session.py https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-9a603a2587011a188aa76ca19a32fcd343a253516325fbcfb4f7bfb6a814634c
memory.py https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-fda62e83f7fbe11b6291a8eb980526a6465853fcc15dba2269425cd3de0801dc
session.py https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-aaa1596dd4db91f5cd7f743c8afbe58596daf01a2ecec4a0024768f7409fb1dc
test_logging_callback.py https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-e2c00711f742606cdec4058b3f6121def7c09f5d3e74d16e2a6ba26bba1c91f5
test_session.py https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-623490a9c2dd576cc59e89f8d51f64acfffdeaad940e0bd4a0a51a50bc30d92d
test_88_random_error.py https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-4e8132257776907428bdfd1d3671faed7b41a6347402e65f630f3a27a290edf5
test_session.py https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-ed22c8fef52dc8c1d840dc0825bc375c48b67dcc2b468bab084aded3af06fdcf
src/mcp/client/__main__.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-acedd8b44e9fb1a288cc95191fc773e99af0b75edaa11c78295dad3147cb7eea
View file https://github.com/modelcontextprotocol/python-sdk/blob/abfbfe6c812bf701a6f392144692e8bbe8f56d60/src/mcp/client/__main__.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/325/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-acedd8b44e9fb1a288cc95191fc773e99af0b75edaa11c78295dad3147cb7eea
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-acedd8b44e9fb1a288cc95191fc773e99af0b75edaa11c78295dad3147cb7eea
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-acedd8b44e9fb1a288cc95191fc773e99af0b75edaa11c78295dad3147cb7eea
src/mcp/client/session.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-634d1abcb8bda1a784f31e3431a10124e387f487dd243a54244515b4972aa0ee
View file https://github.com/modelcontextprotocol/python-sdk/blob/abfbfe6c812bf701a6f392144692e8bbe8f56d60/src/mcp/client/session.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/325/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-634d1abcb8bda1a784f31e3431a10124e387f487dd243a54244515b4972aa0ee
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-634d1abcb8bda1a784f31e3431a10124e387f487dd243a54244515b4972aa0ee
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-634d1abcb8bda1a784f31e3431a10124e387f487dd243a54244515b4972aa0ee
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-634d1abcb8bda1a784f31e3431a10124e387f487dd243a54244515b4972aa0ee
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-634d1abcb8bda1a784f31e3431a10124e387f487dd243a54244515b4972aa0ee
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-634d1abcb8bda1a784f31e3431a10124e387f487dd243a54244515b4972aa0ee
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-634d1abcb8bda1a784f31e3431a10124e387f487dd243a54244515b4972aa0ee
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-634d1abcb8bda1a784f31e3431a10124e387f487dd243a54244515b4972aa0ee
src/mcp/server/session.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-9a603a2587011a188aa76ca19a32fcd343a253516325fbcfb4f7bfb6a814634c
View file https://github.com/modelcontextprotocol/python-sdk/blob/abfbfe6c812bf701a6f392144692e8bbe8f56d60/src/mcp/server/session.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/325/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-9a603a2587011a188aa76ca19a32fcd343a253516325fbcfb4f7bfb6a814634c
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-9a603a2587011a188aa76ca19a32fcd343a253516325fbcfb4f7bfb6a814634c
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-9a603a2587011a188aa76ca19a32fcd343a253516325fbcfb4f7bfb6a814634c
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-9a603a2587011a188aa76ca19a32fcd343a253516325fbcfb4f7bfb6a814634c
src/mcp/shared/memory.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-fda62e83f7fbe11b6291a8eb980526a6465853fcc15dba2269425cd3de0801dc
View file https://github.com/modelcontextprotocol/python-sdk/blob/abfbfe6c812bf701a6f392144692e8bbe8f56d60/src/mcp/shared/memory.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/325/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-fda62e83f7fbe11b6291a8eb980526a6465853fcc15dba2269425cd3de0801dc
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-fda62e83f7fbe11b6291a8eb980526a6465853fcc15dba2269425cd3de0801dc
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-fda62e83f7fbe11b6291a8eb980526a6465853fcc15dba2269425cd3de0801dc
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-fda62e83f7fbe11b6291a8eb980526a6465853fcc15dba2269425cd3de0801dc
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-fda62e83f7fbe11b6291a8eb980526a6465853fcc15dba2269425cd3de0801dc
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-fda62e83f7fbe11b6291a8eb980526a6465853fcc15dba2269425cd3de0801dc
src/mcp/shared/session.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-aaa1596dd4db91f5cd7f743c8afbe58596daf01a2ecec4a0024768f7409fb1dc
View file https://github.com/modelcontextprotocol/python-sdk/blob/abfbfe6c812bf701a6f392144692e8bbe8f56d60/src/mcp/shared/session.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/325/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-aaa1596dd4db91f5cd7f743c8afbe58596daf01a2ecec4a0024768f7409fb1dc
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-aaa1596dd4db91f5cd7f743c8afbe58596daf01a2ecec4a0024768f7409fb1dc
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-aaa1596dd4db91f5cd7f743c8afbe58596daf01a2ecec4a0024768f7409fb1dc
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-aaa1596dd4db91f5cd7f743c8afbe58596daf01a2ecec4a0024768f7409fb1dc
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-aaa1596dd4db91f5cd7f743c8afbe58596daf01a2ecec4a0024768f7409fb1dc
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-aaa1596dd4db91f5cd7f743c8afbe58596daf01a2ecec4a0024768f7409fb1dc
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-aaa1596dd4db91f5cd7f743c8afbe58596daf01a2ecec4a0024768f7409fb1dc
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-aaa1596dd4db91f5cd7f743c8afbe58596daf01a2ecec4a0024768f7409fb1dc
tests/client/test_logging_callback.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-e2c00711f742606cdec4058b3f6121def7c09f5d3e74d16e2a6ba26bba1c91f5
View file https://github.com/modelcontextprotocol/python-sdk/blob/abfbfe6c812bf701a6f392144692e8bbe8f56d60/tests/client/test_logging_callback.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/325/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-e2c00711f742606cdec4058b3f6121def7c09f5d3e74d16e2a6ba26bba1c91f5
https://github.com/modelcontextprotocol/python-sdk/pull/325/files#diff-e2c00711f742606cdec4058b3f6121def7c09f5d3e74d16e2a6ba26bba1c91f5
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/325/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.