René's URL Explorer Experiment


Title: docs: load media examples from disk instead of inline base64 by maxisbey · Pull Request #3108 · modelcontextprotocol/python-sdk · GitHub

Open Graph Title: docs: load media examples from disk instead of inline base64 by maxisbey · Pull Request #3108 · modelcontextprotocol/python-sdk

X Title: docs: load media examples from disk instead of inline base64 by maxisbey · Pull Request #3108 · modelcontextprotocol/python-sdk

Description: Rework the media docs examples to load their files from disk instead of embedding a base64 blob. Motivation and Context The image/audio tutorials on the media page opened with LOGO_PNG = base64.b64decode("iVBORw0KGgo...") — the first thing a reader met was an opaque blob rather than the API being taught, and it read as if conjuring base64 by hand were part of the job. The examples now show the realistic pattern: Image(path=...) / Audio(path=...) pointing at logo.png / chime.wav beside the server. The paths are anchored with Path(__file__).parent so the example keeps working when a host launches the stdio server from an arbitrary working directory (hosts generally do — a bare relative path would resolve against wherever that happens to be), and the page now says so explicitly. The data= + format= mode is still taught in "Bytes or a file", reframed as the mode for bytes that never touch disk (Pillow output, screenshots, ...). No binary asset is committed: the tests fabricate the files in tmp_path and repoint the tutorials' module-level path constants (the same pattern FastAPI's docs tests use for its FileResponse examples). The SDK never parses the contents, so opaque bytes suffice. Also fixed while here: the audio wire-format illustration showed the base64 of the now-deleted placeholder (its RIFF size field included), which no reader's own WAV would reproduce — truncated to the universal prefix. How Has This Been Tested? tests/docs_src/test_media.py updated: fabricated assets in tmp_path, exact ImageContent/AudioContent round-trip assertions, plus a new test pinning that path= files are read when the result is built (which is what makes the fabricate-then-call pattern sound). Drove both tutorial files end-to-end over a real stdio subprocess (mcp run + stdio_client): image and audio round-trip byte-for-byte with the files on disk; a missing file surfaces as a clean tool error naming the path; launching the server from a different working directory still resolves the files (the __file__ anchoring at work). Breaking Changes None — docs and tests only. 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 The old examples' data= mode (with the format= caveat) is still covered by test_raw_data_without_a_format_falls_back_to_a_default_mime_type and the !!! check admonition — nothing the page previously taught was dropped, the two construction modes just swapped billing. AI Disclaimer

Open Graph Description: Rework the media docs examples to load their files from disk instead of embedding a base64 blob. Motivation and Context The image/audio tutorials on the media page opened with LOGO_PNG = base64.b64...

