modelcontextprotocol / modelcontextprotocol/python-sdk

A tool with a *args or **kwargs parameter is registered with a schema it can never satisfy

Offen
#3,514 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

v1 v2
Vorherrschende Sprache
Python
Sterne
24.3k
Forks
4k
Ø Merge
1 T. 1 Std.
Gemergte PRs (30 T.)
31

Beschreibung

Initial Checks

  • I confirm that I'm using the newest release of my line (2.x, main at 6affe5c)
  • I confirm that I searched for my issue in the issue tracker before opening this issue

Release line

2.x (current stable)

Description

Registering a tool whose function signature has a *args or **kwargs
parameter succeeds, and the tool shows up in list_tools, but it can never
actually be called: the generated JSON schema lists args/kwargs as a
required parameter of a plain scalar type, which doesn't match how the
function actually receives those values.

Expected: either the decorator rejects a signature it can't turn into a
schema (it already does this for a leading underscore in a parameter name),
or the schema reflects what the function accepts.

Actual: the tool is silently registered and permanently uncallable. Calling
it with only the named parameters filled in fails schema validation because
args/kwargs is "missing"; there's no way to actually supply it, since a
JSON object has no way to express "and then also a variable number of
positional values" for a single scalar field.

Example Code

from mcp.server.mcpserver import MCPServer

server = MCPServer("demo")


@server.tool()
def with_kwargs(x: int, **kwargs: str) -> str:
    return f"{x} {kwargs}"

Listing tools shows:

{'type': 'object', 'properties': {'x': {'title': 'X', 'type': 'integer'}, 'kwargs': {'title': 'Kwargs', 'type': 'string'}}, 'required': ['x', 'kwargs'], 'title': 'with_kwargsArguments'}

Calling it with {"x": 1} (the only arguments a caller could reasonably
guess) fails:

Error executing tool with_kwargs: 1 validation error for with_kwargsArguments
kwargs
  Field required [type=missing, input_value={'x': 1}, input_type=dict]

Same shape with *args instead of **kwargs.

Python & MCP Python SDK

Python 3.14.7, mcp-python-sdk main @ 6affe5c0d3588fd1705713b3703dc68015cfe3eb

I have a patch that raises InvalidSignature for a *args/**kwargs tool
parameter at registration time, scoped so it doesn't affect resource
templates (which legitimately use **kwargs for runtime-determined URI
variables); happy to open a PR against this issue if that's the direction
you'd want.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne bei der Registrierung von MCPServer.tool, wo Funktionssignaturen zu Tool-Schemas werden, und vergleiche die Behandlung mit Ressourcen-Templates, die legitimerweise **kwargs akzeptieren. Bestätige den InvalidSignature-Pfad sowohl für *args als auch für **kwargs, und überprüfe anschließend, dass variadische Tool-Parameter bei der Registrierung abgelehnt werden, während Ressourcen-Templates weiterhin unterstützt werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
backend-api-design
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Aktiv
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
68/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.