Add support for context-only resources (#1406) #2
+150
−44
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
Integrates PR modelcontextprotocol#1406 from the upstream
modelcontextprotocol/python-sdkrepository, which adds support for context-only resources in the FastMCP server.Problem
Previously, it was not possible to define a Resource that takes only the Context parameter as an argument. When attempting to create such a resource, the registration logic incorrectly classified it as a template resource instead of a regular resource.
This limitation prevented developers from creating resources that need access to server session context but don't require dynamic URI components, reducing flexibility in resource design.
Solution
The changes enable proper registration of context-only resources by:
read()methodsContext[ServerSession, None]Example Usage
This resource is now correctly registered as a regular resource, not a template resource, allowing clients to read it directly without providing any URI parameters.
Changes Made
contextparameter to the abstractResource.read()method signatureFunctionResourceto track and inject context parameters viacontext_kwargfieldfind_context_parameter()utility to detect generic Context type aliasesTesting
test_server.py::TestContextInjection::test_resource_only_contextBreaking Changes
None. The
contextparameter inResource.read()method is optional with defaultNone. All existing resource implementations continue to work unchanged.Closes modelcontextprotocol#1405 (upstream issue)
Co-authored-by: 0Delta 12265602+0Delta@users.noreply.github.com
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
astral.shcurl -LsSf REDACTED(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.