Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

find_context_parameter() fails to detect Context parameter in callable class instances

Aperta
#1,974 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
55/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Ferma
Stack tecnologico
python
Ambito
api, backend

Direzione di ricerca

Parti da find_context_parameter(), che viene usata durante la registrazione degli strumenti tramite FastMCP.add_tool(). Confronta la sua gestione delle funzioni normali con quella delle istanze di classe richiamabili e verifica che l’esempio non esponga più ctx come parametro dello strumento quando viene registrata l’istanza richiamabile.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug P3 v2
Initial Checks
Description

When registering a callable class instance as an MCP tool via FastMCP.add_tool(), the ctx: Context parameter is incorrectly exposed as an externally visible tool parameter instead of being injected by the framework. This is because find_context_parameter() uses typing.get_type_hints() which doesn't introspect the call method of callable class instances.

Suggested Fix
Update find_context_parameter() to handle callable class instances:

def find_context_parameter(fn: Callable[..., Any]) -> str | None:
    from mcp.server.fastmcp.server import Context

    # Handle callable class instances by using __call__ method
    target = fn
    if not (inspect.isfunction(fn) or inspect.ismethod(fn)):
        if callable(fn) and hasattr(fn, "__call__"):
            target = fn.__call__

    try:
        hints = typing.get_type_hints(target)
    except Exception:
        return None

    # ... rest of function unchanged
Example Code
from typing import Annotated, Any
from mcp.server.fastmcp import Context, FastMCP
from mcp.server.session import ServerSession
from starlette.requests import Request
import pydantic

class MyTool:
    def __init__(self, name: str):
        self.__name__ = name

    async def __call__(
        self,
        query: Annotated[str, pydantic.Field(description="Search query")],
        ctx: Context[ServerSession, Any, Request],
    ) -> str:
        """Performs a search."""
        return f"Results for: {query}"

mcp = FastMCP(name="Test Server")
mcp.add_tool(MyTool(name="my_search"), name="my_search", description="Search tool")

# When listing tools, 'ctx' appears as a required parameter in the schema
Python & MCP Python SDK
1.26.0
Lingua principale
Python
Stelle
24.3k
Fork
4k
Merge medio
1g 19m
PR unite (30g)
29

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di modelcontextprotocol/python-sdk

Tutte le issue di modelcontextprotocol/python-sdk

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.