MCP-Werkzeuge-Referenz
49 Werkzeuge, registriert in mcp/server.py (31 direkt) und fünf
Zusatzmodulen (agents_tools.py, beurteilung_tools.py,
hall_of_fame_tools.py, lehren_tools.py, statistik_tools.py). Jedes
Werkzeug ruft genau eine Kern-REST-Route auf — kein Werkzeug trägt eigene
Fachlogik oder eigene Invarianten; ein 409/422 des Kerns kommt beim
aufrufenden Modell als strukturierter ToolError an, nie verschluckt.
Siehe Claude Code, Cursor und Codex anbinden
für die Authentifizierung eines Clients.
Zwei Lese-Werkzeuge behandeln ein dokumentiertes leeres Ergebnis als
gültige Antwort, nicht als Fehler: gilt liefert bei einem 404 des Kerns
{"gilt": false, ...}, prozess_bild liefert bei dessen 404
{"bild_url": null, ...}. Jedes andere Werkzeug reicht eine
Nicht-2xx-Antwort als Fehler durch.
Eine Sache lesen
| Werkzeug | Parameter | Liefert |
|---|---|---|
sache_list |
bereich?, stufe?, suche?, persona_slug?, alle=False, gehoert_persona? |
Sachen mit Frage und geltender Regel. persona_slug filtert auf das Sichtfeld der aufrufenden Persona (gesendet als sichtfeld=); gehoert_persona filtert auf Eigentum (gesendet als persona=) — unabhängige Filter. |
sache_get |
slug |
Die Sache plus jede Aussage, nach Art, plus Historie. Kein Sichtbarkeits-Filter — Einzel-Lookup, keine Liste. |
gilt |
slug, subjekt_id?, persona_slug?, alle=False |
Die eine geltende Regel, oder ein gültiges leeres Ergebnis. |
gilt_am |
slug, datum, subjekt_id?, persona_slug?, alle=False |
Was am Datum galt, mit Status. |
warum |
slug |
Entscheidungstext der Regel, Historie, letztes Prüfweg-Ergebnis. |
suche |
q, subjekt_id?, persona_slug?, alle=False |
Volltextsuche über Aussagen und Ereignisse. |
konflikte |
— | Sachen mit Konflikt. |
graph |
slug?, id?, tiefe=2 |
Knoten und Kanten rund um eine Sache/Aussage/einen Prozess. |
Eine Sache oder Aussage schreiben
| Werkzeug | Parameter | Liefert |
|---|---|---|
sache_put |
slug, titel, frage, bereich?, stufe?, eltern_slug?, subjekt_typ? |
Legt eine Sache an, idempotent auf slug. |
aussage_put |
sache, art, text, herkunft, angelegt_von, subjekt_id=1, gilt_seit?, gilt_bis?, beobachtet_am?, quelle?, sicherheit?, ort?, pruefweg_slug?, beleg?, ersetzt?, status="gilt", frist?, prozess_slug?, schritt_key?, frame_ref? |
Neue Aussage. 409 mit der geltenden Aussage im Fehlertext, wenn ersetzt fehlt und schon eine gilt. |
hypothese_put |
sache, text, frist, pruefweg_slug, sicherheit, quelle, angelegt_von |
Neue Hypothese. Das Werkzeug selbst weist sicherheit >= 1 ab, bevor der Kern gefragt wird. |
hypothese_bewerten |
id, ergebnis, quelle, neue_frist? |
Löst eine Hypothese auf (bestaetigt|widerlegt|verlaengert, clientseitig geprüft). |
pruefweg_run |
slug |
Führt einen Prüfweg aus, speichert das Ergebnis, schreibt einen Fakt. |
abweichungen |
seit? |
Listet Abweichungen. |
ereignis_put |
subjekt_id, typ, zeitpunkt, inhalt_ref, text? |
Erfasst ein Ereignis. |
frage_stellen |
sache, frage, optionen, gestellt_von, empfehlung_key?, frist? |
Stellt eine Schaltzentrale-Frage. Das Werkzeug weist weniger als zwei Optionen, oder eine Option ohne folge, vor dem Kern-Aufruf ab. |
offen_fuer_mensch |
— | Alles, was gerade einen menschlichen Klick braucht. Eine offene Frage kommt vollständig: die Frage selbst und je Option Schlüssel, Beschriftung und Folge — damit ein Agent sie einem Menschen vorlegen kann, ohne etwas zu erfinden. |
frage_beantworten |
id, key, notiz? |
Beantwortet eine offene Frage. Nur als angemeldeter Mensch über eine OAuth-Verbindung — mit einem Schlüssel oder nach persona_waehlen wird der Aufruf abgewiesen. Die Antwort trägt den Namen des Angemeldeten (aus der Sitzung, nicht aus dem Aufruf) und den Vermerk „im Chat". |
seit_wann_neu |
seit |
Beantwortete Fragen seit einem Zeitpunkt (siehe den Abweichungs-Hinweis auf der REST-Referenz). |
Prozesse
| Werkzeug | Parameter | Liefert |
|---|---|---|
prozess_get |
slug, version? |
Ein Stand eines Prozesses: Schritte, Regeln je Schritt, Lücken, ueberholt und versionen (jeder Stand mit gilt_seit/gilt_bis). Ohne version der aktuelle, mit version genau dieser — so ist nachlesbar, was vor einer Änderung galt. Ein Stand, den es nicht gibt, ist ein Fehler und nicht der neueste. |
prozess_put |
slug, titel, diagramm_md, schritte, angelegt_von, subjekt_typ?, ersetzt_slug? |
Legt einen Prozess an oder eine neue Version. |
prozess_beenden |
slug, grund, angelegt_von |
Beendet einen Prozess ohne Nachfolger. Bewusst kein aussage_beenden-Werkzeug — das Beenden einer einzelnen Aussage ist eine Menschen-Entscheidung über Web/REST, kein Agenten-Werkzeug; ein Prozess ist die eine Ausnahme, weil sein Beenden Teil der routinemäßigen Regelwerk-Pflege eines Agenten ist. |
prozess_bild |
slug, schritt |
Das Bild des Schritts, oder ein benanntes leeres Ergebnis. |
kern_render |
subjekt_id |
Der erzeugte Kern als Markdown, plus Hash. |
Personas, Gedächtnis und Vorlagen
persona_put und from_vorlage sind bewusst keine MCP-Werkzeuge —
Aufgabe, Grenzen, Stil und Regeln ändert nur ein Mensch mit rw-Schlüssel
über die Web-Fläche. Über sich selbst Gedächtnis zu schreiben ist die eine
Ausnahme, die Agenten bekommen.
| Werkzeug | Parameter | Liefert |
|---|---|---|
persona_list |
— | Jede Persona mit ihren Kennzahlen. |
persona_get |
slug |
Eine Persona vollständig, plus ihre Regeln und die 10 jüngsten Gedächtnis-Einträge. |
persona_brief |
slug, max_gedaechtnis?, max_lehren? |
Der deterministische Markdown-Brief. |
persona_waehlen |
slug |
Bindet diesen Chat an eine Persona: ab dann gelten ihre Werkzeug-Freigaben und ihr Sichtfeld, und sie ist die Urheberin dessen, was geschrieben wird. Nur über eine OAuth-Verbindung — ein Schlüssel trägt seine Bindung bereits selbst. Nur aktive Personas des eigenen Projekts; jeder Aufruf wird protokolliert. Ohne Wahl bleibt alles wie zuvor. |
firma_get |
— | Die sechs Firmengedächtnis-Felder, lesend. Ändern darf nur ein angemeldeter Mensch — auch über die Schnittstelle; ein Agent in der Sitzung eines Menschen zählt dazu, ein Schlüssel allein nicht. |
memory_search |
persona_slug, q, art?, limit=20, lesende_persona?, alle=False |
Volltextsuche im Gedächtnis einer Persona. lesende_persona ist hier der Sichtbarkeits-Filter (nicht persona_slug, das schon bestimmt, wessen Gedächtnis durchsucht wird — bewusst ein anderer Parametername für eine andere Frage). |
memory_put |
persona_slug, art, text, tags=[], gilt_bis? |
Schreibt einen Gedächtnis-Eintrag. |
vorlagen_list |
— | Der Persona-Vorlagen-Katalog. |
vorlagen_vorschlag |
bedarf |
Bis zu 3 gerankte Vorlagen für einen Freitext-Bedarf. |
Agents: Anwesenheit und Postfach
Modul mcp/agents_tools.py.
| Werkzeug | Parameter | Liefert |
|---|---|---|
agent_herzschlag |
persona_slug, sitzung, client, status="online", arbeitet_an?, kontext_zeichen?, modell? |
Lebenszeichen einer Sitzung; ein Lese-Schlüssel reicht — ein Herzschlag ist kein Schreiben an Wissen. |
agent_offline |
persona_slug, sitzung |
Meldet eine Sitzung ausdrücklich ab. |
agents_liste |
— | Jede aktive Persona mit Anwesenheit und Postfach-Zählern, auch ohne je gesendeten Herzschlag. |
nachricht_senden |
an_persona, text, art="info", betreff?, von_persona?, antwort_auf?, prioritaet="normal" |
Sendet eine Nachricht. |
auftrag_senden |
an_persona, text, betreff?, von_persona?, prioritaet="normal" |
Kurzform von nachricht_senden(art="auftrag"). |
auftrag_status |
id, status, notiz? |
Setzt den Status eines Auftrags. |
nachricht_an_mensch |
von_persona, von_sitzung, text, betreff?, art="info", prioritaet="normal", schwere? |
Nachricht/Auftrag an den Menschen — erscheint in „Euer Postfach" der Schaltzentrale. Für Regel-ändernde Entscheidungen bleibt frage_stellen der Weg, für Erkenntnisse hinweis_an_mensch. |
nachrichten_abholen |
persona_slug, sitzung, nur_neue=True |
Liest das Postfach einer Sitzung; markiert unzugestellte Nachrichten als zugestellt. |
postfach_stand |
persona_slug |
Wie viel im Postfach liegt — ohne es anzufassen (kein Zustell-Stempel, kein Schreiben). |
nachricht_gelesen |
id, persona_slug? |
Markiert eine oder mehrere Nachrichten als gelesen (id nimmt auch eine Liste). Bei einem Runden-Beitrag ist persona_slug Pflicht — quittiert wird nur der eigene Lesestand. |
runde_eroeffnen |
titel, frage, teilnehmer, von_persona?, von_sitzung?, slug? |
Eröffnet eine Runde: ein Gespräch mehrerer Personas zu einer Frage (mit Fragezeichen), mindestens zwei Teilnehmer. |
runden_liste |
persona_slug?, nur_offene=True |
Listet Runden, neueste zuerst. |
runde_lesen |
slug |
Eine Runde mit allen Beiträgen, dem Deckel je Teilnehmer und den offenen, ausdrücklich gestellten Fragen. |
runde_beitrag |
slug, text, von_persona?, von_sitzung?, antwort_auf?, frage_an? |
Schreibt in eine Runde. Höchstens drei Beiträge je Persona; danach nur als Antwort auf eine Frage, die ausdrücklich an sie ging. Wer zustimmt, schweigt. |
runde_schliessen |
slug, ergebnis, von_persona? |
Schließt eine Runde — nur wer sie eröffnet hat, mit einem Ergebnis in einem Satz. |
Hall of Lessons
Modul mcp/lehren_tools.py.
| Werkzeug | Parameter | Liefert |
|---|---|---|
lehre_put |
art, titel, was, lehre, bereich, ursache?, wirkung?, persona_slug?, belege?, regel_vorschlag?, quelle_ref?, herkunft? |
Trägt eine Lehre ein. ursache ist clientseitig Pflicht bei art="fehler". bereich ist Pflicht — kennen Sie die Zuordnung noch nicht, nehmen Sie unsortiert. |
lehre_korrigieren |
id, bereich?, titel?, was?, lehre?, grund? |
Korrigiert Bereich oder Wortlaut einer bestehenden Lehre. Nicht änderbar: Art, Ursache, Belege, Status, Persona. Wer den Wortlaut korrigiert, schickt den ganzen Text — die Korrektur ersetzt das Feld, sie ergänzt es nicht. Muss der Grund der Korrektur aus der Ursache verschwinden, geht das mit einer Korrektur nicht: dann löst eine neue Lehre die alte ab. |
lehren_suche |
q?, art?, status?, bereich?, lesende_persona?, limit? |
Durchsucht Lehren; lesende_persona filtert nach Sichtbarkeit, dasselbe Muster wie memory_search. |
hinweis_an_mensch |
titel, was, lehre, persona_slug, wirkung?, herkunft? |
Derselbe Schreibweg wie lehre_put, fest auf art="hinweis". |
lehre_aufnehmen |
id, von, notiz? |
Markiert eine Lehre als gesehen und für richtig befunden. von ist hier Pflicht — die Kern-Route verlangt es, ein Werkzeug ohne dieses Feld würde immer mit 422 scheitern. |
lehre_regel_vorschlagen |
id, sache, regel_text, von, titel?, frage? |
Stellt eine Schaltzentrale-Frage, um aus einer Lehre eine Regel zu machen — schreibt sie nie direkt. Gleicher von-Hinweis wie oben. |
Beurteilung (Personalakte)
Modul mcp/beurteilung_tools.py.
| Werkzeug | Parameter | Liefert |
|---|---|---|
beurteilung_get |
persona_slug |
Die fünfteilige Personalakten-Ansicht (offene Vorschläge, Gelungenes, selbst gemeldete Fehler, Rückfälle, Rückmeldungen des Menschen). |
rollen_vorschlag |
persona_slug, feld, neu, begruendung, lehre_ids, von?, alt? |
Schlägt eine Änderung an einem Persona-Feld vor, mit Lehren belegt. |
Hall of Fame
Modul mcp/hall_of_fame_tools.py. Nur lesend — die Punktevergabe selbst
geschieht im Kern in dem Moment, in dem das zugrundeliegende Ereignis
eintritt; kein Agenten-Werkzeug vergibt Punkte oder Daumen.
| Werkzeug | Parameter | Liefert |
|---|---|---|
hall_of_fame |
woche? |
Die Wochen-Rangliste. |
meine_anerkennung |
persona_slug |
Eigene Daumen-Gesamtzahl und jüngste Historie einer Persona. |
Statistik
Modul mcp/statistik_tools.py.
| Werkzeug | Parameter | Liefert |
|---|---|---|
statistik |
— | Dieselben sechs Blöcke wie GET /statistik, unverändert. |
Export
Modul mcp/export_tools.py — „Eure Daten gehören euch".
| Werkzeug | Parameter | Liefert |
|---|---|---|
export |
format? (json|markdown, Standard json) |
Nur Kopf + Zählung (GET /export/kopf) plus Hinweis auf den vollen REST-Weg — der volle Export (jede Aussage mit Geschichte bzw. das komplette Regelwerk) wäre als Werkzeug-Ausgabe eines Sprachmodells unnötig groß. Für den vollen Export: GET /export?format=json bzw. ?format=markdown direkt gegen den Kern. |
Sichtfeld
gilt, gilt_am, suche und memory_search (dort als
lesende_persona) nehmen die eigene Kennung der aufrufenden Persona
entgegen und filtern die Antwort auf ihr sichtfeld (Sichtbarkeit — eine
Liste von Bereichen). sache_list macht dasselbe, aber unter einem
anderen Parameter (persona_slug, weil persona= auf /sachen schon
„gehört dieser Persona" bedeutet) — derselbe Grund, aus dem
gehoert_persona ein zweiter, unabhängiger Filter ist. alle=True hebt
den Filter bewusst auf und wird als Ereignis protokolliert. Ein 403
(„außerhalb des Sichtfelds") ist bei diesen Werkzeugen ein echter Fehler,
kein leeres Ergebnis — anders als das dokumentierte 404 von gilt.
Was bewusst kein MCP-Werkzeug ist
persona_put/from_vorlage— Aufgabe, Grenzen, Stil und Regeln ändert nur ein Mensch über die Web-Fläche mitrw-Schlüssel.aussage_beenden— das Beenden einer einzelnen Aussage ist dieselbe Art Menschen-Entscheidung wiepersona_put; nurprozess_beendenbekommt eine Ausnahme, weil das Beenden eines Prozesses Teil der routinemäßigen Regelwerk-Pflege eines Agenten ist.- Ein Daumen-Werkzeug — „Stufe eins: nur der Mensch vergibt."
Beim Schreiben dieser Seite gefundene Abweichung
mcp/beurteilung_tools.pys rollen_vorschlag ruft
CoreClient.request(..., json=body) auf, aber CoreClient.request()
nimmt json_body, nicht json entgegen — so geschrieben löst das einen
TypeError aus, bevor der Kern je erreicht wird; der Aufruf übergibt
außerdem kein rw=True, obwohl er schreibt. Hier gemeldet, nicht
repariert — außerhalb des Auftrags dieser Dokumentation.