Eigene Anbindung
LLM mit der Buchhaltung verbinden
Jedes große Sprachmodell mit Function-Calling kann deine echten Bücher bedienen — es muss die REST-API nur als Werkzeug beschrieben bekommen. Für Clients, die das Model Context Protocol sprechen, ist MCP der einfachste Weg: einmal andocken, und das Modell sieht fertige, benannte Werkzeuge. Diese Seite erklärt beides — das Konzept hinter Function-Calling und die praktische Einrichtung — und hält dabei die Grenze klar: Es geht um Buchhaltungsdaten und Buchungen, nicht um den Abschluss.
Wie ein LLM die Buchhaltung bedient
Das Modell schreibt keine Datenbank-Abfragen — es ruft klar umrissene Funktionen auf, die du ihm als Werkzeuge gibst.
Function-Calling bedeutet: Du beschreibst dem Modell eine Handvoll Funktionen — etwa „Saldenliste holen“ oder „Ausgangsrechnung buchen“ — und was sie erwarten. Das Modell entscheidet, welche es aufruft, und dein Code führt den zugehörigen REST-Aufruf aus. Das Modell selbst berührt weder den Schlüssel noch die Datenbank direkt.
Genau diese Trennung macht die Anbindung sicher: Das LLM plant, dein Programm setzt um, und jeder Aufruf trifft die feste Endpunkt-Liste. Es gibt kein SQL und keine freie Abfrage, die das Modell missbrauchen könnte.
MCP: der einfachste Weg für MCP-fähige Clients
Wenn dein Client MCP spricht, sparst du dir die eigene Werkzeug-Definition.
Der MCP-Server ist ein dünner Adapter über derselben REST-API und stellt vierzehn fertige Werkzeuge bereit — zehn lesende, vier schreibende. Gleicher Schlüssel, gleiche Scopes, gleiche GoBD-Regeln. Der Client zeigt dem Modell die Werkzeuge, ohne dass du sie selbst beschreiben musst.
Der Remote-Zugang ist gehostet und sofort einsatzbereit — du hinterlegst nur Adresse und Schlüssel. Einen lokalen Weg über npx gibt es ebenfalls, das npm-Paket ist aber noch nicht veröffentlicht; nutze deshalb zunächst den Remote-Weg als verlässliche Variante.
MCP-Server anmelden
Zwei Zeilen genügen, um die Buchhaltung als Werkzeugquelle bei einem MCP-fähigen Client zu registrieren.
# MCP-Server (remote, gehostet — nichts zu installieren) claude mcp add --transport http buchhaltung \ "$MCP_URL" --header "Authorization: Bearer jab_live_…"
Ohne MCP: Werkzeuge selbst definieren
Modelle ohne MCP bekommen die Endpunkte als Funktionen beschrieben — dein Code führt sie aus.
- Definiere je Endpunkt eine Funktion, z. B. get_saldenliste(fiscal_year) → GET /saldenliste und post_outgoing_invoice(kunde, netto, steuersatz) → POST /outgoing-invoices.
- Gib nur die Funktionen frei, die der Anwendungsfall braucht — ein reines Auswerte-Szenario kommt ohne Schreib-Funktionen aus, passend zum read-Scope des Schlüssels.
- Halte den Schlüssel in deinem Code, nie im Prompt oder im Modellkontext. Das Modell nennt nur die Funktion und ihre Argumente; den Authorization-Header setzt dein Programm.
- Validiere die Argumente an der Systemgrenze, bevor du buchst — das Modell schlägt vor, dein Code entscheidet, ob und wie gebucht wird.
Vertrauen: Regeln, die das Modell nicht umgehen kann
Egal wie clever der Prompt ist — der Buchungskern bleibt der Torwächter.
Jede Schreib-Anfrage läuft durch denselben Kern wie die Eingabe im Programm: append-only, Festschreibung, Storno statt Löschen, Soll gleich Haben. Ein LLM kann diese Regeln nicht überreden. Ein read-Schlüssel kann ohnehin nichts verändern.
Die Schnittstelle bleibt auf die Buchhaltung begrenzt. Das Modell erstellt darüber keinen Jahresabschluss, keine E-Bilanz und keine Steuererklärung — es bereitet höchstens die Zahlen vor, die du anschließend im Programm in den Abschluss überführst.
Häufige Fragen
Welche LLMs kann ich anbinden?
Jedes mit Function- oder Tool-Calling. Du beschreibst die REST-Endpunkte als Funktionen, das Modell ruft sie auf, dein Code führt den Aufruf aus. Für MCP-fähige Clients geht es über MCP sogar ohne eigene Werkzeug-Definition.
Sieht das Modell meinen Schlüssel?
Nein, wenn du es richtig baust. Der Schlüssel bleibt in deinem Code oder im MCP-Client; das Modell nennt nur Funktionsname und Argumente. Den Authorization-Header setzt dein Programm, nicht das Modell.
Ist MCP oder Function-Calling besser?
MCP, wenn dein Client es unterstützt — es liefert fertige, benannte Werkzeuge über denselben Schlüssel und dieselben Scopes. Ohne MCP definierst du die Funktionen selbst; das Ergebnis ist dasselbe Regelwerk auf denselben Endpunkten.
Kann das Modell etwas Unwiderrufliches buchen?
Nein. Buchungen sind append-only und festgeschrieben; korrigiert wird nur per Storno. Mit read-Scope kann das Modell gar nicht buchen, und du validierst Argumente an der Systemgrenze, bevor eine Schreib-Funktion ausgeführt wird.
Kann das LLM meine Steuererklärung machen?
Nein. Die Schnittstelle liefert Buchhaltungsdaten und bucht Belege. Sie erstellt keinen Jahresabschluss, keine E-Bilanz und keine Steuererklärung — dieser Schritt geschieht bewusst im Programm mit seinen Prüfungen.