Regeln je Anbieter für JSON Schema
Jeder Anbieter unterstützt nur einen Teil von JSON Schema. Diese Seite zeigt, welche Regeln der Prüfer anwendet und woher sie stammen. Stand aller Regeln: 10.11.2026. Die Anbieter ändern ihre Dokumentation laufend – im Zweifel gilt immer die verlinkte Originalquelle.
Fehler, Warnung, Hinweis
- Fehler: Die Dokumentation nennt die Regel ausdrücklich als Pflicht oder als nicht unterstützt. Die API lehnt das Schema dann laut Dokumentation in der Regel mit einem Fehler 400 ab.
- Warnung: Das Schlüsselwort steht nicht in der Liste der unterstützten Funktionen oder wird laut Dokumentation stillschweigend ignoriert. Das Schema kann durchgehen, die Einschränkung gilt dann aber nicht.
- Hinweis: Empfehlungen, zum Beispiel für Tools ohne Parameter.
OpenAI Structured Outputs (strict)
Gilt für response_format/text.format mit json_schema und für Funktionen mit "strict": true.
| Regel | Stufe im Prüfer | Was die Korrektur tut |
|---|---|---|
Wurzel ist "type": "object", kein anyOf | Fehler | ergänzt type, wenn er fehlt; ein anyOf an der Wurzel bleibt offen |
Jedes Objekt hat "additionalProperties": false | Fehler | setzt es |
Alle Felder stehen in required | Fehler | ergänzt sie und macht vorher optionale Felder nullable (["string", "null"] bzw. anyOf mit null) |
Nicht unterstützt: allOf, not, dependentRequired, dependentSchemas, if, then, else | Fehler | führt einfache allOf-Objekte zusammen, verschiebt not/if/then/else in die Beschreibung |
Unterstützt: pattern, format, multipleOf, minimum, maximum, exclusiveMinimum, exclusiveMaximum, minItems, maxItems, enum, anyOf, $ref/$defs | – | bleibt |
Andere Schlüsselwörter (z. B. minLength, maxLength, uniqueItems, oneOf, patternProperties) sind nicht als unterstützt aufgeführt | Warnung | Wertgrenzen wandern in die Beschreibung, oneOf wird anyOf |
| Formate: date-time, time, date, duration, email, hostname, ipv4, ipv6, uuid | Warnung bei anderen | anderes Format wandert in die Beschreibung |
| Höchstens 10 Verschachtelungsebenen (Wurzelobjekt zählt als Ebene 1) und 5.000 Objekt-Eigenschaften | Fehler | – |
| Höchstens 1.000 Enum-Werte insgesamt; bei mehr als 250 Werten in einem Enum zusammen höchstens 15.000 Zeichen | Fehler | – |
| Namen, Definitionsnamen, Enum- und const-Werte zusammen höchstens 120.000 Zeichen | Fehler | – |
Rekursion über $ref ist erlaubt | – | – |
Quelle: OpenAI: Structured Outputs, Abschnitt „Supported schemas“. Für feinabgestimmte Modelle gelten weitere Einschränkungen, die der Prüfer nicht abbildet.
Anthropic Structured Outputs und strict tool use
Gilt für output_config.format und für Tools mit "strict": true; beide nutzen dieselben Grenzen.
| Regel | Stufe im Prüfer | Was die Korrektur tut |
|---|---|---|
Jedes Objekt hat "additionalProperties": false | Fehler | setzt es |
Nicht unterstützt: minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, minLength, maxLength | Fehler | verschiebt sie in die Beschreibung |
Arrays: nur minItems 0 oder 1; keine weiteren Array-Grenzen (maxItems, uniqueItems …) | Fehler | setzt minItems auf 1 und schreibt den alten Wert in die Beschreibung |
| Keine rekursiven Schemas | Fehler | bleibt offen – Struktur von Hand abflachen |
Kein externer $ref, kein allOf mit $ref | Fehler | führt einfache allOf zusammen, sonst offen |
enum nur mit Text, Zahlen, true/false oder null | Fehler | – |
Regex ohne Rückverweise, Lookahead/Lookbehind und Wortgrenzen \\b | Fehler | verschiebt das Muster in die Beschreibung |
| Quantoren mit großem Bereich (Prüfer warnt ab Werten über 100) | Warnung | – |
| Formate: date-time, time, date, duration, email, hostname, uri, ipv4, ipv6, uuid | Warnung bei anderen | anderes Format wandert in die Beschreibung |
Je Anfrage höchstens 20 strict-Tools, 24 optionale Parameter und 16 Parameter mit anyOf oder Typ-Liste – über alle Schemas zusammen | Fehler | – |
input_schema eines Tools ist "type": "object" | Fehler | ergänzt type |
Der Prüfer zählt optionale Parameter und Union-Parameter in allen verschachtelten Objekten. Wenn du mehrere Tools einfügst, gelten die Grenzen für die ganze Liste, als ob sie in einer Anfrage stünden. Unterhalb dieser Grenzen kann die API ein Schema trotzdem als zu komplex ablehnen.
Quelle: Anthropic: Structured outputs, Abschnitte „JSON Schema limitations“ und „Schema complexity limits“.
Google Gemini Structured Output
| Regel | Stufe im Prüfer | Was die Korrektur tut |
|---|---|---|
| Typen: string, number, integer, boolean, object, array, null | Fehler bei anderen | – |
Unterstützt: properties, required, additionalProperties, enum, format, minimum, maximum, items, prefixItems, minItems, maxItems, anyOf, $ref/$defs | – | bleibt |
Werden ignoriert und vom Server entfernt: minLength, maxLength, minProperties, maxProperties, uniqueItems, contains, minContains, maxContains | Warnung | verschiebt sie in die Beschreibung |
Andere Schlüsselwörter (z. B. pattern, const, oneOf, default) sind nicht aufgeführt | Warnung | const wird enum mit einem Wert, oneOf wird anyOf |
| Rekursion besser über optionale oder nullable Felder | Warnung | – |
Quelle: Google AI for Developers: Structured output, Abschnitte „JSON schema support“ und „Limitations“.
Model Context Protocol
| Regel | Stufe im Prüfer | Was die Korrektur tut |
|---|---|---|
inputSchema ist ein JSON-Objekt mit "type": "object" | Fehler | ergänzt type |
Ohne $schema gilt JSON Schema 2020-12; unbekannte Dialekte | Warnung | – |
Tool ohne Parameter: {{ "type": "object", "additionalProperties": false }} empfohlen | Hinweis | – |
MCP selbst schränkt die Schlüsselwörter nicht ein. Welcher Anbieter dahinter das Tool ans Modell gibt, entscheidet der Client – prüfe deshalb zusätzlich das passende Anbieterprofil.
Quellen: MCP-Spezifikation 2025-11-25: Tools, MCP-Schema 2025-11-25 (schema.ts).
Allgemeine Prüfungen
- Typen müssen gültig sein,
requiredeine Liste von Feldnamen,enumeine nicht leere Liste. - Interne Verweise (
$refmit#/…) müssen auf etwas zeigen. - Unbekannte Schlüsselwörter werden mit einem Vorschlag gemeldet (z. B.
requird→required). nullable,exampleunddiscriminatoraus OpenAPI sind kein JSON Schema. Die Korrektur wandelt"nullable": truein einen Typ mit"null"um.
Quelle: JSON Schema 2020-12.