X Description: Rework the media docs examples to load their files from disk instead of embedding a base64 blob. Motivation and Context The image/audio tutorials on the media page opened with LOGO_PNG = base64.b64...

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

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:3f0fd939-d48e-7af1-e3bd-7c127c8d6c16
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-id8D96:12243E:5ADA66:83D951:6A620E36
html-safe-nonce9026d7fb8a8d4020f2ae87de0f5e084df53d34065ef1163477d42fd75added38
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4RDk2OjEyMjQzRTo1QURBNjY6ODNEOTUxOjZBNjIwRTM2IiwidmlzaXRvcl9pZCI6IjMxNjgyNTkwNjk1MDcxNDUyNzEiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmac26d12833db3fee93b610da5c8c96bd09e28cca84209bc21ba344f0cdf8fc65d1
hovercard-subject-tagpull_request:4070700234
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/3108/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:altRework the media docs examples to load their files from disk instead of embedding a base64 blob. Motivation and Context The image/audio tutorials on the media page opened with LOGO_PNG = base64.b64...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Nonebe9a4d9589756e22b427637ffbf1123a96e067050e57f5cec403e3080a650ca4
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
release7b5509702f01f876c214a2cbb142690847de0019
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelcontextprotocol%2Fpython-sdk%2Fpull%2F3108%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
Code QualityEnforce quality at mergehttps://github.com/features/code-quality
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%2F3108%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/3108/files
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/3108/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.7k https://github.com/login?return_to=%2Fmodelcontextprotocol%2Fpython-sdk
Code https://github.com/modelcontextprotocol/python-sdk
Issues 269 https://github.com/modelcontextprotocol/python-sdk/issues
Pull requests 313 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
docs-media-path-exampleshttps://github.com/modelcontextprotocol/python-sdk/tree/docs-media-path-examples
Conversation 3 https://github.com/modelcontextprotocol/python-sdk/pull/3108
Commits 1 https://github.com/modelcontextprotocol/python-sdk/pull/3108/commits
Checks 37 https://github.com/modelcontextprotocol/python-sdk/pull/3108/checks
Files changed https://github.com/modelcontextprotocol/python-sdk/pull/3108/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files
docs: load media examples from disk instead of inline base64 https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#top
Show all changes 1 commit https://github.com/modelcontextprotocol/python-sdk/pull/3108/files
1565b87 docs: load media examples from disk instead of inline base64 maxisbey Jul 16, 2026 https://github.com/modelcontextprotocol/python-sdk/pull/3108/commits/1565b879edc8cc5326d808589776b8f6556132bf
Clear filters https://github.com/modelcontextprotocol/python-sdk/pull/3108/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files
media.md https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-906d34c148fa69fc132b6860924c88b8441785dd19aaab93fa3985d117264fb2
tutorial001.py https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-b28d55a7e545195acc742009107928075cba0f8efe3d7203f1d639323c478a33
tutorial002.py https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-e411f21483031b6fc591c75784052083a5cbb2ca2dfdd1dd94df8ec512f1a44c
tutorial003.py https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-5c99d72525843d9fff1677672447d406770ac799a280260c15746f08b29bd795
tutorial004.py https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-9f625c38b2277c2d4129df70d5ea6ad4d7ef464424284840d1a55b9ce74abb64
test_media.py https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-f122dbbf2882618d889d53fa1e0f98ad726800580b0700f85791d3d3de54a725
docs/servers/media.mdhttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-906d34c148fa69fc132b6860924c88b8441785dd19aaab93fa3985d117264fb2
View file https://github.com/modelcontextprotocol/python-sdk/blob/1565b879edc8cc5326d808589776b8f6556132bf/docs/servers/media.md
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/3108/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-906d34c148fa69fc132b6860924c88b8441785dd19aaab93fa3985d117264fb2
https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-906d34c148fa69fc132b6860924c88b8441785dd19aaab93fa3985d117264fb2
https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-906d34c148fa69fc132b6860924c88b8441785dd19aaab93fa3985d117264fb2
https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-906d34c148fa69fc132b6860924c88b8441785dd19aaab93fa3985d117264fb2
https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-906d34c148fa69fc132b6860924c88b8441785dd19aaab93fa3985d117264fb2
https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-906d34c148fa69fc132b6860924c88b8441785dd19aaab93fa3985d117264fb2
docs_src/media/tutorial001.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-b28d55a7e545195acc742009107928075cba0f8efe3d7203f1d639323c478a33
View file https://github.com/modelcontextprotocol/python-sdk/blob/1565b879edc8cc5326d808589776b8f6556132bf/docs_src/media/tutorial001.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/3108/{{ revealButtonHref }}
docs_src/media/tutorial002.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-e411f21483031b6fc591c75784052083a5cbb2ca2dfdd1dd94df8ec512f1a44c
View file https://github.com/modelcontextprotocol/python-sdk/blob/1565b879edc8cc5326d808589776b8f6556132bf/docs_src/media/tutorial002.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/3108/{{ revealButtonHref }}
docs_src/media/tutorial003.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-5c99d72525843d9fff1677672447d406770ac799a280260c15746f08b29bd795
View file https://github.com/modelcontextprotocol/python-sdk/blob/1565b879edc8cc5326d808589776b8f6556132bf/docs_src/media/tutorial003.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/3108/{{ revealButtonHref }}
docs_src/media/tutorial004.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-9f625c38b2277c2d4129df70d5ea6ad4d7ef464424284840d1a55b9ce74abb64
View file https://github.com/modelcontextprotocol/python-sdk/blob/1565b879edc8cc5326d808589776b8f6556132bf/docs_src/media/tutorial004.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/3108/{{ revealButtonHref }}
tests/docs_src/test_media.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-f122dbbf2882618d889d53fa1e0f98ad726800580b0700f85791d3d3de54a725
View file https://github.com/modelcontextprotocol/python-sdk/blob/1565b879edc8cc5326d808589776b8f6556132bf/tests/docs_src/test_media.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/3108/{{ revealButtonHref }}
claudehttps://github.com/apps/claude
Jul 16, 2026https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#r3598431232
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/3108/files
https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-f122dbbf2882618d889d53fa1e0f98ad726800580b0700f85791d3d3de54a725
https://github.com/modelcontextprotocol/python-sdk/pull/3108/files#diff-f122dbbf2882618d889d53fa1e0f98ad726800580b0700f85791d3d3de54a725
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/3108/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.