
BuchhaltungsButler
io.github.ohneben由 GitHub 帳號 ohneben 發布v1.1.5更新於 Oct 29, 2026
BuchhaltungsButler API v1: alle 54 Endpunkte als 46 sicherheitskategorisierte MCP-Tools
概覽
非官方 MCP 伺服器,把 BuchhaltungsButler 會計 API v1 包裝成 46 個附安全分類的工具,讓 AI 助理讀寫記帳資料。
- 可以做什麼
- 查詢科目、成本中心、供應商、客戶、記帳科目、分錄、憑證與交易
- 建立憑證、交易、分錄、發票與草稿、供應商、客戶、科目及備註
- 以 base64 上傳憑證檔案,並將憑證與交易建立或取消關聯
- 修改主檔資料,以及回復狀態(例如取消確認分錄、還原憑證)
- 產生並取得報表(BWA、彙總、總帳),以及刪除或沖銷紀錄
- 適用情境
- 適合在 BuchhaltungsButler 記帳、想用自然語言請助理查詢未處理憑證、草擬發票、登錄銀行交易、上傳單據或取得報表,而不必在網頁介面逐項操作的使用者。
- 執行需求
- 需要開通 API 存取的 BuchhaltungsButler 帳號:BB_API_CLIENT 與 BB_API_SECRET(設定 → API)以及客戶 BB_API_KEY。可透過 Docker(或 Node.js 18+ 原始碼)以 stdio 在本機執行,或作為 HTTP 服務執行;綁定到非回送位址時必須提供 MCP_AUTH_TOKEN。需要連線至 BuchhaltungsButler API 的網路。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 BuchhaltungsButler,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
ohneben's Buchhaltungsbutler MCP
Lizenz & Checks
MCP-Register
[MCP Registry] [Listed on mcpservers.org] [Buchhaltungsbutler-MCP MCP server]
Paketkennungen
Dieser Server hat eigene Kennungen. Was anders heißt, gehört nicht dazu:
Das npm-Paket buchhaltungsbutler-mcp ohne Scope ist ein anderes Projekt eines
anderen Autors (mrvnklm/buchhaltungsbutler-mcp)
und hat mit diesem hier nichts zu tun. Verzeichnisse, die von dieser Seite
dorthin verlinken, verlinken auf das falsche Paket.
Verwalte deine BuchhaltungsButler-Buchhaltung in natürlicher Sprache aus KI-Assistenten wie Claude, Cursor und jedem anderen MCP-Client.
Dieser Model-Context-Protocol-Server stellt die BuchhaltungsButler API v1 bereit — alle 54 Endpunkte als 46 MCP-Tools, aus der offiziellen OpenAPI-Spezifikation (Spec-Version 1.9.1) generiert. Jedes Tool ist sicherheitskategorisiert (nur lesend / schreibend / destruktiv), damit dein Assistent weiß, was eine Aktion tut, bevor er sie ausführt. Läuft über stdio (Claude Desktop und andere lokale Launcher) oder Streamable HTTP (gehostet in Docker).
Warum dieser Server
Manche MCP-Server leiten eine API einfach nur weiter. Dieser hier ist darauf ausgelegt, gefahrlos an ein Sprachmodell übergeben und im Alltag betrieben werden zu können:
Im Vergleich
Nach aktuellem Stand ist dies der einzige dedizierte BuchhaltungsButler-MCP-Server. Alternativ könntest du einen generischen OpenAPI→MCP-Wrapper auf die Spec richten — das lässt allerdings einiges liegen:
*Generische OpenAPI→MCP-Wrapper machen aus jeder Swagger-/OpenAPI-Spec MCP-Tools. Sie erreichen dieselben Endpunkte, behandeln aber jede Operation gleich — keine Sicherheitskategorien, keine Betriebsgeschichte, keine auf echte Buchhaltungsdaten abgestimmten Leitplanken. „➖“ = je nach Werkzeug unterschiedlich / nicht garantiert.
Was du damit machen kannst
Sobald der Server verbunden ist, kannst du deinen Assistenten zum Beispiel bitten:
- „Liste alle Eingangsbelege vom letzten Monat auf, die noch offen sind.“
- „Erstelle einen Rechnungsentwurf für die ACME GmbH: 10 Stunden Beratung à 120 €.“
- „Buche diese Banktransaktion auf Sachkonto 4400.“
- „Lade diesen PDF-Beleg hoch und ordne ihn der passenden Transaktion zu.“
- „Zeig mir meine Kreditoren und leg einen neuen für unseren Hosting-Anbieter an.“
- „Erstelle mir die BWA für das letzte Quartal und zeig mir das Kontenblatt zu Konto 4400.“
Die Tools werden automatisch aus der offiziellen API generiert und in 🟢 nur lesend, 🟡 schreibend und 🔴 destruktiv gruppiert — ein gut umgesetzter Host kann jede Gruppe unterschiedlich behandeln.
Funktionsweise
Der Server liest die mitgelieferte OpenAPI-Spec ein und macht daraus MCP-Tools (inklusive
Auflösung von $ref-Batch-Payloads und Entfernen von HTML aus den Beschreibungen),
versieht jedes Tool mit seiner Sicherheitskategorie und hängt deine Basic-Auth-Credentials
sowie den api_key an jede ausgehende Anfrage. Deine Zugangsdaten bleiben in der
Server-Umgebung — das Modell sieht sie nie und fasst sie nie an.
Voraussetzungen
- Ein BuchhaltungsButler-Konto mit API-Zugang — ein API Client + API Secret
(Einstellungen → API) sowie ein Kunden-
api_key(siehe API-Zugangsdaten besorgen). - Docker (Docker Desktop unter macOS/Windows) für den Schnellstart unten — oder Node.js ≥ 18, um aus dem Quellcode zu starten.
Schnellstart (Docker)
1. Zugangsdaten hinterlegen. Beispielkonfiguration kopieren und ausfüllen:
2. Server starten:
3. Prüfen, ob er läuft:
4. MCP-Client verbinden. Entfernte Endpunkte werden in Claude als Custom Connector
hinzugefügt (Einstellungen → Connectors) oder lokal mit
mcp-remote gebrückt. Trage Folgendes unter
mcpServers in deiner Client-Konfiguration ein und starte die App danach vollständig neu:
(Die --header-Zeile entfällt nur, wenn du ohne Token auf Loopback bindest.
Im Docker-Schnellstart oben ist das Token Pflicht.)
Lieber ein fertiges Image?
Jeder Push auf main veröffentlicht ein startbereites Image in der GitHub Container
Registry — damit kannst du den lokalen Build komplett überspringen:
API-Zugangsdaten besorgen
BuchhaltungsButler nutzt zwei Authentifizierungsebenen (siehe die offizielle Dokumentation):
- HTTP-Basic-Auth — ein API Client + API Secret, deine globalen API-Zugangsdaten. Zu finden bzw. anzulegen in BuchhaltungsButler unter Einstellungen → API.
api_key— legt fest, auf welches Kundenkonto sich eine Anfrage bezieht. Er steht in den Firmendaten-Einstellungen des jeweiligen Kunden.
Trage alle drei Werte in .env ein. Der Server hängt sie an jede Anfrage an, dein
Assistent bekommt sie also nie zu sehen. Ein einzelner Tool-Aufruf kann optional einen
eigenen api_key mitgeben, um ein anderes Kundenkonto anzusprechen.
Konfiguration
Alles wird in .env gesetzt (kopiert aus .env.example):
Nach Änderungen an .env neu laden mit docker compose up -d --force-recreate.
Toolnamen
Jedes Tool heißt <ressource>_<verb>. Die Verben sind fest: list, get,
create, update, delete, upload, assign, unassign, unconfirm,
restore, cancel. Damit heißt dieselbe Sache überall gleich, unabhängig
davon, wie der jeweilige BB-Pfad geschrieben ist (die API mischt add und
create, und zwei Batch-Pfade sind camelCase).
Anlegen geht immer über ein Tool, das eine Liste nimmt. receipts_create
legt einen Beleg oder hundert an, ein einzelner Datensatz ist eine Liste mit
einem Eintrag. Deshalb gibt es 46 Tools für 54 Endpunkte: acht
Einzel-Endpunkte sind in ihrem Batch-Gegenstück aufgegangen.
Alte Namen bleiben aufrufbar
Die Namen bis 1.1.1 funktionieren weiter. Sie stehen nicht mehr im Katalog,
werden aber beim Aufruf aufgelöst, damit fest verdrahtete Aufrufe aus
älteren Releases nicht ins Leere laufen. Ein Aufruf von receipts_add mit
Einzelfeldern landet weiterhin auf /receipts/add.
BB_READ_ONLY und BB_TOOL_ALLOWLIST greifen vorher: über einen alten Namen
lässt sich kein Tool erreichen, das die Policy ausschließt.
Die vollständige Zuordnung steht in src/naming.ts.
Sicherheitskategorien der Tools
Jede Tool-Beschreibung beginnt mit einem dieser Banner und trägt die passenden MCP-Annotationen:
Hosts, die Annotationen respektieren (Claude gehört dazu), können für
destructiveHint-Tools eine Bestätigung verlangen und readOnlyHint-Tools
automatisch vertrauen.
Jedes Tool bringt zusätzlich ein outputSchema mit, also die Form der
Erfolgsantwort. Erfolgreiche Aufrufe liefern die Antwort deshalb nicht nur als
Text, sondern auch als structuredContent.
Mit
npm run list-tools(ohne Zugangsdaten) lässt sich der vollständige Katalog jederzeit ausgeben.
🟢 READ-ONLY (15)
🟡 WRITE · legt Daten an (17)
Tools mit zwei Endpunkten nehmen eine Liste. Kommt der Aufruf stattdessen mit Einzelfeldern, geht er an den Einzel-Endpunkt.
🟡 WRITE · ändert (4) · verknüpft (3) · nimmt zurück (4)
🔴 DESTRUCTIVE · löscht (3)
Was die v1-API nicht kann
Diese Lücken stehen absichtlich auch in den Tool-Beschreibungen, damit das Modell nicht nach einem Endpunkt sucht, den es nicht gibt:
Aus dem Quellcode starten (stdio, ohne Docker)
Du bevorzugst den klassischen stdio-Modus für Claude Desktop? Dann lokal bauen:
Anschließend Claude Desktop in claude_desktop_config.json auf den kompilierten
Einstiegspunkt zeigen lassen:
Oder den Container stattdessen über stdio betreiben:
(Das Image vorher bauen: docker build -t buchhaltungsbutler-mcp:latest .)
Spec aktuell halten
Die mitgelieferte spec.json ist die offizielle BuchhaltungsButler-v1-OpenAPI-Spec — die
maßgebliche Quelle für die Tools. So aktualisierst du sie auf einen neueren API-Stand:
Neue Pfade werden automatisch übernommen; trage sie in PATH_CATEGORY in
src/categories.ts ein, damit sie die richtige Sicherheitskategorie bekommen (nicht
zugeordnete Pfade fallen konservativ auf die Kategorie create zurück).
Hinweis zur Versionsnummer: BuchhaltungsButler pflegt das Feld
info.versionin der Spec nicht zuverlässig — der Inhalt kann sich ändern, ohne dass die Nummer steigt. Verlass dich beim Abgleich also nicht auf die Version, sondern vergleiche die Pfadliste (paths) und die Parameter der Endpunkte.
Entwicklung
Hinweise zu korrigierten Buchungs- und Zuordnungsantworten, Teilfehlern und unklarem Schreibausgang: Belege buchen und Zahlungen zuordnen.
Die CI baut und testet jeden Push unter Node 20 und 22; Pushes auf main veröffentlichen
zusätzlich ein Docker-Image in der GitHub Container Registry.
Für eine ergänzende Prüfung mit einem eigenen API-Zugang siehe Lesende API-/MCP-Verifikation. Die normale Testsuite verwendet synthetische Daten und benötigt keine Zugangsdaten.
Hinweise & Konventionen
- Datumsangaben:
YYYY-MM-DD. Beträge: Punkt als Dezimaltrennzeichen (z. B.-12.30). - Datei-Uploads (
receipts_upload): Die Datei wird als Base64-Zeichenkette im Feldfileübergeben.receipts_createlegt Belege ohne Datei an. - Blättern: Die meisten
list-Tools akzeptierenlimitundoffset. Bei den geprüften Beleg-, Transaktions- und Buchungslisten zähltrowsnur die aktuelle Seite, nicht den Gesamtbestand. Wiederholte IDs und fehlenden Fortschritt erkennen. Eine leere Abschlussseite und Deduplizierung beweisen keine Vollständigkeit: gefilterte Transaktionsseiten haben sich im Praxistest überschnitten, während andere IDs fehlten. Fürtransactions_listbevorzugtid_by_customer_frommit konstanten Filtern undlimit, ohneoffset, nutzen: Der Cursor ist exklusiv und erzwingt aufsteigende ID-Sortierung. Bei 0 beginnen, anschließend die größte erhaltene ID unverändert als nächsten Cursor setzen; IDs und Fortschritt prüfen, bis zur leeren Seite fortsetzen und unabhängig abstimmen. Details und Grenzen: lesende Verifikation. - Einzelabrufe:
receipts_get_by_idundtransactions_get_by_idbenötigenid_by_customerals positive ganze Zahl aus dem jeweiligen Listentool. Der Server setzt diese Nummer in den API-Pfad ein. - Anlegen geht immer über ein Tool, das ein Array nimmt; die Item-Schemata werden aus den Spec-Definitionen aufgelöst und dem Modell mitgegeben. Ein einzelner Datensatz ist ein Array mit einem Eintrag.
- Auswertungen (BWA, Summen- und Saldenliste) werden asynchron im Hintergrund
erzeugt: erst
reports_create_*aufrufen, dannreports_get_*mit der zurückgegebenenid_by_customer. Eine neue Auswertung desselben Typs ersetzt die vorherige. - Kontenblatt:
reports_get_sums_ledgerbenötigt nur Buchungskontonummer und Zeitraum; die API liefert es direkt, ohne vorher erzeugte SuSa und ohne Berichts-ID. - Rate-Limit: BuchhaltungsButler erlaubt 100 Anfragen/Kunde/Minute; der Server
drosselt sich selbst bei
BB_RATE_LIMIT(Standard 90), um sicher darunter zu bleiben.
Sicherheit
- Deine API-Zugangsdaten liegen ausschließlich in
.env, und diese Datei ist von Git ausgeschlossen. Committe niemals echte Geheimnisse. Falls doch etwas abfließt, rotiere die Daten unter BuchhaltungsButler → Einstellungen → API. - Der HTTP-Endpunkt verlangt ein Token, sobald er über Loopback hinaus gebunden ist.
Ohne
MCP_AUTH_TOKENverweigert der Server den Start und erklärt im Fehlertext, was zu tun ist. Sende das Token alsAuthorization: Bearer <Token>-Header, idealerweise hinter TLS. - Auch auf localhost gilt: ohne Token wird der
Host-Header auf localhost-Namen begrenzt, damit keine beliebige Webseite den Endpunkt per DNS-Rebinding ansprechen kann. Hinter einem Reverse-Proxy setzt du dafürMCP_ALLOWED_HOSTS. - Hinter einem Reverse-Proxy setzt du den
Host-Header im Proxy am besten fest auf den internen Upstream-Namen und trägst genau diesen inMCP_ALLOWED_HOSTSein. Dann hängt die Prüfung nicht an der öffentlichen Domain und übersteht einen Domainwechsel. (Tipp von @WinFuture23.) - Setzt du
MCP_ALLOWED_HOSTSund hat deine Plattform einen HTTP-Health-Check, muss dessen Hostname mit in die Liste. Railway sendetHost: healthcheck.railway.app, Kubernetes-Probes fragen je nach Konfiguration über die Container-IP an. Fehlt der Name, bekommt der Health-Check eine 403 und die Plattform wertet das Deployment als kaputt. /healthliegt hinter der Host-Prüfung, aber vor der Token-Prüfung: ein Health-Check der Plattform braucht kein Token. Zusätzlich akzeptiert/healthimmerlocalhost,127.0.0.1und[::1], damit derHEALTHCHECKaus dem mitgelieferten Dockerfile weiterläuft, wenn duMCP_ALLOWED_HOSTSauf deine öffentliche Domain setzt. Fragt dein Health-Check dagegen über die Container-IP oder einen Service-Namen an, musst du diesen Namen inMCP_ALLOWED_HOSTSaufnehmen.- Der
api_keypro Tool-Aufruf ist standardmäßig deaktiviert (BB_ALLOW_API_KEY_OVERRIDE=1schaltet ihn frei), damit das Modell nicht selbst entscheiden kann, auf welchen Mandanten geschrieben wird.
Die vollständige Richtlinie und den Meldeweg für Sicherheitslücken findest du in SECURITY.md.
Credits & Lizenz
Eine inoffizielle Community-Integration für BuchhaltungsButler; weder mit BuchhaltungsButler verbunden noch von dort unterstützt. Basiert auf dem Model Context Protocol. Veröffentlicht unter der MIT-Lizenz.
來源:README.md,提交 92a7040
工具
0版本歷史
4- v1.1.5最新Oct 29, 2026
- v1.1.4Oct 6, 2026
- v1.1.3Sep 26, 2026
- v1.1.2Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分