Skip to content

Schemas that don't mark anything required

With no required array, the model treats every argument as optional and routinely omits the ones the tool actually needs, so the call fails at the boundary instead of doing the work.

see_it · fix_it

The failure, then the fix

Each verdict below is the actual MCP & Agent Tool Auditor run on the snippet, not a description of one.

before
[
  {
    "name": "create_refund",
    "description": "Create a refund for an order line. Use this when a support agent approves a return.",
    "input_schema": {
      "type": "object",
      "properties": {
        "order_id": { "type": "string", "description": "The order UUID" },
        "amount_cents": { "type": "integer", "description": "Refund amount in cents" }
      }
    }
  }
]

Warns · auditor verdictNo "required" array on: create_refund. With nothing marked required, the model treats every argument as optional and routinely omits the ones the tool actually needs, so the call fails at the boundary.

after
[
  {
    "name": "create_refund",
    "description": "Create a refund for an order line. Use this when a support agent approves a return.",
    "input_schema": {
      "type": "object",
      "properties": {
        "order_id": { "type": "string", "description": "The order UUID" },
        "amount_cents": { "type": "integer", "description": "Refund amount in cents" }
      },
      "required": ["order_id", "amount_cents"]
    }
  }
]

Passes · auditor verdictTools that take parameters mark the mandatory ones required, so the model is told what it must supply.

fix · List the mandatory parameters: "required": ["id", "amount"]. On OpenAI strict mode every property must be required, so make truly optional ones nullable instead.

why_it_matters

A JSON-Schema with properties but no 'required' list tells the model that nothing is mandatory. So when it's unsure of a value, it leaves the argument out, and the tool receives a call missing the id or the amount it can't run without. Declaring required parameters is how you tell the model what it must supply before calling at all.

On OpenAI's strict mode this is enforced harder: every property must appear in 'required', and truly optional fields are expressed as nullable types rather than omitted from the list. The auditor warns when a tool declares parameters but no required array, so the gap is caught before it reaches production as a stream of incomplete calls.

properties, no requiredmodel omits the idlist the mandatory parameters

faq

Questions & answers

What happens if a tool schema has no required fields?
The model treats every parameter as optional and tends to omit values it's unsure of, so the tool gets called with missing arguments and fails at the boundary. Always list the parameters the tool can't run without in the required array.
How do optional parameters work in OpenAI strict mode?
Strict mode requires every property to appear in 'required', so you can't simply leave optional fields out. Instead, make them nullable by giving the type an array form like ['string','null'], which keeps the field present and well-typed while allowing the model to pass null.

Spotting one failure is easy. Hardening the whole agent is the work.

I review which tools the loop can reach autonomously, how you fence destructive calls behind confirmation, idempotency on the side effects, and the evals that catch a wrong tool call before users do. Book a call, or leave your email.

Book a call

No spam. You'll get a reply from me.

Prefer proof first? See how this plays out in real case studies →