modelcontextprotocol / modelcontextprotocol/python-sdk
It is not possible to define a Resource that takes only the Context parameter as an argument.
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 24.3k
- Fork
- 4k
- Merge medio
- 1g 1h
- PR unite (30g)
- 31
Descrizione
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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con la convalida dei parametri del decorator FastMCP.resource() e analizza come vengono classificate le funzioni Context-only. Quindi segui Resource.read() e le implementazioni delle risorse esistenti per aggiornare la firma della chiamata in modo coerente; il lavoro è completo quando le risorse Context-only compaiono nell’elenco delle risorse e sono accessibili senza compromettere le risorse esistenti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- api
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 42/100