| 6000 | 2’400.00 | |
| 1020 | 2’400.00 |
MCP trifft Hauptbuch: Darf ein KI-Agent buchen?
Veröffentlicht Aktualisiert 9 Min. Lesezeit
Die kurze Antwort
Ja, wenn das Hauptbuch die Regeln durchsetzt und nicht der Agent. In TILL, einem quelloffenen ERP für die Schweiz, bucht ein Agent über das MCP-Verb post_entry. Jeder Aufruf trägt einen Idempotenzschlüssel, damit eine Wiederholung nie doppelt zählt. Standardmässig wird die Buchung ein Vorschlag, den ein Mensch freigibt. Die Engine lehnt Unausgeglichenes und gesperrte Perioden ab, und Gebuchtes wird nur noch storniert, nie geändert.
Nachtrag vom 14.10.2026: TILL ist jetzt eine öffentliche Beta (Version 1.0.0-beta.1), und die Nomadik GmbH führt ihre eigenen Bücher darin. Wo dieser Artikel TILL als Pre-Alpha bezeichnet, beschreibt er den Stand beim Schreiben. Wer wechselt, lässt sein bisheriges Programm weiterlaufen, bis die Zahlen übereinstimmen.
Warum ein Agent ein Hauptbuch braucht, das Nein sagt
Ein Sprachmodell wiederholt Aufrufe, wenn eine Antwort ausbleibt. Es liest ein Konto falsch, rundet einen Betrag oder bucht dieselbe Rechnung zweimal, weil sie in zwei E-Mails vorkam. Ein besserer Prompt macht das seltener, aber nicht unmöglich. Die Frage ist darum nicht, ob der Agent Fehler macht. Die Frage ist, welche Fehler das System überhaupt annimmt.
Die Buchhaltung hat diese Frage vor Jahrhunderten beantwortet: doppelte Buchführung, Belege, keine Radierungen, Korrektur durch Gegenbuchung. Ein Hauptbuch für Agenten muss dieselben Regeln haben, nur maschinell durchgesetzt statt per Anweisung. Dieser Artikel zeigt an einem echten Aufruf, wie TILL das macht.
MCP in einem Absatz
Das Model Context Protocol (MCP) ist ein offenes Protokoll, über das ein KI-Client Werkzeuge auf einem Server aufruft. Der Server beschreibt jedes Werkzeug mit Namen, Eingabeschema und Beschreibung, der Agent wählt eines und schickt die Argumente. In TILL ist der MCP-Server keine Zusatzfunktion, sondern die Schnittstelle: till mcp spricht über stdio mit einem lokalen Agenten, till serve öffnet dieselben Verben über HTTP auf localhost. Das Studio, die Oberfläche für Menschen, benutzt dieselben Verben. Mehr dazu auf der Seite Agenten.
Ein Aufruf, bis ganz nach unten verfolgt
Du sagst deinem Agenten: «Buche die Septembermiete, CHF 2’400.00, bezahlt ab dem Bankkonto.» Der Agent sucht mit list_accounts die Konten 6000 (Miete und Nebenkosten Geschäftsräume) und 1020 (Bank) und ruft dann post_entry auf:
{
"workspaceId": "ws_demo",
"date": "2026-09-30",
"description": "Miete September 2026",
"source": "agent",
"idempotencyKey": "rent-2026-09",
"lines": [
{ "account": "<ID von 6000>", "debit": 240000 },
{ "account": "<ID von 1020>", "credit": 240000 }
]
}list_accounts. Miete ist von der MWST ausgenommen, ausser der Vermieter optiert (MWSTG Art. 21 Abs. 2 Ziff. 21, Art. 22). Dieser hat nicht optiert, darum gibt es keine Steuerzeile.Jeder Aufruf des Agenten über MCP läuft durch dasselbe Gate. Zuerst die Berechtigung: Hat diese Rolle das Recht zu buchen? Dann die Freigabestufe. Steht sie auf «fragen», was ohne andere Einstellung gilt, schreibt TILL nichts ins Hauptbuch. Der Agent erhält einen Vorschlag zurück:
{ "ok": true, "drafted": true, "actionId": "…", "status": "pending",
"dialCapability": "post", "reason": "dial_ask", "replayed": false }Im Studio erscheint der Vorschlag unter Agent, Vorschläge. Gibt ihn ein Mensch frei, spielt TILL den gespeicherten Aufruf im Namen dieses Menschen ab, prüft dessen Berechtigung erneut und verwendet denselben Idempotenzschlüssel. Erst jetzt prüft die Engine die Buchung selbst und hängt sie ans Journal an.
Regel 1: Jede Buchung trägt einen Schlüssel
Netzwerke verlieren Antworten. Ein Agent, der keine Antwort sieht, versucht es nochmals. Ohne Schutz steht die Miete danach zweimal im Journal. Deshalb ist idempotencyKey bei post_entry ein Pflichtfeld.
Die Eindeutigkeit ist in der Datenbank verankert, nicht nur im Code: Eine Tabelle idempotency hat den Primärschlüssel aus Mandant, Verb und Schlüssel. Ergebnis und Schlüssel werden in derselben Transaktion geschrieben. Kommt der Schlüssel wieder, beantwortet TILL den Aufruf mit dem gespeicherten Ergebnis, bevor irgendeine Prüfung läuft, die vom Stand der Bücher abhängt. Für Vorschläge gilt dasselbe: Solange einer offen ist, liefert derselbe Schlüssel denselben Vorschlag und keinen zweiten.
Die Konformitätsprüfung ruft jedes schreibende Verb zweimal mit identischer Eingabe auf und verlangt, dass der zweite Aufruf nichts verändert. post_entry wird zusätzlich über den echten MCP-Weg doppelt gesendet und muss genau eine Buchung hinterlassen.
Regel 2: Der Agent schlägt vor, ein Mensch entscheidet
Die Freigabestufe gilt pro Fähigkeit. Auf «fragen» wird jede Buchung ein Vorschlag. Auf «automatisch» bucht der Agent direkt, aber nur, wenn ein Mensch diese Stufe gesetzt hat. Das Markieren einer MWST-Periode als eingereicht hat eine starke Voreinstellung: Keine Sammeleinstellung schaltet es frei, nur eine ausdrückliche Freigabe genau dieser Fähigkeit.
- Der Agent kann seine eigenen Vorschläge nicht freigeben (
cannot_self_approve). - Er kann seine eigene Stufe nicht erhöhen (
cannot_self_grant). - Die eingebaute Rolle
agentdarf buchen und Entwürfe erstellen, aber keine Dokumente versenden. - Jeder Aufruf auf dem Agentensitz hinterlässt eine Spur: ausgeführt, als Vorschlag abgelegt oder abgelehnt, mit Grund und Fehlercode.
Das ist die Voreinstellung, keine Pflicht. Wer einem Agenten nach einigen Wochen vertraut, stellt einzelne Fähigkeiten auf «automatisch» und behält die übrigen auf «fragen».
Regel 3: Was nicht aufgeht, wird nicht gebucht
Bevor irgendetwas geschrieben wird, prüft die Engine die Buchung vollständig. Eine Ablehnung ist kein Protokollfehler, sondern ein normales Ergebnis mit ok: false und einem Code, den der Agent lesen und korrigieren kann:
| Code | Bedeutung |
|---|---|
unbalanced | Soll und Haben sind nicht gleich. Gerechnet wird in ganzen Rappen, ohne Gleitkomma. |
invalid_account | Das Konto existiert in diesem Mandanten nicht. |
period_locked | Die Periode ist gesperrt, etwa nach einer eingereichten MWST-Abrechnung. |
unknown_tax_code | Der MWST-Code ist nicht eingerichtet. |
vat_trace_unreconciled | Die MWST-Angaben der Zeilen passen nicht zur Buchung. |
needs_fx_rate | Fremdwährung ohne zulässigen Kurs. |
Jedes Verb, das Bücher berührt, verlangt eine workspaceId, und jede Abfrage ist auf diesen Mandanten beschränkt. Ein Agent, der mehrere Firmen betreut, kann Konten der einen nicht in der anderen verwenden.
Regel 4: Gebucht ist gebucht
In echten Büchern lässt sich eine gebuchte Buchung weder ändern noch löschen. Die Datenbank hat Trigger, die jede Änderung und jedes Löschen einer gebuchten Buchung oder Zeile mit posted_immutable abbrechen. Die Korrektur ist ein Storno: reverse_entry bucht eine Spiegelbuchung mit vertauschten Seiten.
- Jede Buchung kann genau einmal storniert werden. Ein eindeutiger Index in der Datenbank verhindert ein zweites Storno.
- Buchungen, die zu einem Beleg gehören, etwa zu einer Zahlung, werden über das Verb dieses Belegs storniert, nicht direkt.
- Eine Periode kann gesperrt werden. Nach einer eingereichten MWST-Abrechnung oder dem Jahresabschluss ist die Sperre versiegelt.
Was das nicht löst
Diese Regeln verhindern doppelte, unausgeglichene und nachträglich geänderte Buchungen. Sie verhindern nicht, dass ein Agent das falsche Konto wählt. Eine Miete auf 6500 statt 6000 geht auf, ist ausgeglichen und wird nach der Freigabe gebucht. Darum ist die Freigabe die Voreinstellung, und darum zeigt der Vorschlag die Zeilen, nicht nur eine Zusammenfassung.
Die HTTP-Schnittstelle von till serve ist an localhost gebunden und hat keine eigene Authentifizierung. Welchen Sitz ein Client dort erhält, bestimmt, wie er sich selbst nennt. Nur till mcp über stdio legt den Agentensitz fest. Die HTTP-Schnittstelle gehört darum nicht ins Netz, und ein Agent sollte über stdio angebunden werden. Und TILL ist Pre-Alpha: Der Code ist öffentlich, aber noch nicht bereit für echte Bücher. Mehr zu den Grenzen auf der Seite Sicherheit.
Eine Checkliste für jeden MCP-Server einer Buchhaltung
Wer einen Agenten an eine Buchhaltung anschliesst, egal an welche, kann diese Fragen stellen:
- Verlangt jedes Werkzeug, das doppelt zählen kann, einen Idempotenzschlüssel, und ist die Eindeutigkeit in der Datenbank erzwungen?
- Kommen Ablehnungen als lesbares Ergebnis mit Code zurück, damit der Agent korrigieren kann?
- Ist Gebuchtes unterhalb der Anwendung unveränderlich, oder nur in der Oberfläche?
- Wird eine Buchung des Agenten standardmässig ein Vorschlag, den ein Mensch freigibt?
- Kann der Agent seine eigenen Rechte erhöhen oder seine eigenen Vorschläge freigeben?
- Hinterlässt jeder Aufruf eine Spur mit Ergebnis und Grund?
- Sind Beträge ganze Zahlen in der kleinsten Einheit statt Gleitkommazahlen?
- Ist jeder Aufruf auf genau einen Mandanten beschränkt?
Häufige Fragen
Kann ChatGPT oder Claude meine Buchhaltung führen?
Ein Sprachmodell führt keine Bücher, es bedient ein Programm, das Bücher führt. Über MCP kann ein Agent wie Claude die Werkzeuge einer Buchhaltung aufrufen. Ob das sicher ist, hängt davon ab, was die Buchhaltung ablehnt: doppelte Aufrufe, unausgeglichene Buchungen, Änderungen an Gebuchtem.
Was ist ein MCP-Server für die Buchhaltung?
Ein Programm, das die Funktionen einer Buchhaltung als Werkzeuge im Model Context Protocol anbietet, etwa «Buchung erfassen» oder «Saldenliste abrufen». Ein KI-Client wie Claude Desktop verbindet sich damit und ruft die Werkzeuge auf. In TILL ist der MCP-Server die Hauptschnittstelle.
Was passiert, wenn der Agent dieselbe Rechnung zweimal bucht?
Mit demselben Idempotenzschlüssel gibt TILL das ursprüngliche Ergebnis zurück und schreibt nichts Neues. Mit einem anderen Schlüssel wären es zwei Aufrufe. Darum leitet ein guter Agent den Schlüssel aus dem Beleg ab, etwa aus Lieferant und Rechnungsnummer, und nicht aus der Uhrzeit.
Kann ein KI-Agent eine Buchung löschen oder ändern?
In TILL nein. Gebuchte Buchungen sind in der Datenbank gegen Änderung und Löschung gesperrt. Korrigiert wird mit einem Storno, das eine Gegenbuchung erzeugt. Beide Buchungen bleiben sichtbar.
Bucht der Agent ohne meine Freigabe?
Nicht in der Voreinstellung. Fast jede Buchung des Agenten wird ein Vorschlag, den du im Studio freigibst oder ablehnst. Du kannst einzelne Fähigkeiten auf «automatisch» stellen. Der Agent selbst kann das nicht.
Kann ich TILL schon für meine echte Buchhaltung verwenden?
Noch nicht. TILL ist Pre-Alpha, quelloffen unter MIT und öffentlich auf GitHub. Die Engine ist weit gebaut, aber nicht bereit, echte Bücher zu führen.