docs/content/changelog/01-30-26-simplified-optional-schemas.mdx
Tool schemas are now cleaner for optional fields by removing redundant anyOf: [{type}, {type: "null"}] constructs.
In JSON Schema, there are two distinct concepts:
| Concept | Meaning | How it's expressed |
|---|---|---|
| Optional | Field can be omitted entirely | Field is NOT in the required array |
| Nullable | Field accepts null as a value | anyOf: [{type}, {type: "null"}] |
Previously, our schemas used anyOf with null type for all optional fields—even when the field wasn't in required. This was redundant: if a field can be omitted, explicitly marking it as "accepts null" adds no value.
For fields that are not in the required array, the schema processing now:
{type: "null"} from anyOf arraysdefault: null since it's implied by being optionalanyOf to direct type declarationsFor example, the page_token field in GOOGLECALENDAR_LIST_CALENDARS (which is optional/not required):
Previous (verbose):
{
"page_token": {
"anyOf": [
{ "type": "string" },
{ "type": "null" }
],
"default": null,
"description": "Token for the page of results to return...",
"title": "Page Token"
}
}
Now (simplified):
{
"page_token": {
"type": "string",
"description": "Token for the page of results to return...",
"title": "Page Token"
}
}
required array that accept null still use anyOf with null typestring | number) retain their full anyOf arrayanyOf constructs