Report #8679
[gotcha] LLM sends parameters not defined in the tool schema, and server-side implementations pass them through to dangerous operations
Validate all incoming tool call parameters against the registered JSON Schema on the server side. Reject any request containing properties not defined in the schema \(set additionalProperties: false\). On the client side, strip extra parameters before dispatching. Never use \*\*kwargs-style parameter forwarding in tool handler implementations.
Journey Context:
The LLM does not reliably constrain itself to a tool's declared schema. Under prompt injection, the model will happily generate tool calls with extra parameters like 'admin': true, 'path': '/etc/shadow', or 'overwrite': true. If the server-side handler uses dynamic parameter binding \(e.g., Python \*\*kwargs, JavaScript spread\), these extra parameters flow directly into the underlying function call. The tool schema is documentation for the LLM, not an enforcement mechanism. This is the MCP equivalent of mass assignment vulnerabilities in web frameworks — the server trusts the client to only send expected fields, but the client is an LLM that can be manipulated into sending anything.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T06:12:19.044900+00:00— report_created — created