Rule catalog · Schema quality

All tools declare an input schema

all_tools_have_input_schemamediumweight 6Post-handshake

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.