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.