Agents, MCP and skillsLoading progress…

JSON schemas

Trace a model-requested tool call through schema validation, execution and a returned observation.

JSON schemas

A JSON schema describes the allowed arguments: which fields exist, their types, allowed values (enum), numeric limits, which fields are required, and whether extra fields are allowed. Each rule is explicit. A property that is declared but not listed in required may be omitted, and unless you say otherwise an unknown field may or may not be tolerated. Decide both on purpose.

{ "properties": { "qty": { "type": "integer", "minimum": 1, "maximum": 100 }, "note": { "type": "string" } }, "required": ["qty"], "additionalProperties": false }
call {"note":5} problems (2): missing:qty, type:note

Declaring a property says what it must look like if present. Whether it must be present is a separate list. Untick "qty in required" and send {note: 5} to see the model get away with omitting it.

Flip required, ranges and additionalProperties; send four different calls.

Predict first. Does declaring an integer field automatically require that field to be present?

Chapter context

A tool call is a structured request for the application to perform an operation. The model proposes arguments; the surrounding application decides whether the operation is valid and permitted and is responsible for executing it.

Chapter reference: math, worked example & code

This section belongs to the whole chapter, so it is the same on every lesson in it and may cover a different lesson's topic. The code for the experiment you just ran is inside the experiment itself.

Math and notation

A useful execution model is: requested operation + validated arguments + permission decision → execution result. Schema validation establishes a data-shape contract; authorization establishes whether this caller may perform this operation. Neither implies the other.

Worked example

A calculator tool requires numeric a and b and returns a+b. For a=2,b=3, its result is 5. If the request instead asks for an unknown field or omits b, reject or repair the request according to the contract before executing. A retry of this pure calculation is harmless; that does not establish the same property for a side-effecting tool.

Reference code

The following example uses the Python standard library and does not call a remote service.

def add(a,b):
    if type(a) not in (int,float) or type(b) not in (int,float):
        raise ValueError('numeric inputs required')
    return a+b
assert add(2,3) == 5
try:
    add('2',3)
except ValueError:
    pass
else:
    raise AssertionError('invalid input accepted')

Python examples are provided for study and local execution; this page does not execute Python.

Common mistakes

A model proposal is not permission. JSON schema shape validation is not business-rule validation. Tool outputs must not silently become trusted instructions.