-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Description
Initial Checks
- I confirm that I'm using the latest version of MCP Python SDK
- I confirm that I searched for my issue in https://github.com/modelcontextprotocol/python-sdk/issues before opening this issue
Description
Problem
Currently, it is 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 classifies it as a template resource instead of a regular resource.
Expected Behavior
Resources with only a Context parameter should be registered as regular resources, not template resources.
Current Behavior
Resources with only a Context parameter are incorrectly registered as template resources, causing them to not appear in the resource list and fail when accessed.
Root Cause
The parameter validation logic in the FastMCP.resource()
decorator doesn't properly distinguish between effective function parameters and Context parameters. It treats any function with parameters as a potential template resource, even when the only parameter is a Context.
Solution
- Fix the parameter validation logic to exclude Context parameters when determining if a resource should be a template
- Update the
Resource.read()
method signature to accept an optional context parameter - Update all resource implementations to support the new signature
This change maintains full backward compatibility while enabling context-only resources.
Example Code
@mcp.resource("resource://user_profile")
def get_user_profile(ctx: Context) -> str:
# Something Code ...
Python & MCP Python SDK
Python 3.13.5
MCP Python SDK v1.15.0