Regeln & json-logic-Referenz
Auswertungsreihenfolge: Regeln laufen pro MCP-Server nach aufsteigender priority; die erste passende aktive Regel gewinnt. Ohne Treffer gilt die Default-Policy: Enforce = halten (fail-closed), Monitor = durchlassen + Flag. Tools im Zustand neu/geändert sind immer freigabepflichtig, außer eine Regel sagt explizit Deny.
Auswertungskontext#
Jede Bedingung wird gegen dieses Objekt geprüft:
{
"tool": { "name": "...", "readOnlyHint": true, "destructiveHint": false },
"args": { ... }, // die Argumente des Calls
"agent": { "id": "...", "label": "..." },
"meta": { "hour_utc": 14, "weekday": 3, // UTC
"hour_local": 16, "weekday_local": 3, // Zeitzone des Arbeitsbereichs
"calls_last_hour": 12, "same_tool_calls_last_5m": 3 }
}Beispiele#
// Zahlungen über 500 halten
{ ">": [{ "var": "args.amount" }, 500] }
// außerhalb der Geschäftszeiten (08–18 Ortszeit) ablehnen
{ "or": [{ "<": [{ "var": "meta.hour_local" }, 8] },
{ ">=": [{ "var": "meta.hour_local" }, 18] }] }
// Bursts halten: mehr als 20 Calls pro Stunde
{ ">": [{ "var": "meta.calls_last_hour" }, 20] }
// nur bestimmte Empfänger erlauben
{ "in": [{ "var": "args.to" }, ["ACME Supplies", "ACME Logistics"]] }
// immer (Tool-Policies nutzen das)
trueUnterstützte Operatoren#
Bedingungen sind Standard-json-logic - die Engine unterstützt den vollen Operator-Satz von jsonlogic.com. Die in der Praxis wichtigsten:
| Kategorie | Operatoren |
|---|---|
| Zugriff | var (Pfad wie args.amount), missing, missing_some |
| Vergleich | == === != !== > >= < <= |
| Logik | and or ! !! if |
| Listen & Strings | in cat substr merge |
| Arithmetik | + - * / % min max |
| Arrays | map filter reduce all some none |
Eine Bedingung, die zur Laufzeit einen Fehler wirft, wertet als kein Treffer - die nächste Regel greift, im Zweifel die fail-closed-Default-Policy. Ein Tippfehler in einer Regel kann also nie versehentlich etwas durchlassen.
Freigaberegeln#
Effekte: allow · require_approval · deny. Eine Freigaberegel darf eine eigene Approver-Konfiguration tragen - Rolle oder konkrete Nutzer, Frist (timeout_minutes, Default 240, Minimum 1), Begründungspflicht und Vier-Augen (min_approvals: 2 - zwei unabhängige Freigaben, derselbe Nutzer zählt nicht doppelt).
Sie muss es aber nicht. Lässt die Regel das Feld leer, erbt sie vom Server und der Server vom Arbeitsbereich. Wer entscheiden darf, ist eine eigene Schicht und keine Eigenschaft der Regel - „für diesen Server entscheidet Team X" braucht deshalb keinen Regel-Editor. Was gilt, wie es geprüft wird und welche Rolle was darf, steht unter Wer darf freigeben.
Im Rule Builder müssen Sie kein json-logic schreiben - der Bedingungs-Builder erzeugt es aus dem Input-Schema Ihrer Tools und zeigt eine Klartext-Vorschau.