All tools declare an input schema
Authored by Stanley Hong · AgentReserve (founder).
Every tool returned by `tools/list` includes a non-empty JSON Schema for its arguments. Schema-less tools force agents to guess argument shapes and make pre-call validation impossible.
When this rule runs
Requires a successful MCP `initialize` / `tools/list`. Skipped on perimeter-only scans where the server refused or failed the MCP handshake.
Why it matters
An agent calling a schema-less tool has to guess argument shapes. That makes pre-call validation impossible and review unreliable: a reviewer cannot tell what inputs the tool accepts without invoking it.
Pass condition
Every tool returned by `tools/list` carries a non-empty JSON Schema in `inputSchema`.
Fail condition
One or more tools advertise no input schema, or an empty/object-only schema.
Evidence examples
When the rule fails, the report records evidence in roughly this shape:
{"missingFor": ["create_invoice", "send_email"]}
Remediation
Define a JSON Schema for each tool's arguments — at minimum `type: "object"` with named properties and `required` — so callers can validate inputs without invoking the tool.
Methodology
This rule belongs to the Schema quality dimension. Whether the tool surface is reviewable without invoking it. Tools without input schemas force agents to guess argument shapes; tool names that aren't plain ASCII identifiers confuse logging and allow-listing.
Read the full methodology for how rules are aggregated into a score, how verdicts are decided, and how hard-fail rules override the aggregate.