Skip to main content
Glama
ohneben

Buchhaltungsbutler MCP

ohneben's Buchhaltungsbutler MCP

Buy Me A Coffee

CI Image & MCP-Registry veröffentlichen Lizenz: MIT Buchhaltungsbutler-MCP MCP server

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, automatisch aus der offiziellen OpenAPI-Spezifikation (Spec-Version 1.9.1) als MCP-Tools 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:

Was du bekommst

Warum das zÀhlt

Alle 54 Endpunkte, automatisch generiert aus der offiziellen Spec

VollstĂ€ndige Abdeckung von Belegen, Transaktionen, Buchungen, Rechnungen, Auswertungen und Stammdaten — nichts handverlesen, nichts vergessen.

Jedes Tool ist sicherheitskategorisiert 🟱 / 🟡 / 🔮

Ein Banner am Anfang jeder Tool-Beschreibung sagt dem Modell genau, was passiert — lesen, anlegen, Ă€ndern, zurĂŒcknehmen oder löschen — bevor es handelt.

Maschinenlesbare MCP-Annotationen (readOnlyHint, destructiveHint)

Hosts, die Annotationen auswerten (Claude gehört dazu), können Lesezugriffe automatisch zulassen und vor destruktiven Aktionen eine BestÀtigung verlangen.

Zwei Transporte: stdio und Streamable HTTP

Lokal in Claude Desktop nutzen — oder einen dauerhaft laufenden Server betreiben, den beliebig viele MCP-Clients ĂŒber HTTP erreichen.

Docker + docker-compose, Health-Check, Auto-Restart

Produktionsnahes Deployment ab Werk: docker compose up, und er bleibt oben.

Optionale Bearer-Token-Authentifizierung am HTTP-Endpunkt

Sichere den Server mit einem gemeinsamen Geheimnis ab, sobald er ĂŒber localhost hinaus erreichbar ist.

Eingebautes Rate-Limiting

Drosselt sich selbst unter dem BuchhaltungsButler-Limit von 100 Anfragen/Kunde/Minute, damit du nie dagegenlÀufst.

Deine Zugangsdaten erreichen das Modell nie

Die Credentials liegen in der Server-Umgebung und werden pro Anfrage injiziert — der Assistent sieht nur Tool-Eingaben und API-Antworten.

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:

FĂ€higkeit

Dieses Projekt

Generischer OpenAPI→MCP-Wrapper*

Alle 54 BuchhaltungsButler-Endpunkte als Tools

✅

✅

🟱 / 🟡 / 🔮 Sicherheitskategorie + Banner pro Tool

✅

❌

readOnlyHint / destructiveHint MCP-Annotationen

✅

➖

$ref-Auflösung fĂŒr Batch-Payloads + HTML-bereinigte Beschreibungen

✅

➖

Eingebautes Rate-Limiting (bleibt unter BBs 100/Kunde/Min.)

✅

❌

stdio-Transport

✅

✅

Streamable-HTTP-Transport

✅

➖

Docker + docker-compose, Health-Check, Auto-Restart

✅

❌

Optionale Bearer-Token-Auth am Endpunkt

✅

❌

Credentials serverseitig injiziert, nie ans Modell gesendet

✅

➖

Lizenz

MIT

unterschiedlich

*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.

Related MCP server: billforward-mcp

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

Claude / Cursor / beliebiger MCP-Client  ──MCP──â–ș  dieser Server  ──HTTPS──â–ș  BuchhaltungsButler API (Cloud)

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:

cp .env.example .env
# .env bearbeiten → BB_API_CLIENT, BB_API_SECRET, BB_API_KEY setzen
#                 → MCP_AUTH_TOKEN auf eine lange Zufallszeichenkette setzen,
#                   falls der Server ĂŒber localhost hinaus erreichbar ist

2. Server starten:

docker compose up -d --build

3. PrĂŒfen, ob er lĂ€uft:

curl -s http://localhost:3000/health     # → {"status":"ok","server":"buchhaltungsbutler-mcp"}

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:

{
  "mcpServers": {
    "buchhaltungsbutler": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://localhost:3000/mcp",
        "--header", "Authorization: Bearer DEIN_MCP_AUTH_TOKEN"
      ]
    }
  }
}

(Die --header-Zeile entfÀllt, wenn du MCP_AUTH_TOKEN leer gelassen hast.)

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:

docker run -d --name buchhaltungsbutler-mcp -p 3000:3000 --env-file .env \
  ghcr.io/ohneben/buchhaltungsbutler-mcp:latest

API-Zugangsdaten besorgen

BuchhaltungsButler nutzt zwei Authentifizierungsebenen (siehe die offizielle Dokumentation):

  1. HTTP-Basic-Auth — ein API Client + API Secret, deine globalen API-Zugangsdaten. Zu finden bzw. anzulegen in BuchhaltungsButler unter Einstellungen → API.

  2. 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):

Variable

Pflicht

Standard

Beschreibung

BB_API_CLIENT

✅

—

API Client (Basic-Auth-Benutzername)

BB_API_SECRET

✅

—

API Secret (Basic-Auth-Passwort)

BB_API_KEY

✅

—

Standard-Kunden-api_key

MCP_TRANSPORT

—

stdio

stdio oder http (das Docker-Image nutzt standardmĂ€ĂŸig http)

PORT

—

3000

HTTP-Port, auf dem gelauscht wird

HOST

—

0.0.0.0

HTTP-Bind-Adresse

MCP_HTTP_PATH

—

/mcp

HTTP-Route fĂŒr MCP

MCP_AUTH_TOKEN

—

(aus)

Verlangt Authorization: Bearer <Token> auf /mcp

BB_RATE_LIMIT

—

90

Clientseitiges Limit an Anfragen pro Minute

BB_BASE_URL

—

(aus der Spec)

Überschreibt die Basis-URL der API

Nach Änderungen an .env neu laden mit docker compose up -d --force-recreate.

Sicherheitskategorien der Tools

Jede Tool-Beschreibung beginnt mit einem dieser Banner und trÀgt die passenden MCP-Annotationen:

Banner

Anzahl

readOnlyHint

destructiveHint

Bedeutung

🟱 READ-ONLY

15

true

false

Ruft nur Daten ab. UngefÀhrlich.

🟡 WRITE · legt Daten an

24

false

false

Erzeugt DatensĂ€tze (nicht idempotent — mehrfach aufgerufen entstehen Duplikate).

🟡 WRITE · Ă€ndert Daten

4

false

false

Ändert bestehende Stammdaten direkt.

🟡 WRITE · verknĂŒpft/löst

4

false

false

Ordnet Beleg ↔ Transaktion zu bzw. hebt die Zuordnung auf. Umkehrbar.

🟡 WRITE · nimmt Zustand zurĂŒck

4

false

false

Setzt Buchungen auf unbestÀtigt / stellt Belege wieder her. Umkehrbar.

🔮 DESTRUCTIVE · löscht

3

false

true

Löscht oder storniert einen Datensatz. Vorher bestÀtigen lassen.

Hosts, die Annotationen respektieren (Claude gehört dazu), können fĂŒr destructiveHint-Tools eine BestĂ€tigung verlangen und readOnlyHint-Tools automatisch vertrauen.

Mit npm run list-tools (ohne Zugangsdaten) lÀsst sich der vollstÀndige Katalog jederzeit ausgeben.

Tool

Endpunkt

accounts_get

POST /accounts/get

cost_locations_get

POST /cost-locations/get

postings_get

POST /postings/get

receipts_get

POST /receipts/get

receipts_get_id_by_customer

POST /receipts/get/id_by_customer

receipts_assigned_transactions_get

POST /receipts/assigned-transactions/get

reports_get_bwa

POST /reports/get/bwa

reports_get_sums

POST /reports/get/sums

reports_get_sums_ledger

POST /reports/get/sums/ledger

transactions_get

POST /transactions/get

transactions_get_id_by_customer

POST /transactions/get/id_by_customer

transactions_assigned_receipts_get

POST /transactions/assigned-receipts/get

settings_get_creditors

POST /settings/get/creditors

settings_get_debtors

POST /settings/get/debtors

settings_get_postingaccounts

POST /settings/get/postingaccounts

Tool

Endpunkt

accounts_add

POST /accounts/add

comments_add

POST /comments/add

cost_locations_add

POST /cost-locations/add

invoices_create

POST /invoices/create

invoices_create_draft

POST /invoices/create/draft

invoices_create_e_invoice

POST /invoices/create/e-invoice

postings_add_free

POST /postings/add/free

postings_add_receipt

POST /postings/add/receipt

postings_add_transaction

POST /postings/add/transaction

postings_add_batch_free

POST /postings/add-batch/free

postings_add_batch_receipts

POST /postings/add-batch/receipts

postings_add_batch_transactions

POST /postings/add-batch/transactions

receipts_add

POST /receipts/add

receipts_addBatch

POST /receipts/addBatch

receipts_upload

POST /receipts/upload

reports_create_bwa

POST /reports/create/bwa

reports_create_sums

POST /reports/create/sums

settings_add_creditor

POST /settings/add/creditor

settings_add_debtor

POST /settings/add/debtor

settings_add_postingaccount

POST /settings/add/postingaccount

settings_add_batch_creditors

POST /settings/add-batch/creditors

settings_add_batch_debtors

POST /settings/add-batch/debtors

transactions_add

POST /transactions/add

transactions_addBatch

POST /transactions/addBatch

Tool

Endpunkt

Unterkategorie

cost_locations_update

POST /cost-locations/update

Ă€ndert

settings_update_creditor

POST /settings/update/creditor

Ă€ndert

settings_update_debtor

POST /settings/update/debtor

Ă€ndert

settings_update_postingaccount

POST /settings/update/postingaccount

Ă€ndert

transactions_assign_receipt

POST /transactions/assign/receipt

verknĂŒpft

transactions_assign_batch_receipt

POST /transactions/assign-batch/receipt

verknĂŒpft

transactions_unassign_receipt

POST /transactions/unassign/receipt

verknĂŒpft

postings_assign_receipt_to_free_posting

POST /postings/assign/receipt-to-free-posting

verknĂŒpft

postings_unconfirm_free

POST /postings/unconfirm/free

nimmt zurĂŒck

postings_unconfirm_receipt

POST /postings/unconfirm/receipt

nimmt zurĂŒck

postings_unconfirm_transaction

POST /postings/unconfirm/transaction

nimmt zurĂŒck

receipts_restore_id_by_customer

POST /receipts/restore/id_by_customer

nimmt zurĂŒck

Tool

Endpunkt

Hinweis

receipts_delete_id_by_customer

POST /receipts/delete/id_by_customer

Wiederherstellbar ĂŒber receipts_restore_id_by_customer

cost_locations_delete

POST /cost-locations/delete

Nicht wiederherstellbar

postings_cancel

POST /postings/cancel

Noch nicht festgeschriebene Buchungen werden gelöscht; festgeschriebene werden durch eine Stornobuchung ausgeglichen

Aus dem Quellcode starten (stdio, ohne Docker)

Du bevorzugst den klassischen stdio-Modus fĂŒr Claude Desktop? Dann lokal bauen:

npm install
npm run build

Anschließend Claude Desktop in claude_desktop_config.json auf den kompilierten Einstiegspunkt zeigen lassen:

{
  "mcpServers": {
    "buchhaltungsbutler": {
      "command": "node",
      "args": ["/ABSOLUTER/PFAD/Buchhaltungsbutler MCP/dist/index.js"],
      "env": {
        "MCP_TRANSPORT": "stdio",
        "BB_API_CLIENT": "dein-api-client",
        "BB_API_SECRET": "dein-api-secret",
        "BB_API_KEY": "dein-kunden-api-key"
      }
    }
  }
}

Oder den Container stattdessen ĂŒber stdio betreiben:

{
  "mcpServers": {
    "buchhaltungsbutler": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MCP_TRANSPORT=stdio",
        "-e", "BB_API_CLIENT", "-e", "BB_API_SECRET", "-e", "BB_API_KEY",
        "buchhaltungsbutler-mcp:latest"
      ],
      "env": {
        "BB_API_CLIENT": "dein-api-client",
        "BB_API_SECRET": "dein-api-secret",
        "BB_API_KEY": "dein-kunden-api-key"
      }
    }
  }
}

(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:

curl -s https://app.buchhaltungsbutler.de/docs/api/v1.de.json -o spec.json
npm run build

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.version in 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

npm install
npm run build      # TypeScript → dist/ kompilieren
npm test           # Vitest-Suite ausfĂŒhren
npm run list-tools # kategorisierten Tool-Katalog ausgeben (ohne Zugangsdaten)

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.

Hinweise & Konventionen

  • Datumsangaben: YYYY-MM-DD. BetrĂ€ge: Punkt als Dezimaltrennzeichen (z. B. -12.30).

  • Datei-Uploads (receipts_upload, receipts_add, receipts_addBatch): Die Datei wird als Base64-Zeichenkette im Feld file ĂŒbergeben.

  • BlĂ€ttern: Die meisten get-Tools akzeptieren limit und offset.

  • Batch-Tools erwarten Arrays von Objekten; die Item-Schemata werden aus den Spec-Definitionen aufgelöst und dem Modell mitgegeben.

  • Auswertungen (BWA, Summen- und Saldenliste) werden asynchron im Hintergrund erzeugt: erst reports_create_* aufrufen, dann reports_get_* mit der zurĂŒckgegebenen id_by_customer. Eine neue Auswertung desselben Typs ersetzt die vorherige.

  • 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 ist standardmĂ€ĂŸig nicht authentifiziert (auf localhost unbedenklich). Um ihn ĂŒber deinen Rechner hinaus verfĂŒgbar zu machen, setze MCP_AUTH_TOKEN und sende ihn als Authorization: Bearer <Token>-Header — idealerweise hinter TLS.

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.

Available Tools

54 tools
accounts_addAccounts: add a basic accountC

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add a basic account Add a basic account

Endpoint: POST /accounts/add

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the basic account.
typeYesThe type of the basic account. Accepted values: "cash", "bank/institution", "other".
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
is_revision_safeNoIf you create a basic account of type cash, you can make this revision_safe. That means, you cannot remove already saved transactions without creating a cancellation transaction. NOTE: This will only work for cash accounts! If specified, the field will be validated.
postingaccount_numberYesThe postingaccount_number of the basic account.
receipt_creates_transactionNoIf a receipt assigned to this basic account should automatically create a transaction, this parameter should be true. If specified, the field will be validated.

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description repeats the idempotentHint and mentions it creates data, but the claim that it creates receipts, transactions, etc. is inaccurate for an accounts_add tool, misrepresenting its behavior. This reduces transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description repeats 'Add a basic account' and includes a lengthy generic first sentence that is not specific to this tool, making it somewhat verbose and less concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters and no output schema, the description is insufficient. It does not explain what a basic account is, how it differs from other account types, or what the result looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds no parameter-level details beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a basic account' but the preceding generic statement 'Creates new records (receipts, transactions, postings, invoices, master data)' is overly broad and misleading, confusing the tool's actual purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus siblings like 'accounts_get' or other account-related tools. No prerequisites or business context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

accounts_getAccounts: get all the accountsB
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get all the accounts Get all the accounts

Endpoint: POST /accounts/get

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds 'Fetches data. Makes no changes.' and 'get all the accounts', which clarifies scope (all accounts) but adds no new behavioral traits beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short but contains redundancy: 'get all the accounts' appears twice. The first line with emoji is unnecessary. It could be more concise without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-all tool with one optional param and no output schema, the description covers the basic function. However, it omits details like return format, pagination, or filtering capabilities, which would help given the lack of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully describes the single optional parameter (api_key) with good detail. The tool description adds no parameter information, so it provides no additional value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetches data' and 'get all the accounts', indicating it retrieves all account records. However, it does not differentiate itself from other get tools like cost_locations_get or postings_get, relying solely on the tool name for distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives (e.g., if only a subset of accounts is needed). The description only emphasizes read-only nature, which is already covered by annotations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comments_addComments: add comment to transaction or receiptA

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add comment to transaction or receipt Add comment to transaction or receipt. NOTE: You have to submit either a transaction_id_by_customer or a receipt_id_by_customer.

Endpoint: POST /comments/add

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
comment_textYesThe comment text as a string between 2 and 210 characters.
receipt_id_by_customerNoThe id_by_customer of the receipt. If specified, the field will be validated.
transaction_id_by_customerNoThe id_by_customer of the transaction. If specified, the field will be validated.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description complements annotations by stating 'Not idempotent — calling twice may create duplicates', which is consistent with idempotentHint=false. It also indicates a write operation (readOnlyHint=false, destructiveHint=false). No contradictions; it adds useful duplication warning beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively short and front-loaded with the purpose after a brief generic note. Each sentence serves a purpose: write warning, core function, parameter constraint. The generic WRITE note could be considered redundant if common across tools, but overall it is concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters fully described in schema and no output schema, the description covers the key constraint. However, it lacks information on return values, error behavior, or expected response after adding a comment. While the tool is simple, an agent might benefit from knowing what to expect post-call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While the input schema describes all 4 parameters (100% coverage), the description adds critical constraint: 'You have to submit either a transaction_id_by_customer or a receipt_id_by_customer.' This mutual exclusivity is not evident from individual parameter descriptions, adding significant value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'add comment to transaction or receipt', providing a specific verb and resource. The note about needing either transaction_id_by_customer or receipt_id_by_customer further clarifies the scope. This clearly distinguishes it from sibling tools like accounts_add or receipts_add.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a clear note about the requirement to submit either a transaction_id_by_customer or a receipt_id_by_customer, providing necessary context for when to use this tool. However, it does not explicitly mention when not to use it or compare to alternatives, but the constraint is sufficient for an agent to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cost_locations_addCost Locations: add cost locationB

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add cost location Add a new cost location.

Endpoint: POST /cost-locations/add

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesAn alphanumeric identifier for the cost location (max 10 chars)
nameYesThe name/description of the cost location
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and idempotentHint=false. The description explicitly states 'WRITE · creates data' and warns 'Not idempotent — calling twice may create duplicates,' adding useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably concise but includes a generic introductory line that is not specific to this tool, adding minor redundancy. The structure is acceptable but could be more focused.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the basic purpose and non-idempotence, but lacks details on return value, uniqueness constraints for code or name, and does not leverage the absence of an output schema to explain expected response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The description does not add any extra parameter information beyond what the schema provides, so it meets but does not exceed the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a new cost location.' The title also specifies the tool's function. However, it does not differentiate from sibling tools like cost_locations_update or cost_locations_delete, and a generic intro line about creating records is included but not specifically tied to cost locations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The only behavioral note mentions non-idempotence, but there is no context on prerequisites, conditional use, or when to avoid it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cost_locations_deleteCost Locations: delete cost locationB
DestructiveIdempotent

🔮 DESTRUCTIVE · deletes data — Deletes or cancels a record. Confirm with the user before calling. Receipt deletes are restorable; cost-location deletes are not. Cancelling a posting deletes it if it is not yet fixed, otherwise it books a reversal posting. delete cost location Delete a cost location.

Endpoint: POST /cost-locations/delete

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe cost location code
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate destructive and non-read-only behavior. The description adds meaningful context beyond that: cost-location deletes are not restorable, and the user should confirm before calling. The irrelevant 'cancelling a posting' reversal detail reduces clarity, but the core irreversibility disclosure is valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is not concise: 'delete cost location' is repeated in the bold heading and again in the sentence 'Delete a cost location.' It also includes generic receipt and posting cancellation behavior unrelated to cost-location deletion. The destructive warning is front-loaded, but the redundancy and irrelevant content hurt.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive two-parameter tool, the description covers irreversibility, user confirmation, and the endpoint. However, there is no output schema, and the description does not explain expected success or error responses. The irrelevant receipt/posting details also make the overall guidance less complete for this specific tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter-level meaning beyond what the schema already provides for 'code' and 'api_key'. The endpoint information is useful but does not clarify parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Delete a cost location' and the title reinforces the resource. It is distinct from cost_locations_get/add/update and from restorable receipt deletes. However, the opening 'Deletes or cancels a record' and the unrelated receipt/posting examples add ambiguity about what this specific tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit when-to-use guidance or routing among alternatives. It only warns to confirm with the user before calling. It does not say, for example, to use this when a cost location must be permanently removed, or to use cost_locations_update if changes are needed instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cost_locations_getCost Locations: get cost locationsA
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get cost locations Get cost locations for a specified customer account. The response includes the number of returned rows and an array of cost locations data. NOTE: Each request is limited to 1000 cost locations!

Endpoint: POST /cost-locations/get

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoThe code of one specific cost location. If provided, only the cost location with this code will be returned.
limitNoSet a limit of returned postings. NOTE: the maximum limit is 1000!
offsetNoSet an offset for the returned postings.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and destructiveHint; the description adds the POST endpoint and the 1000-limit, which are valuable behavioral details not in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct, uses emoji and bold for emphasis, and front-loads the read-only warning. No superfluous text, though it could be slightly more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description mentions the response includes row count and data array, but lacks detail about the fields in the array. Without an output schema, more specificity would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with good parameter descriptions. The description only reiterates the limit constraint, adding no new semantic meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool is read-only and fetches cost locations for a customer account, distinguishing it from write siblings like cost_locations_add/update/delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly marks the tool as READ-ONLY and states its purpose, making it clear when to use it (to get cost locations without modification). However, it does not explicitly compare to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cost_locations_updateCost Locations: update cost locationA
Idempotent

🟡 WRITE · updates data — Modifies existing master data in place. update cost location Update a cost location's name/description.

Endpoint: POST /cost-locations/update

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe cost location code
nameYesThe updated name/description of the cost location
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds context beyond annotations by stating 'Modifies existing master data in place' and including the endpoint. Annotations already provide idempotentHint=true and destructiveHint=false, and the description aligns with these.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one emoji line, one bold statement, and one sentence of purpose. Every word adds value, and it is front-loaded with the action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks details about the response (e.g., no output schema) and error conditions. However, for a simple update tool, it provides the essential purpose and parameters. More context on behavior when code is missing would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds little beyond what is already documented. It reiterates 'name/description,' which matches the schema's parameter description. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update a cost location's name/description.' It uses the specific verb 'update' and identifies the resource (cost location), distinguishing it from siblings like cost_locations_add (create) and cost_locations_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for updating existing cost locations but does not explicitly state when to use this tool versus alternatives like cost_locations_add or cost_locations_delete. No guidance on exclusions or prerequisites is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

invoices_createInvoices: create invoiceC

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. create invoice Add an invoice for the specified customer.

Endpoint: POST /invoices/create

ParametersJSON Schema
NameRequiredDescriptionDefault
zipNoThe zip of the recipient company. If specified, the field will be validated.
cityNoThe city of the recipient company. If specified, the field will be validated.
dateYesThe date of the invoice.
typeYesCan be either 'invoice' ("Rechnung"), 'credit' ("Gutschrift") or 'offer' ("Angebot").
emailNoThe email for sending the invoice. If specified, the field will be validated.
streetNoThe street of the recipient company. If specified, the field will be validated.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
countryNoThe country of the recipient company. If specified, the field will be validated. Valid cases are only the German version of the country name [DĂ€nemark] OR the two digit ISO code of the country [DK].
due_daysNoThe number of days between the invoice date and the due date. If specified, the field will be validated.
item_vatYesAn array of invoice item vats. Usage: "item_vat" : ['7', '19'] Valid vat rates are floating point numbers between 0 and 100.
languageNoThe language for translatable invoice labels (e.g. headings, table headers, payment terms). Can be either 'de_DE' ("Deutsch", default) or 'en_US' ("English"). If omitted, German is used.
item_nameYesAn array of invoice items. Usage: "item_name" : ['Item 1', 'Item 2']
item_unitYesAn array of invoice items units. Usage: "item_unit" : ['Std.', 'Stk.']
item_amountYesAn array of invoice item amounts. Usage: "item_amount" : ['10', '20']
company_nameYesThe company name of the recipient.
discount_typeNoThe type of the discount. Can be either 'percent' or 'EUR'. If specified, the field will be validated.
invoicenumberNoThe invoicenumber for the invoice. If not specified, the default BHB number will be created. If specified, the field will be validated.
show_bankdataNoShow the the bank data on the invoice. If specified, the field will be validated.
correspondenceNoThe optional correspondence to the invoice recipient. If specified, the field will be validated.
date_of_supplyNoDate or period of service/delivery. NOTE: The date_of_supply will be displayed on the PDF, but when the date AND the date_of_supply is specified in the format "YYYY-MM-DD", the date_of_supply will also be taken over as date_delivery of the receipt in the 'Belege' or 'Belege/Buchen' view. IMPORTANT: Due to the DATEV compatibility, we cannot accept a date_of_supply that is after the invoice date. In that case it will be ignored!
discount_valueNoThe value of granted discount. If specified, the field will be validated.
customer_numberNoThe customer number of the recipient. If specified, the field will be validated.
final_provisionsNoThe final comment of the invoice. If specified, the field will be validated.
item_descriptionNoAn array of invoice item description. Usage: "item_description" : ['Description Item 1', 'Description Item 2']. If specified, the field will be validated.
show_contactdataNoShow the contact data on the invoice. If specified, the field will be validated.
show_prices_typeYesCan be either 'net' ("Netto") or 'gross' ("Brutto").
item_single_priceYesAn array of invoice item single_prices. Usage: "item_single_price" : ['20', '19.99']
payment_referenceNoThe payment reference id. If specified correctly, the resulting receipt of the created invoice will match with the corresponding transaction. NOTE: Currently we support Amazon order id, PayPal transaction id and Stripe transaction id!
payment_conditionsNoThe payment conditions of the invoice. If specified, the field will be validated.
recurring_intervalNoAn interval for recurring invoices. Can be either 'weekly', 'monthly', 'quarterly' or 'yearly'. If specified, the field will be validated.
contact_person_nameNoThe name of the contact person of the recipient company. If specified, the field will be validated.
recurring_date_nextNoThe next date of a recurring invoice. IMPORTANT: The field is required, if "recurring_interval" is specified. If specified, the field will be validated.
additional_addresslineNoThe additional address information of the recipient company. If specified, the field will be validated.

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and idempotentHint=false, and the description usefully makes the risk explicit: "Not idempotent — calling twice may create duplicates." That adds a small amount of practical behavior context, but the description otherwise does not disclose side effects, validation failures, or other runtime behavior beyond what annotations already imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, but it contains redundancy: "**create invoice**" repeats the title, and the opening list "receipts, transactions, postings, invoices, master data" is generic and potentially misleading for a tool specifically creating invoices. The duplicate-risk note and endpoint are useful, but the structure is not tightly focused.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 33 parameters, 9 required fields, no output schema, and multiple closely related siblings, the description is too thin. It does not describe what the agent should expect in return, doesn't mention required fields, and doesn't guide selection between draft/e-invoice variants. An agent would need to inspect the full schema and sibling names to safely invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema itself documents all 33 parameters. The description adds no parameter-level meaning beyond schema fields, which is acceptable under the baseline for high schema coverage, but it also does not highlight which required parameters are central to a successful invoice creation call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a concrete action — "Add an invoice for the specified customer" — with a specific resource and endpoint. However, it does not distinguish this tool from sibling tools like invoices_create_draft or invoices_create_e_invoice, so it falls short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives such as invoices_create_draft, invoices_create_e_invoice, or receipt creation tools. The generic "Creates new records" line implies broad creation but gives no selection criteria, prerequisites, or exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

invoices_create_draftInvoices: create invoice draftB

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. create invoice draft Add an invoice draft for the specified customer.

Endpoint: POST /invoices/create/draft

ParametersJSON Schema
NameRequiredDescriptionDefault
zipNoThe zip of the recipient company. If specified, the field will be validated.
cityNoThe city of the recipient company. If specified, the field will be validated.
dateYesThe date of the invoice.
typeYesCan be either 'invoice' ("Rechnung"), 'credit' ("Gutschrift") or 'offer' ("Angebot").
emailNoThe email for sending the invoice. If specified, the field will be validated.
streetNoThe street of the recipient company. If specified, the field will be validated.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
countryNoThe country of the recipient company. If specified, the field will be validated. Valid cases are only the German version of the country name [DĂ€nemark] OR the two digit ISO code of the country [DK].
item_vatYesAn array of invoice item vats. Usage: "item_vat" : ['7', '19'] Valid vat rates are floating point numbers between 0 and 100.
languageNoThe language for translatable invoice labels (e.g. headings, table headers, payment terms). Can be either 'de_DE' ("Deutsch", default) or 'en_US' ("English"). If omitted, German is used.
item_nameYesAn array of invoice items. Usage: "item_name" : ['Item 1', 'Item 2']
item_unitYesAn array of invoice items units. Usage: "item_unit" : ['Std.', 'Stk.']
item_amountYesAn array of invoice item amounts. Usage: "item_amount" : ['10', '20']
company_nameYesThe company name of the recipient.
discount_typeNoThe type of the discount. Can be either 'percent' or 'EUR'. If specified, the field will be validated.
show_bankdataNoShow the the bank data on the invoice. If specified, the field will be validated.
correspondenceNoThe optional correspondence to the invoice recipient. If specified, the field will be validated.
date_of_supplyNoDate or period of service/delivery. NOTE: The date_of_supply will be displayed on the PDF, but when the date AND the date_of_supply is specified in the format "YYYY-MM-DD", the date_of_supply will also be taken over as date_delivery of the receipt in the 'Belege' or 'Belege/Buchen' view. IMPORTANT: Due to the DATEV compatibility, we cannot accept a date_of_supply that is after the invoice date. In that case it will be ignored!
discount_valueNoThe value of granted discount. If specified, the field will be validated.
customer_numberNoThe customer number of the recipient. If specified, the field will be validated.
final_provisionsNoThe final comment of the invoice. If specified, the field will be validated.
item_descriptionNoAn array of invoice item description. Usage: "item_description" : ['Description Item 1', 'Description Item 2']. If specified, the field will be validated.
show_contactdataNoShow the contact data on the invoice. If specified, the field will be validated.
show_prices_typeYesCan be either 'net' ("Netto") or 'gross' ("Brutto").
item_single_priceYesAn array of invoice item single_prices. Usage: "item_single_price" : ['20', '19.99']
payment_conditionsNoThe payment conditions of the invoice. If specified, the field will be validated.
recurring_intervalNoAn interval for recurring invoices. Can be either 'weekly', 'monthly', 'quarterly' or 'yearly'. If specified, the field will be validated.
contact_person_nameNoThe name of the contact person of the recipient company. If specified, the field will be validated.
recurring_date_nextNoThe next date of a recurring invoice. IMPORTANT: The field is required, if "recurring_interval" is specified. If specified, the field will be validated.
additional_addresslineNoThe additional address information of the recipient company. If specified, the field will be validated.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint=false and idempotentHint=false. The description confirms these with '🟡 WRITE · creates data' and 'Not idempotent — calling twice may create duplicates', and adds the endpoint. However, the generic line 'Creates new records (receipts, transactions, postings, invoices, master data)' is misleading here since this tool only creates an invoice draft, and much of the safety profile repeats the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core sentence 'Add an invoice draft for the specified customer' is concise, but the description is padded with a generic template preface that repeats the WRITE signal and lists record types irrelevant to this tool. There is noticeable redundancy across 'creates data', 'creates new records', 'create invoice draft', and 'Add an invoice draft'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex 30-parameter creation tool with no output schema and no guidance on how the many item arrays relate (e.g., parallel arrays). The schema is exhaustive at 100% coverage, so parameter semantics are covered, but the description omits return-value expectations, sibling differentiation, and any workflow hints. It is minimally viable but not complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 even without parameter info in the tool description. The description adds nothing about parameters — it only mentions 'the specified customer', which is generic. The schema remains the authoritative source for parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Add an invoice draft for the specified customer' and the heading 'create invoice draft'. This is specific enough to identify what the tool does. However, it does not explicitly distinguish it from sibling tools like invoices_create or invoices_create_e_invoice; one must infer that 'draft' is the differentiator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is given. The description never mentions alternatives such as invoices_create or invoices_create_e_invoice, nor does it explain what a draft is for compared to a final invoice. The only usage signal is the tool's own name, which does not count as guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

invoices_create_e_invoiceInvoices: create e-invoiceB

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. create e-invoice Add an e-invoice for the specified customer.

Endpoint: POST /invoices/create/e-invoice

ParametersJSON Schema
NameRequiredDescriptionDefault
zipYesThe zip of the recipient company. If specified, the field will be validated.
cityYesThe city of the recipient company. If specified, the field will be validated.
dateYesThe date of the invoice.
typeYesCan be either 'invoice' ("Rechnung"), 'credit' ("Gutschrift") or 'offer' ("Angebot").
emailYesThe email for sending the invoice. If specified, the field will be validated.
streetYesThe street of the recipient company. If specified, the field will be validated.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
countryYesThe country of the recipient company. If specified, the field will be validated. Valid cases are only the German version of the country name [DĂ€nemark] OR the two digit ISO code of the country [DK].
due_daysNoThe number of days between the invoice date and the due date. If not specified due date will be set to invoice date (due_days = 0).
languageNoThe language for translatable invoice labels (e.g. headings, table headers, payment terms). Can be either 'de_DE' ("Deutsch", default) or 'en_US' ("English"). If omitted, German is used.
item_nameYesAn array of invoice items. Usage: "item_name" : ['Item 1', 'Item 2']
item_unitYesAn array of invoice items units. Usage: "item_unit" : ['Std.', 'Stk.']
item_amountYesAn array of invoice item amounts. Usage: "item_amount" : ['10', '20']
company_nameYesThe company name of the recipient.
e_invoice_idYesBuyer reference (default: 0). If you do not have a reference, please enter "0". A valid is mandatory for e-invoices to public contracting authorities and is provided by the recipient.
discount_typeNoThe type of the discount. Can be either 'percent' or 'EUR'. If specified, the field will be validated.
invoicenumberNoThe invoicenumber for the invoice. If not specified, the default BHB number will be created. If specified, the field will be validated.
item_tax_typeYesAn array of invoice item tax types. Usage: "item_vat" : ['S', 'E'] Valid tax types are the following: S - VAT (standard rate) Z - 0% VAT AE - Reverse Charge (§13b) K - EU Supply (Intra-community supply) G - Third Country Supply (Export) E - VAT Exempt Supply & Services
show_bankdataNoShow the the bank data on the invoice. If specified, the field will be validated.
correspondenceNoThe optional correspondence to the invoice recipient. If specified, the field will be validated.
date_of_supplyNoDate or period of service/delivery. NOTE: The date_of_supply will be displayed on the PDF, but when the date AND the date_of_supply is specified in the format "YYYY-MM-DD", the date_of_supply will also be taken over as date_delivery of the receipt in the 'Belege' or 'Belege/Buchen' view. IMPORTANT: Due to the DATEV compatibility, we cannot accept a date_of_supply that is after the invoice date. In that case it will be ignored!
discount_valueNoThe value of granted discount. If specified, the field will be validated.
customer_numberNoThe customer number of the recipient. If specified, the field will be validated.
item_tax_amountYesOnly required if corresponding item_tax_type = 'S' (VAT). An array of invoice item vats. Usage: "item_tax_amount" : ['7', '19'] Valid vat rates are floating point numbers between 0 and 100.
final_provisionsNoThe final comment of the invoice. If specified, the field will be validated.
item_descriptionNoAn array of invoice item description. Usage: "item_description" : ['Description Item 1', 'Description Item 2']. If specified, the field will be validated.
show_contactdataNoShow the contact data on the invoice. If specified, the field will be validated.
show_prices_typeYesCan be either 'net' ("Netto") or 'gross' ("Brutto").
item_single_priceYesAn array of invoice item single_prices. Usage: "item_single_price" : ['20', '19.99']
payment_referenceNoThe payment reference id. If specified correctly, the resulting receipt of the created invoice will match with the corresponding transaction. NOTE: Currently we support Amazon order id, PayPal transaction id and Stripe transaction id!
payment_conditionsNoThe payment conditions of the invoice. If specified, the field will be validated.
recurring_intervalNoAn interval for recurring invoices. Can be either 'weekly', 'monthly', 'quarterly' or 'yearly'. If specified, the field will be validated.
contact_person_nameNoThe name of the contact person of the recipient company. If specified, the field will be validated.
recurring_date_nextNoThe next date of a recurring invoice. IMPORTANT: The field is required, if "recurring_interval" is specified. If specified, the field will be validated.
additional_addresslineNoThe additional address information of the recipient company. If specified, the field will be validated.

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description explicitly says the operation is not idempotent and that calling twice may create duplicates, which is a useful behavioral warning. It also labels the tool as a write operation and says it creates records. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loads the write/non-idempotency warning, followed by one specific sentence and the endpoint. There is minor redundancy in the generic 'creates data' prefix and the 'create e-invoice' heading, but overall it stays concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 35 parameters and no output schema, a single sentence is too thin. It does not describe the expected result/response, e-invoice-specific requirements beyond the schema, validation gotchas, or how this tool relates to sibling invoice tools. The rich schema covers parameters, but the description itself leaves significant context for the agent to discover.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter semantics are already fully documented in the input schema. The description adds no additional parameter-level meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the operation: 'Add an e-invoice for the specified customer', with the endpoint POST /invoices/create/e-invoice. It is specific about the resource type (e-invoice) and action, but does not explicitly distinguish itself from siblings like invoices_create or invoices_create_draft.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is provided, and no alternative tools are mentioned. The agent is left to infer when an e-invoice is appropriate instead of a regular invoice or draft, and no mention of the typical public-contracting-authority use case is made.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postings_add_batch_freePostings: add multiple free postingsC

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add multiple free postings Add multiple free postings.

Endpoint: POST /postings/add-batch/free

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
free_postingsYesan array of free postings, each free posting has the same field declaration and validation as the postings/add/free endpoint

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the warning 'Not idempotent — calling twice may create duplicates' beyond the annotations, which declare idempotentHint false. However, it does not describe return values, error handling, or effects on other entities.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The phrase 'add multiple free postings' is repeated verbatim, creating redundancy. The generic write warning at the start may not be specific to this tool, wasting space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema is provided, and the description does not explain what the tool returns on success or failure. For a batch write operation, details on atomicity, partial success, or errors are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The description adds context that free_postings follow the same validation as the single-free-posting endpoint, but otherwise adds no new meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'add multiple free postings' which is a specific verb-resource pair. However, it does not distinguish from the sibling 'postings_add_free' which adds a single free posting, relying on the name to imply batch operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'postings_add_free' or other batch posting tools. The description does not mention prerequisites or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postings_add_batch_receiptsPostings: add multiple receipt postingsB

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add multiple receipt postings Add postings for specified receipts. Important: Receipt postings are only available if creditor or debtor posting is activated!

IMPORTANT: If you add postings to a receipt with foreign currency, you have to get that receipt (/receipts/get/id_by_customer) and find the calculated amount before performing this request.

Endpoint: POST /postings/add-batch/receipts

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
receiptsYesan array of receipt postings, each receipt posting has the same field declaration and validation as the postings/add/receipt endpoint

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly labels it as a write operation (WRITE · creates data) and states it is not idempotent, which aligns with annotations and adds behavioral context. It also notes the prerequisite about activation. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description includes an emoji and repeats the title in bold. The foreign currency note is useful but the structure could be tighter. Key information is front-loaded, but there is some redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks information about return values or error handling. For a write operation with nested objects, this omission leaves the agent uncertain about what to expect. Given no output schema, the description should compensate more.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds limited value beyond schema. It mentions that the 'receipts' array structure mirrors the 'postings/add/receipt' endpoint, which is helpful but not detailed. No additional parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title and description clearly state the tool adds multiple receipt postings. The verb 'add' and resource 'postings' are specific. However, it does not explicitly distinguish this tool from the singular 'postings_add_receipt' or similar batch tools like 'postings_add_batch_transactions'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides important usage notes: only works if creditor/debtor posting is activated, and foreign currency handling requires pre-fetching the receipt. However, it does not guide when to use this tool versus alternatives (e.g., when to use batch vs singular).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postings_add_batch_transactionsPostings: add multiple transaction postingsA

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add multiple transaction postings Add posting for specified transactions.

Endpoint: POST /postings/add-batch/transactions

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
transactionsYesan array of transaction postings, each transaction posting has the same field declaration and validation as the postings/add/transaction endpoint

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description includes write indicator, creation of new records, and idempotency warning ('calling twice may create duplicates'), going beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with write/behavioral warnings, but includes unnecessary formatting (emoji, bold) and endpoint URL, slightly impacting conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks output schema but covers key behavioral aspects (write, idempotency) and parameter structure via schema; no mention of error handling or partial success.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%; description adds only a reference to another endpoint for validation details, not substantially enriching parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Title and description explicitly state 'add multiple transaction postings' and 'add posting for specified transactions', distinguishing from single transaction and batch receipts siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description indicates it's for adding multiple transaction postings in batch, but does not explicitly state when to prefer this over sibling tools like postings_add_transaction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postings_add_freePostings: add free postingB

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add free posting Add a free posting.

Endpoint: POST /postings/add/free

ParametersJSON Schema
NameRequiredDescriptionDefault
vatYesThe vat rate of the posting. Possible vats: - 0_none ('keine Ust.') - 19_vat ('19% Ust.') - 7_vat ('7% Ust.') - 19_pre ('19% Vst.') - 7_pre ('7% Vst.') - 19_both_1 ('§13b 19% USt./VSt.') - 19_both_506 ('§13b 19% USt./VSt. (EU §13b Abs. 1)') - 19_both_6506 ('§13b 19% USt. (EU §13b Abs. 1, ohne VSt.)') - 19_both_511 ('§13b 19% USt./VSt. (Drittland §13b Abs. 2 Nr. 1)') - 19_both_6511 ('§13b 19% USt. (Drittland §13b Abs. 2 Nr. 1, ohne VSt.)') - 19_both_6501 ('§13b 19/16% USt. (ohne VSt.)') - 19_both_2 ('I.g.E. 19% USt./VSt.') - 7_both ('I.g.E. 7% USt./VSt.') - 19_both_1_no_pre ('§13b 19/16% USt.') - 19_both_2_no_pre ('i.g.E. 19/16% USt.') - 7_both_no_pre ('i.g.E. 7/5% USt.') - 19_pre_app ('19/16% Aufz. VSt.') - 7_pre_app ('7/5% Aufz. VSt.') - 19_both_app_1 ('§13b 19/16% USt./Aufz. VSt.') - 19_both_app_506 ('§13b 19/16% USt./Aufz. VSt. (EU §13b Abs. 1)') - 19_both_app_511 ('§13b 19/16% USt./Aufz. VSt. (Drittland §13b Abs. 2 Nr. 1)') - 19_both_app_2 ('i.g.E. 19/16% USt./Aufz. VSt.') - 7_both_app ('i.g.E. 7/5% USt./Aufz. VSt.')
dateYesThe date of the posting.
amountYesThe amount of the posting.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
postingtextYesThe description of the posting.
cost_locationNoThe cost location number. If specified, field will be validated.
cost_location_twoNoThe cost location two number. If specified, field will be validated.
postingaccount_debitYesThe debit account number of the posting.
postingaccount_creditYesThe credit account number of the posting.

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a non-idempotent write operation. The description adds the concrete consequence that calling twice may create duplicates, which is useful behavioral context beyond the structured annotation. It does not cover validation or return behavior, but the duplicate warning adds real value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the write indicator, duplicate warning, action, and endpoint. The generic 'Creates new records (receipts, transactions, postings, invoices, master data)' boilerplate is somewhat unfocused, but overall the description is compact and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema fully documents the parameters and annotations cover mutation and non-idempotence. However, the description does not explain what a 'free posting' is, what a successful response looks like, or how this differs from sibling posting tools. It is minimally adequate but leaves notable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 9 parameters already have meaningful descriptions in the input schema. The description itself adds no additional parameter-level meaning, matching the baseline for fully documented schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the action clearly: 'Add a free posting' and provides the exact endpoint. However, it never explains what distinguishes a 'free' posting from the many sibling add tools, so it is clear about the verb and resource but not about sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as postings_add_batch_free, postings_add_receipt, or postings_add_transaction. No conditions, prerequisites, or exclusions are provided, so an agent cannot reliably decide between this and related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postings_add_receiptPostings: add receipt postingA

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add receipt posting Add postings for a specified receipt. Important: Receipt postings are only available if creditor or debtor posting is activated!

IMPORTANT: If you add postings to a receipt with foreign currency, you have to get that receipt (/receipts/get/id_by_customer) and find the calculated amount before performing this request.

Endpoint: POST /postings/add/receipt

ParametersJSON Schema
NameRequiredDescriptionDefault
vatsYesAn array of vats. Usage: "vats" : ['vat of posting 1', 'vat of posting 2']. Possible vats: - 0_none ('keine Ust.') - 19_vat ('19% Ust.') - 7_vat ('7% Ust.') - 19_pre ('19% Vst.') - 7_pre ('7% Vst.') - 19_both_1 ('§13b 19% USt./VSt.') - 19_both_506 ('§13b 19% USt./VSt. (EU §13b Abs. 1)') - 19_both_6506 ('§13b 19% USt. (EU §13b Abs. 1, ohne VSt.)') - 19_both_511 ('§13b 19% USt./VSt. (Drittland §13b Abs. 2 Nr. 1)') - 19_both_6511 ('§13b 19% USt. (Drittland §13b Abs. 2 Nr. 1, ohne VSt.)') - 19_both_6501 ('§13b 19/16% USt. (ohne VSt.)') - 19_both_2 ('I.g.E. 19% USt./VSt.') - 7_both ('I.g.E. 7% USt./VSt.') - 19_both_1_no_pre ('§13b 19/16% USt.') - 19_both_2_no_pre ('i.g.E. 19/16% USt.') - 7_both_no_pre ('i.g.E. 7/5% USt.') - 19_pre_app ('19/16% Aufz. VSt.') - 7_pre_app ('7/5% Aufz. VSt.') - 19_both_app_1 ('§13b 19/16% USt./Aufz. VSt.') - 19_both_app_506 ('§13b 19/16% USt./Aufz. VSt. (EU §13b Abs. 1)') - 19_both_app_511 ('§13b 19/16% USt./Aufz. VSt. (Drittland §13b Abs. 2 Nr. 1)') - 19_both_app_2 ('i.g.E. 19/16% USt./Aufz. VSt.') - 7_both_app ('i.g.E. 7/5% USt./Aufz. VSt.')
debtorYesThe number of the debtor. IMPORTANT: The field is only required, if you are posting to an outgoing invoice and if debtor posting is activated. If specified, the field will be validated.
amountsYesAn array of amounts. Usage: "amounts" : ['amount of posting 1', 'amount of posting 2'] Amount must be in format 0000.00
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
creditorYesThe number of the creditor. IMPORTANT: The field is only required, if you are posting to an incoming invoice and if creditor posting is activated. If specified, the field will be validated.
postingtextsYesAn array of posting texts. Usage: "postingtexts" : ['text of posting 1', 'text of posting 2']
cost_locationsNoAn array of cost_locations. Usage: "cost_locations" : ['cost_location of posting 1', 'cost_location of posting 2']. If specified, the field will be validated.
postingaccountsYesAn array of postingaccount numbers. Usage: "postingaccounts" : ['number of posting 1', 'number of posting 2']
cost_locations_twoNoAn array of cost_locations_two. Usage: "cost_locations_two" : ['cost_location_two of posting 1', 'cost_location_two of posting 2']. If specified, the field will be validated.
receipt_id_by_customerYesThe id_by_customer of the receipt.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral context beyond annotations: flags WRITE, warns 'Not idempotent — calling twice may create duplicates' (expanding idempotentHint=false), and documents the activation and foreign-currency preconditions. No auth or rate-limit disclosure, but the dupicate-risk and prerequisite caveats are exactly the kind of value-add expected here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the WRITE warning and duplication risk, then the core action, then important prerequisites, then endpoint. Slightly bloated by the generic 'creates records (receipts, transactions, postings, invoices, master data)' line which describes the whole family rather than this tool, but overall compact and well-labeled with IMPORTANT markers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 10-parameter write operation with no output schema, the description covers the highest-risk aspects: non-idempotency, activation preconditions, and the foreign-currency retrieval workflow. The only real gap is return-value/response behavior, but annotations and the fully-documented schema carry much of the burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — every parameter (vats, amounts, postintexts, creditor/-debtor, api_key, cost_locations, etc.) already carries its own documentation in the input schema. The tool description itself adds no parameter-level detail beyond the foreign-currency note, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Add postings for a specified receipt' — which clearly distinguishes it from siblings like postings_add_free, postings_add_transaction, and postings_add_batch_receipts. The receipt-scoped resource is unambiguous even before opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives two concrete preconditions: receipt postings are only available if creditor or debtor posting is activated, and foreign-currency receipts require a preliminary /receipts/get/id_by_customer call to find the calculated amount. This is clear contextual guidance, though it never names alternatives or states when-not-to-use versus the other postings_add_* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postings_add_transactionPostings: add transaction postingC

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add transaction posting Add postings for a specified transaction.

Endpoint: POST /postings/add/transaction

ParametersJSON Schema
NameRequiredDescriptionDefault
vatsYesAn array of vats. Usage: "vats" : ['vat of posting 1', 'vat of posting 2']. Possible vats: - 0_none ('keine Ust.') - 19_vat ('19% Ust.') - 7_vat ('7% Ust.') - 19_pre ('19% Vst.') - 7_pre ('7% Vst.') - 19_both_1 ('§13b 19% USt./VSt.') - 19_both_506 ('§13b 19% USt./VSt. (EU §13b Abs. 1)') - 19_both_6506 ('§13b 19% USt. (EU §13b Abs. 1, ohne VSt.)') - 19_both_511 ('§13b 19% USt./VSt. (Drittland §13b Abs. 2 Nr. 1)') - 19_both_6511 ('§13b 19% USt. (Drittland §13b Abs. 2 Nr. 1, ohne VSt.)') - 19_both_6501 ('§13b 19/16% USt. (ohne VSt.)') - 19_both_2 ('I.g.E. 19% USt./VSt.') - 7_both ('I.g.E. 7% USt./VSt.') - 19_both_1_no_pre ('§13b 19/16% USt.') - 19_both_2_no_pre ('i.g.E. 19/16% USt.') - 7_both_no_pre ('i.g.E. 7/5% USt.') - 19_pre_app ('19/16% Aufz. VSt.') - 7_pre_app ('7/5% Aufz. VSt.') - 19_both_app_1 ('§13b 19/16% USt./Aufz. VSt.') - 19_both_app_506 ('§13b 19/16% USt./Aufz. VSt. (EU §13b Abs. 1)') - 19_both_app_511 ('§13b 19/16% USt./Aufz. VSt. (Drittland §13b Abs. 2 Nr. 1)') - 19_both_app_2 ('i.g.E. 19/16% USt./Aufz. VSt.') - 7_both_app ('i.g.E. 7/5% USt./Aufz. VSt.')
amountsYesAn array of amounts. Usage: "amounts" : ['amount of posting 1', 'amount of posting 2'] Amount must be in format 0000.00
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
postingtextsYesAn array of posting texts. Usage: "postingtexts" : ['text of posting 1', 'text of posting 2']
cost_locationsNoAn array of cost_locations. Usage: "cost_locations" : ['cost_location of posting 1', 'cost_location of posting 2']. If specified, the field will be validated.
postingaccountsYesAn array of postingaccount numbers. Usage: "postingaccounts" : ['number of posting 1', 'number of posting 2']
cost_locations_twoNoAn array of cost_locations_two. Usage: "cost_locations_two" : ['cost_location_two of posting 1', 'cost_location_two of posting 2']. If specified, the field will be validated.
transaction_id_by_customerYesThe id_by_customer of the transaction.
oi_receipts_ids_by_customerYesAn array of "open item" receipts ids_by_customer . Usage: "oi_receipts_ids_by_customer" : ['id_by_customer of the receipt for posting 1', null ] The receipts specified will be assigned directly to the respective postings. A null value within the array means explicitly assigning no receipt to the partial posting in that position. IMPORTANT: The field is only required, if OI postings are activated in customers account.

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and idempotentHint=false. The description reinforces this by saying 'WRITE · creates data' and 'Not idempotent — calling twice may create duplicates', which adds a small behavioral warning. But it does not explain side effects, validation requirements, or whether an existing transaction must already exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loads the write warning, but the first sentence is a generic boilerplate covering receipts, invoices, and master data — broader than this tool's actual purpose. The 'add transaction posting' line repeats the title, and the endpoint line adds little for an agent given the tool name and schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex 9-parameter, 6-required write operation with parallel arrays and many sibling tools. The description provides almost no workflow context, such as array alignment, required existence of the transaction, when oi_receipts_ids_by_customer is truly required, or what the consequences of a duplicate call are beyond a generic warning.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the structured schema already documents each parameter in detail. The description itself adds no parameter-level meaning, which is acceptable under the baseline but does not improve understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and object: 'Add postings for a specified transaction.' This disambiguishes it from free/receipt posting tools. However, it does not call out the sibling batch variant or explain the array-based structure, so differentiation is only partial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given for when to choose this tool versus siblings like postings_add_batch_transactions or postings_add_free. There are no conditions, prerequisites, or exclusions mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postings_assign_receipt_to_free_postingPostings: assign receipt to free postingB

🟡 WRITE · links/unlinks records — Creates or removes an assignment between records (e.g. receipt ↔ transaction). Reversible. assign receipt to free posting Assign a receipt to a free posting.

Endpoint: POST /postings/assign/receipt-to-free-posting

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
posting_id_by_customerYesThe id_by_customer of the posting.
receipt_id_by_customerYesThe id_by_customer of the receipt.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool is a write operation ('WRITE'), can 'link/unlink records,' and is 'Reversible.' This adds context beyond annotations, but the description ambiguously mentions both creating and removing assignments while the tool name only suggests assignment. No additional details on permissions or side effects are provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is fairly concise but includes some repetition (e.g., the bold title line duplicates the purpose). It could be more streamlined by removing the general 'WRITE' note if it applies to a category, but overall it is acceptable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema, the description should at least hint at the return value or side effects of the assignment. It fails to explain what happens after assignment, error conditions, or any consequences, leaving the agent underinformed for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description does not add extra meaning beyond what the input schema already provides. The parameters are adequately described in the schema, so the description adds no additional semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Assign a receipt to a free posting.' It distinguishes from siblings like transactions_assign_receipt (which assigns to transactions) and postings_add_free (which creates a free posting). The verb 'assign' combined with the specific resource 'free posting' provides clear scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given on when to use this tool versus alternatives. Siblings such as transactions_assign_receipt and transactions_unassign_receipt exist, but the description does not explain that this tool is specifically for free postings or contrast it with other assignment tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postings_cancelPostings: cancel postingA
DestructiveIdempotent

🔮 DESTRUCTIVE · deletes data — Deletes or cancels a record. Confirm with the user before calling. Receipt deletes are restorable; cost-location deletes are not. Cancelling a posting deletes it if it is not yet fixed, otherwise it books a reversal posting. cancel posting Cancel a specified posting. Postings that are not fixed are deleted, fixed postings are cancelled by creating a reversal posting.

Endpoint: POST /postings/cancel

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
posting_id_by_customerYesThe id_by_customer of the posting.

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It discloses substantial behaviorbeyond annotations: destructive semantics, the delete-vs-reversal distinction based on fixec status, restorability of related delete types, and the need to confirm with the user. This fully supplements the destructiveHint and readOnlyHint annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the destructive warning, but the 'cancel posting' section repeats the same fixed-postings-deleted/reversal distinction already stated in the first paragraph. The redundancy makes it less concise than it could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description covers the critical behavior, confirmation requirement, and restorability nuances. It does not explain return values or define 'fixed', but it provides enough for an agent to call the tool correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters adequaely. The description does not add meaning beyond 'specified posting' and the endpoint, giving no extra param semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific verb ('Cancel') and resource ('a specified posting'), and distinguishes it from sibling operations like postings_unconfirm_* by stating that fixed postings are cancelled via a reversal posting while non-fixed ones are deleted. The endpoint and title reinforce the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for cancelling postings and explicitly requires user confirmation before calling, but it does not contrast this tool with alternatives such as postings_unconfirm_* or the various delete tools. There is clear context, but no explicit exclusions or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postings_getPostings: get postingsA
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get postings Get postings for a specified customer account. The response includes the number of returned rows and an array of postings data. NOTE: Each request is limited to 1000 postings!

Endpoint: POST /postings/get

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoSet a limit of returned postings. NOTE: the maximum limit is 1000!
orderNoPossible values are "default", "date ASC", "date DESC", "date_last_action ASC", "date_last_action DESC", "id_by_customer ASC", "id_by_customer DESC". The default order is ascending by date as first and date_last_action as second criterion. Please not that the validation of the specified value is case sensitive!
offsetNoSet an offset for the returned postings.
accountNoA comma separated list of accounts. Use the following options: all, all financial accounts, free booking and any of your available accounts as numeric value. The default is "all"
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
date_toYesThe postings issuing date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). All postings with issuing date including and before given value will be returned. If specified, the field will be validated. An empty string is not considered a valid date.
date_fromYesThe postings issuing date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). All postings with issuing date including and after given value will be returned. If specified, the field will be validated. An empty string is not considered a valid date.
cost_locationNoSet a specific cost location code. If specified, only postings to this cost location are returned
posting_statusNoSet the status of the posting. You have the following options: all, fixed, unfixed The default is "all"
postingaccountNoA comma separated list of postingaccounts. Use the following options: all, all postingaccounts, all debtors, all creditors and any of your available postingaccounts as numeric value. The default is "all"
date_last_action_toNoA date in format 'YYYY-MM-DD'. All postings that were created or modified in status (confirmed, fixed) on or before this date will be returned. If specified, the field will be validated. An empty string is not considered a valid date.
date_last_action_fromNoA date in format 'YYYY-MM-DD'. All postings that were created or modified in status (confirmed, fixed) on or after this date will be returned. If specified, the field will be validated. An empty string is not considered a valid date.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, which the description reinforces. It also adds a key behavioral constraint: each request is limited to 1000 postings. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise with a front-loaded safety indicator. However, it includes minor redundancy (repeating 'get postings' and the endpoint) that could be trimmed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the response structure (count and array) and the 1000 limit, but does not provide guidance on how to use pagination parameters (offset/limit) or specify which parameters correspond to 'customer account'. With 12 parameters and no output schema, more context would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameter descriptions in the schema are comprehensive. The description does not add new semantic meaning beyond what the schema provides, such as format or usage tips for individual parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves postings for a specified customer account, using the verb 'get' and specifying the resource 'postings'. It differentiates from siblings by emphasizing the read-only nature, distinguishing it from write operations like postings_add_*.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for fetching postings based on the name and description, but it does not explicitly state when to use this tool over alternatives like transactions_get or receipts_get. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postings_unconfirm_freePostings: unconfirm free postingA
Idempotent

🟡 WRITE · reverts state — Reverts a prior state change (un-confirm a posting, restore a deleted receipt). Reversible. unconfirm free posting Remove a specified free posting by unconfirming it. This will only work if the posting is not fixed.

Endpoint: POST /postings/unconfirm/free

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
posting_id_by_customerYesThe id_by_customer of the free posting.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide destructiveHint=false and idempotentHint=true. The description adds context: 'Reverts a prior state change,' 'Reversible,' and the condition about 'not fixed.' It explains the idempotency implication (reversibility) but does not detail side effects or permissions. Adds value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with key information (write, reverts state) and ends with endpoint. Some redundancy with the emoji and bold formatting, but overall not verbose. Every sentence contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema is provided, and the description does not explain the return value or error cases. For a simple write operation, the action is clear, but the lack of output description leaves a gap. Adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented. The description implies the use of posting_id_by_customer ('specified free posting') but does not add new semantic information. Baseline 3 for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Remove a specified free posting by unconfirming it.' It distinguishes from sibling tools like postings_unconfirm_receipt and postings_unconfirm_transaction by specifying 'free posting'. The verb+resource combination is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a condition: 'This will only work if the posting is not fixed.' It implies usage for free postings but does not explicitly contrast with siblings. No when-not guidance, but the context of 'free posting' and sibling names makes it clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postings_unconfirm_receiptPostings: unconfirm receipt postingA
Idempotent

🟡 WRITE · reverts state — Reverts a prior state change (un-confirm a posting, restore a deleted receipt). Reversible. unconfirm receipt posting Remove postings for a specified receipt by unconfirming them. This will only work if the postings are not fixed.

Endpoint: POST /postings/unconfirm/receipt

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
receipt_id_by_customerYesThe id_by_customer of the receipt.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate mutation (readOnlyHint=false) and idempotency. The description adds context: it reverts state, is reversible, and requires postings not fixed. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is fairly concise with emoji and bold for emphasis, but includes some redundancy (e.g., 'unconfirm receipt posting' appears twice). Still efficient overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 parameters, no output schema, and available annotations, the description provides sufficient context: it explains the operation, condition, and endpoint. Lacks return value info but that's not expected without output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions. The description references receipt_id_by_customer but adds no significant meaning beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it unconfirms postings for a receipt, using specific verb and resource. It distinguishes from siblings like postings_unconfirm_free and postings_unconfirm_transaction by the resource type (receipt), but does not explicitly differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions a condition ('only work if postings are not fixed'), but does not provide explicit guidance on when to use this tool versus alternatives like postings_unconfirm_free or postings_unconfirm_transaction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

postings_unconfirm_transactionPostings: unconfirm transaction postingA
Idempotent

🟡 WRITE · reverts state — Reverts a prior state change (un-confirm a posting, restore a deleted receipt). Reversible. unconfirm transaction posting Remove postings for a specified transaction by unconfirming them. This will only work if the postings are not fixed.

Endpoint: POST /postings/unconfirm/transaction

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
transaction_id_by_customerYesThe id_by_customer of the transaction.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds that it reverts state and is reversible, which is consistent and provides behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the purpose and key conditions. It includes an endpoint and is well-structured, though the emoji and formatting could be slightly trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is a mutation with a specific condition, the description adequately covers the core behavior and condition. Without an output schema, the return value is not explained, but the tool's purpose is sufficiently clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Parameter descriptions in the input schema are complete (100% coverage), so the description does not need to add more. The tool description does not elaborate on parameters beyond what's in the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reverts a prior state change (unconfirms a posting) and specifies the resource (transaction postings). It distinguishes from siblings like postings_unconfirm_free and postings_unconfirm_receipt by focusing on transactions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a condition for use ('only work if the postings are not fixed') and states it is reversible. However, it does not explicitly compare to alternative tools or advise when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

receipts_addReceipts: add a receiptA

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add a receipt Add a receipt into the specified customer account. NOTE: Use this endpoint, to add a receipt without a file!

Endpoint: POST /receipts/add

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe receipt's issuing date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). An empty string is not considered a valid date.
typeYesCan be 'invoice inbound' ("Eingangsrechnung"), 'invoice outbound' ("Ausgangsrechnung"), 'credit inbound' ("Eingangsgutschrift § 14 UStG"), 'credit outbound' ("Ausgangsgutschrift § 14 UStG").
amountYesThe total amount of the receipt, can be negative to indicate a reversed payment (e.g. -12.30). '0.00' is not considered a valid receipt amount.
accountNoIf the receipt shall directly be assigned to a payment account, you can specify its posting account number (e.g. '1200'). If specified, the account must exist as a payment account for the customer. '0' is not considered a valid account.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
currencyYesAt the moment we accept USD, GBP and CHF. An empty string is not considered a valid currency.
vat_rateNoThe receipt's vat rate (e.g. 19.00 or 0) - may also be an empty string to indicate a non-available or multiple vat rates
counterpartyYesThe counterparty of the receipt, i.e. the invoicing party for type 'invoice inbound' or the recipient for type 'invoice outbound' (e.g. 'Peter Maier'). An empty string is not considered a valid counterparty.
date_deliveryNoThe delivery date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). NOTE: Due to the DATEV compatibility, we cannot accept a delivery date that is after the receipt date! If specified, it will be validated.
invoice_numberYesThe invoice number (e.g. '1231XU23') with a maximum length of 60 characters - may also be an empty string.
creditor_debtorNoIf the receipt shall directly be assigned to a creditor (for type 'invoice inbound') or debtor (for type 'invoice outbound') account, you can specify its posting account number (e.g. '70001'). If specified, creditors/debtors have to be activated for the customer, the creditor/debtor account must exist for the customer and it must be compatible with the specified receipt type. '0' is not considered a valid creditor/debtor.
date_payment_dueNoThe payment due date in format 'YYYY-MM-DD' (e.g. '2017-04-26').
payment_referenceNoThe payment reference id. If specified correctly, the uploaded receipt will match with the corresponding transaction.
link_to_receipt_id_by_customerNoHas to be a valid id_by_customer of another receipt. If specified, both receipts will be assigned to a transaction if one of them is assigned manually.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate it is not read-only and not idempotent. The description adds context: 'Not idempotent — calling twice may create duplicates' and the 🟡 WRITE marker, which reinforces the behavioral traits and provides practical guidance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise, with a clear front-loaded warning about write operations and non-idempotency. The content is focused and efficiently conveys the necessary information, though the repetition of 'creates data' and 'not idempotent' could be slightly streamlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (14 parameters, no output schema) and the presence of many siblings, the description provides adequate context: it specifies the action, distinguishes the tool from 'receipts_upload', and includes behavioral hints. It does not cover all edge cases but is sufficiently complete for a creation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all 14 parameters. The description does not add additional meaning about parameters beyond the schema details, thus a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title 'Receipts: add a receipt' and description 'Add a receipt into the specified customer account' clearly state the verb (add) and resource (receipt). It distinguishes itself from sibling 'receipts_upload' by noting this endpoint is for adding without a file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this endpoint, to add a receipt without a file!', providing a clear condition for use relative to 'receipts_upload'. However, it does not address other scenarios or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

receipts_addBatchReceipts: add batch receiptsA

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add batch receipts Add multiple receipts

Note: a request is allowed only every 5 seconds

Endpoint: POST /receipts/addBatch

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
receiptsYeslist of receipts maximum of 50 receipts are allowed A receipt has the same fields like the /receipts/add endpoint has, same applies for error messages

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate non-idempotent (idempotentHint=false) and non-destructive (destructiveHint=false). The description explicitly states 'Not idempotent — calling twice may create duplicates', which adds value beyond annotations. It also notes the write nature and rate limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a write warning and purpose. It is somewhat lengthy but structured logically: warning, title, purpose, rate limit. Could be more concise by removing the 'Endpoint' line, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema is provided, and the description does not explain return values. It mentions error messages in the schema. The rate limit and non-idempotency are covered, but missing details on response format or success indicators.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The description adds an extra constraint: 'maximum of 50 receipts are allowed', which is not in the schema. This fully compensates for the schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Creates new records' and 'add batch receipts / Add multiple receipts', specifying the verb (add) and resource (batch receipts). It distinguishes from sibling tools like 'receipts_add' (single) and 'receipts_upload'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions a rate limit of one request per 5 seconds but does not provide guidance on when to use this tool vs alternatives (e.g., single receipt add or upload). No explicit when-to-use or when-not-to-use context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

receipts_assigned_transactions_getReceipts: get all transactions assigned to a specific receiptA
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get all transactions assigned to a specific receipt Get all transactions assigned to a specific receipt for a specified customer account by id_by_customer. You can get the "id_by_customer" by using the "/receipts/get method" first.

Endpoint: POST /receipts/assigned-transactions/get

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
confirmed_onlyNoIf true, only confirmed assignments will be returned. If specified, the field will be validated.
receipt_id_by_customerYesThe id_by_customer of the receipt.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states 'READ-ONLY — Fetches data. Makes no changes', which aligns with and expands on annotations (readOnlyHint, idempotentHint, destructiveHint). No contradictions; adds beyond annotations by emphasizing safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a single line read-only note, a purpose sentence, a prerequisite hint, and the endpoint. Every sentence is essential, with no filler. The read-only indicator is front-loaded for instant clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema, the description could mention the structure of the returned transactions for completeness. However, the description adequately explains what the tool does and how to use it, with the prerequisite step. It's nearly complete but lacks a brief note on response format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining how to get the key parameter (receipt_id_by_customer via /receipts/get) and briefly noting the confirmed_only filter's effect, going beyond the schema's dry descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves all transactions assigned to a specific receipt, using the verb 'get' and specifying the resource. It distinguishes from sibling tools like 'transactions_assigned_receipts_get' by focusing on the receipt-to-transactions direction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a prerequisite (obtaining receipt_id_by_customer via /receipts/get), offering clear context. However, it does not explicitly state when to use this tool versus alternatives like transactions_assigned_receipts_get.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

receipts_delete_id_by_customerReceipts: delete receipt by id_by_customerA
DestructiveIdempotent

🔮 DESTRUCTIVE · deletes data — Deletes or cancels a record. Confirm with the user before calling. Receipt deletes are restorable; cost-location deletes are not. Cancelling a posting deletes it if it is not yet fixed, otherwise it books a reversal posting. delete receipt by id_by_customer Mark a receipt as deleted for a specified customer account by id_by_customer. You can get the "id_by_customer" by using the "/receipts/get method" first.

Endpoint: POST /receipts/delete/id_by_customer

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full disclosure burden. It explicitly marks the operation as destructive, requires user confirmation, and notes that receipt deletes are restorable while cost-location deletes are not. It doesn't cover auth or linked-record effects, but it is more transparent than most delete tool descriptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The destructive warning is front-loaded and useful, but the description includes a bold heading that repeats the tool name and a generic 'deletes or cancels a record' passage with cancellation details that are not specific to this receipt deletion tool. It's serviceable but not tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool deletes data and has no output schema or annotations, so the description should fully explain how to invoke it and what to expect. It leaves a critical gap: id_by_customer is central to the operation but is absent from the input schema, and no return behavior or post-delete effects are described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents api_key well and coverage is 100%. The description adds useful guidance on obtaining id_by_customer, but that value does not appear as a parameter in the schema, so the added instruction is ambiguous about how the agent should supply it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Mark a receipt as deleted for a specified customer account by id_by_customer.' It clearly differentiates from sibling tools like receipts_get, receipts_get_id_by_customer, and receipts_restore_id_by_customer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit user instructions: confirm before calling and first get id_by_customer via the receipts/get method. It doesn't enumerate when-not-to-use alternatives, but the context is clear enough for a destructive delete tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

receipts_getReceipts: get receiptsB
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get receipts Get receipts for a specified customer account. The response includes the number of returned rows and an array of receipts data.

Endpoint: POST /receipts/get

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoA limit of returned data. If no limit is given, the default will be 500. Also the maximum limit is 500. If specified, the field will be validated.
orderNoPossible fields are: date amount invoicenumber (invoice_number) invoicingparty (counterparty) Allowed values are 'ASC' and 'DESC' Example: {"date": "ASC"} {"date": "ASC", "amount": "DESC"}
offsetNoThe offset for paging returned data. If no offset is given, the default will be 0. If specified, the field will be validated.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
date_toNoThe receipt's issuing date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). All receipts with issuing date including and before given value will be returned. If specified, the field will be validated. An empty string is not considered a valid date.
deletedNoIf true, only deleted receipts will be returned. If specified, the field will be validated.
due_dateNoThe receipt's issuing due date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). All receipts with the same due date given value will be returned. If specified, the field will be validated. An empty string is not considered a valid due date.
date_fromNoThe receipt's issuing date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). All receipts with issuing date including and after given value will be returned. If specified, the field will be validated. An empty string is not considered a valid date.
counterpartyNoThe counterparty of the receipt, i.e. the invoicing party for type 'inbound' or the recipient for type 'outbound' (e.g. 'Peter Maier'). If specified, the field will be validated.
invoicenumberNoThe invoicenumber for the invoice. If specified, the receipts with the same invoicenumber will be retrieved.
include_offersNoIf true, offers will be included. If specified, the field will be validated.
list_directionYesCan be either 'inbound' ("Eingangsbelege") or 'outbound' ("Ausgangsbelege").
payment_statusNoCan be either 'paid' ("bezahlt") or 'unpaid' ("unbezahlt"). If specified, the field will be validated.
date_since_last_modifiedNoA date and time in format 'YYYY-MM-DD HH:MM:SS' (e.g. '2017-04-26 13:45:00'). If only 'YYYY-MM-DD' is specified, the time defaults to '23:59:59'. All receipts whose date_updated value is later than the specified value will be returned. If specified, the field will be validated. An empty string is not considered a valid date.

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states the tool is READ-ONLY and makes no changes, which reinforces the annotations. It also adds useful behavioral context beyond the annotations: the endpoint is a POST request, and the response includes a row count and an array of receipts data. This is meaningful extra information even though annotations already cover the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loads the important read-only signal, then gives the operation and endpoint. Minor redundancy exists because 'get receipts' repeats the title, but the description is not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema and annotations carry most of the burden: all parameters are described and safety is clear. The description adds a high-level response summary and endpoint, but with 14 parameters, no output schema, and many sibling tools, it does not fully explain the overall invocation context or how this list endpoint fits with alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameters are already well documented. The tool description itself adds no parameter-level meaning beyond the schema, which matches the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation: get receipts for a specified customer account, and notes that the response contains a row count and an array of receipt data. It does not explicitly differentiate from sibling tools like receipts_get_id_by_customer or receipts_assigned_transactions_get, so it falls short of a full 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. With many receipt-related siblings, the description does not explain why an agent should choose receipts_get over receipts_get_id_by_customer or receipts_assigned_transactions_get, nor does it mention any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

receipts_get_id_by_customerReceipts: get receipt by id_by_customerB
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get receipt by id_by_customer Get a single receipt for a specified customer account by id_by_customer. You can get the "id_by_customer" by using the "/receipts/get method" first. The response includes an array of receipt data.

Endpoint: POST /receipts/get/id_by_customer

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
get_fileNoIf true, the file will be included as a base64 encoded string (e_invoice_type = 0 -> standard pdf file, e_invoice_type = 1 -> ZUGFeRD pdf file, e_invoice_type = 2 -> xRechnung xml file). If specified, the field will be validated.

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description repeats the read-only nature but adds minimal behavioral context beyond that (e.g., response returns an array of receipt data). It does not elaborate on rate limits, required permissions, or error conditions. The description adds little value over annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat verbose with repetitive elements (emoji, bold title, endpoint). It contains three sentences plus the endpoint line; some parts are unnecessary (e.g., repeating the tool name). Could be more concise and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description mentions that the response includes an array of receipt data but lacks details about receipt fields or pagination. It also does not summarize parameter purposes beyond what the schema provides. Given the tool's simplicity, it is marginally adequate but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, with both parameters (api_key and get_file) fully described. The description adds no additional meaning or syntax details for these parameters beyond what the schema provides. Baseline of 3 is appropriate given high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and the resource ('a single receipt for a specified customer account by id_by_customer'). It explains the need to first retrieve the identifier from another endpoint. However, the name and title are redundant and confusing ('id_by_customer' is awkward), and it does not explicitly contrast with siblings like receipts_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions how to obtain the required identifier ('using /receipts/get method first'), which provides a prerequisite. But it does not specify when to use this tool over alternatives (e.g., receipts_get) or when not to use it. No explicit when-to-use or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

receipts_restore_id_by_customerReceipts: restore deleted receipt by id_by_customerA
Idempotent

🟡 WRITE · reverts state — Reverts a prior state change (un-confirm a posting, restore a deleted receipt). Reversible. restore deleted receipt by id_by_customer Restore a marked as deleted receipt for a specified customer account by id_by_customer. You can get the "id_by_customer" by using the "/receipts/get method" first.

Endpoint: POST /receipts/restore/id_by_customer

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds context: 'WRITE', 'reverts state', 'reversible', and explains it restores a deleted receipt, aligning with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat verbose with redundant phrasing ('reverts state — Reverts a prior state change... Reversible'). It could be more concise while maintaining clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple restore tool with one optional parameter and no output schema, the description adequately covers the action, reversal nature, and how to obtain the identifier. Lacks discussion of error scenarios but is sufficiently complete for the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a clear description for the only parameter (api_key). The description does not add parameter-specific information beyond what is in the schema, so it meets the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('restore'), the resource ('deleted receipt'), and the identifier ('id_by_customer'). It distinguishes from the inverse sibling receipts_delete_id_by_customer by specifying it reverts a prior state change.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context ('Reverts a prior state change', 'Reversible') and tells how to get id_by_customer via /receipts/get, but does not explicitly state when to use this tool vs alternatives, nor when not to use it (e.g., if receipt is not deleted).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

receipts_uploadReceipts: upload receiptA

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. upload receipt Upload a receipt into the specified customer account. The receipt will be processed by the BuchhaltungsButler technology. The response includes the filename (without extension) of the receipt as it is stored.

Note: max 10 requests per minute

Endpoint: POST /receipts/upload

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoThe receipt's issuing date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). If specified, the field will be validated. An empty string is not considered a valid date. NOTE: This parameter will be ignored when you upload an e-invoice!
fileYesThe receipt file as real file upload or as base64 encoded string. Accepted file types are: application/pdf, text/xml, application/xml, image/jpeg, image/png, image/bmp, image/tiff
typeYesCan be 'invoice inbound' ("Eingangsrechnung"), 'invoice outbound' ("Ausgangsrechnung"), 'credit inbound' ("Eingangsgutschrift § 14 UStG"), 'credit outbound' ("Ausgangsgutschrift § 14 UStG").
amountNoThe total amount of the receipt, can be negative to indicate a reversed payment (e.g. -12.30). If specified, the field will be validated. '0.00' is not considered a valid receipt amount. NOTE: This parameter will be ignored when you upload an e-invoice!
accountNoIf the receipt shall directly be assigned to a payment account, you can specify its posting account number (e.g. '1200'). If specified, the account must exist as a payment account for the customer. '0' is not considered a valid account.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
currencyNoHas to be 'EUR' if specified. If specified, the field will be validated. An empty string is not considered a valid currency. NOTE: This parameter will be ignored when you upload an e-invoice!
vat_rateNoThe receipt's vat rate (e.g. 19.00 or 0) - may also be an empty string to indicate a non-available or multiple vat rates. NOTE: This parameter will be ignored when you upload an e-invoice!
file_nameNoThe name of the file. NOTE: This is required for files sent as base64 encoded string and will be ignored for files sent as real upload.
counterpartyNoThe counterparty of the receipt, i.e. the invoicing party for type 'invoice inbound' or the recipient for type 'invoice outbound' (e.g. 'Peter Maier'). If specified, the field will be validated. An empty string is not considered a valid counterparty. NOTE: This parameter will be ignored when you upload an e-invoice!
date_deliveryNoThe delivery date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). NOTE: Due to the DATEV compatibility, we cannot accept a delivery date that is after the receipt date! If specified, it will be validated. NOTE: This parameter will be ignored when you upload an e-invoice!
invoice_numberNoThe invoice number (e.g. '1231XU23') with a maximum length of 60 characters - may also be an empty string. NOTE: This parameter will be ignored when you upload an e-invoice!
creditor_debtorNoIf the receipt shall directly be assigned to a creditor (for type 'invoice inbound') or debtor (for type 'invoice outbound') account, you can specify its posting account number (e.g. '70001'). If specified, creditors/debtors have to be activated for the customer, the creditor/debtor account must exist for the customer and it must be compatible with the specified receipt type. '0' is not considered a valid creditor/debtor.
date_payment_dueNoThe payment due date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). NOTE: This parameter will be ignored when you upload an e-invoice!
payment_referenceNoThe payment reference id. If specified correctly, the uploaded receipt will match with the corresponding transaction. Currently we support Amazon order id, PayPal transaction id and Stripe transaction id. NOTE: This parameter will be ignored when you upload an e-invoice!
link_to_receipt_id_by_customerNoHas to be a valid id_by_customer of another receipt. If specified, both receipts will be assigned to a transaction if one of them is assigned manually.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds context beyond annotations: it clearly states the tool is not idempotent (may create duplicates) and includes a rate limit. Annotations already indicate it's a write operation (readOnlyHint=false). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is fairly concise, with a clear opening line distinguishing the tool type. The inclusion of the endpoint and rate limit adds value, though some repetition of the purpose exists. Could be trimmed slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 16 parameters and no output schema, the description explains the general purpose and response (filename), but does not summarize parameter interactions (e.g., e-invoice ignoring certain params) or provide more detail on processing. Adequate but not fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The tool description does not add extra parameter-specific meaning, but the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool uploads a receipt into a customer account, with a specific verb ('upload') and resource ('receipt'). It distinguishes from siblings like receipts_add by emphasizing file upload and processing by BuchhaltungsButler technology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions a rate limit (10 requests per minute) and implies it is for file uploads, but does not explicitly state when to use this tool over alternatives like receipts_add or receipts_addBatch. No when-not or alternative names given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_create_bwaReports: create bwa reportA

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. create bwa report Triggers the creation of a BWA report ("Betriebswirtschaftliche Auswertung").

The report is generated asynchronously in the background. The response contains the id_by_customer of the created report, which may be used to retrieve it once the generation has been finished.

A new report may only be requested once the generation of a previously requested report of the same type has been finished.

Endpoint: POST /reports/create/bwa

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
date_toYesThe last day of the period the report is created for, in format 'YYYY-MM-DD' (e.g. '2026-03-31').
date_fromYesThe first day of the period the report is created for, in format 'YYYY-MM-DD' (e.g. '2026-01-01').

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations that already indicate a non-idempotent write, the description adds material behavioral detail: the report is generated asynchronousy, the response contains id_by_customer, and concurrent requests of the same type are restricted. This is exactly the kind of context agents need beyond annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main body is relatively compact and includes endpoint, async behavior, and response info. However, the leading ' WRITE · creates data — Creates new records...' boilerplate is redundant with the title and annotations, and the bold 'create bwa report' heading repeats the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool with no output schema, the description conveys the response contract (id_by_customer), the asynchronous nature, and the single-flight constraint. It only stops short of explicitly naming reports_get_bwa as the follow-up retrieval tool, though that sibling is present in the list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema fully documents date_from, date_to, and api_key including formats and defaults. The description itself adds no parameter-level detail, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action and resource: it 'Triggers the creation of a BWA report' and provides the endpoint. It is distinguishable from siblings like reports_create_sums by name and content, though the opening boilerplate about 'receipts, transactions, postings...' is generic and not specific to BWA reports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides one important usage constraint: a new report may only be requested after a previous report of the same type has finished generating. However, it does not explicitly tell an agent when to choose this tool over reports_create_sums or when to pair it with reports_get_bwa, leaving some usage routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_create_sumsReports: create sums reportA

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. create sums report Triggers the creation of a sums report ("Summen- und Saldenliste"). The report is always created for all of the customer's postingaccounts.

The report is generated asynchronously in the background. The response contains the id_by_customer of the created report, which may be used to retrieve it once the generation has been finished.

A new report may only be requested once the generation of a previously requested report of the same type has been finished.

Endpoint: POST /reports/create/sums

ParametersJSON Schema
NameRequiredDescriptionDefault
baseNoThe date the postings are taken into account by. Can be either 'date' ("Buchungsdatum") or 'date_delivery_else_date' ("Buchungs- und Leistungsdatum"). If specified, the field will be validated.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
date_toYesThe last day of the period the report is created for, in format 'YYYY-MM-DD' (e.g. '2026-03-31').
file_csvNoIf true, a csv file will be created for the report additionally. If specified, the field will be validated.
file_pdfNoIf true, a pdf file will be created for the report additionally. If specified, the field will be validated.
date_fromYesThe first day of the period the report is created for, in format 'YYYY-MM-DD' (e.g. '2026-01-01').
archive_exportNoIf true, a zip archive containing the csv file and the postingaccount ledgers ("Kontenbl&auml;tter") will be created for the report additionally. If specified, the field will be validated.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnly=false, idempotent=false), it discloses asynchronous generation, the id_by_customer response handle, and the one-at-a-time concurrency rule. The generic preface 'creates new records (receipts, transactions, postings, invoices, master data)' is not accurate for this specific report-creation tool and slightly undermines transparency, though it does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main content is well-structured with a bolded operation, short paragraphs, and endpoint. The opening 'WRITE · creates data — Creates new records...' line is redundant and partly off-target, but the rest of the description stays compact and action-oriented.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema asynchronous creation endpoint, it covers the essential calling context: response contains id_by_customer, retrieval happens after generation finishes, duplicate creation is possible, and only one same-type report may be pending. The file/date parameters are already fully documented in the input schema, so no additional parameter detail is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-level detail beyond the schema; it only states the report period and that all postingaccounts are included, which relates to behavior rather than the individual parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly says 'Triggers the creation of a sums report' and names the German report type, so an agent can tell this is the sums-report creation endpoint rather than reports_get_sums. However, it does not explicitly contrast with sibling reports_create_bwa or retrieval endpoints, and the generic 'creates data — creates receipts/transactions/postings/invoices/master data' preface is broader and slightly distracting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: the report is always for all postingaccounts, is asynchronous, and only one pending same-type report is allowed at a time. It does not explicitly say 'use reports_get_sums to retrieve the result' or 'use reports_create_bwa for a different report type,' but the constraints are enough to guide correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_get_bwaReports: get bwa reportA
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get bwa report Returns a previously created BWA report ("Betriebswirtschaftliche Auswertung").

Reports are generated asynchronously, so a report is only available once its generation has been finished. Note that creating a new report of the same type replaces the previously created one.

Endpoint: POST /reports/get/bwa

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
get_filesNoIf true, the report's files will be included as base64 encoded strings. If specified, the field will be validated.
report_id_by_customerYesThe id_by_customer of the report, as returned when the report was created

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only/idempotent/non-destructive, and the description reinforces this with 'READ-ONLY — Fetches data. Makes no changes'. It adds valuable extra context about asynchronous generation and the replacement of a previously created report, which goes beyond the annotations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loads the safety statement, then states the operation, async timing, replacement caveat, and endpoint. There is slight redundancy between the bolded title 'get bwa report' and the action sentence, but no unnecessary clutter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with three schema-documented parameters and no output schema, the description covers the key behavioral context: only fetch when generation is finished, and be aware that newer generation replaces the report. It doesn't describe the return payload shape, but no output schema exists and the tool is simple enough that this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: all three parameters (api_key, get_files, report_id_by_customer) have descriptions in the schema. The tool description adds no parameter-specific meaning, so it stays at the baseline for fully covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action and resource: 'Returns a previously created BWA report'. This distinguishes the tool from creation siblings like reports_create_bwa, but it does not explicitly differentiate it from other report getters (e.g., reports_get_sums), leaving some ambiguity for the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides concrete usage context: the report must exist ('previously created') and generation is asynchronous, so it is only available after finishing. It also warns that creating a new report replaces the old one. It doesn't, however, name alternatives or state when not to use this tool versus other report getters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_get_sumsReports: get sums reportA
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get sums report Returns a previously created sums report ("Summen- und Saldenliste").

Reports are generated asynchronously, so a report is only available once its generation has been finished. Note that creating a new report of the same type replaces the previously created one.

Endpoint: POST /reports/get/sums

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
get_filesNoIf true, the report's files will be included as base64 encoded strings. If specified, the field will be validated.
report_id_by_customerYesThe id_by_customer of the report, as returned when the report was created

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value beyond annotations by disclosing the asynchronous generation behavior and that creating a new report of the same type replaces the previous one. This gives useful expectations about data availability and freshness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the READ-ONLY emoji and safety note appear first, followed by a one-line purpose, then two essential behavioral caveats, and the endpoint. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple fetch tool with full schema coverage and clear annotations, the description covers the key non-obvious aspects: async generation, report replacement, and endpoint. It does not describe the response format, but no output schema exists and the purpose is straightforward, so this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are already documented in the schema. The tool description itself does not add further parameter semantics, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Returns a previously created sums report' with a specific resource type. However, it does not explicitly distinguish itself from the sibling reports_get_sums_ledger, which could be confused as another sums report variant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: the report must already exist, is only available after async generation finishes, and can be replaced by creating a new report. It does not explicitly mention when to prefer this tool over alternatives like reports_get_sums_ledger, but the usage context is strong enough for an agent to infer the right situation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_get_sums_ledgerReports: get sums report postingaccount ledgerA
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get sums report postingaccount ledger Returns the postingaccount ledger ("Kontenblatt") of one postingaccount, holding its postings of the requested period.

The postingaccount numbers available for a sums report are provided by reports/get/sums, both as the keys of the 'sums' object and as its entries' 'postingaccount_number'.

In contrast to the report itself the ledger is created on the fly, so no report has to be created beforehand. Note that retrieving the ledger of a postingaccount holding a lot of postings may take a while.

Endpoint: POST /reports/get/sums/ledger

ParametersJSON Schema
NameRequiredDescriptionDefault
baseNoThe date the postings are taken into account by. Can be either 'date' ("Buchungsdatum") or 'date_delivery_else_date' ("Buchungs- und Leistungsdatum"). If specified, the field will be validated.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
date_toYesThe last day of the period the ledger is returned for, in format 'YYYY-MM-DD' (e.g. '2026-03-31').
date_fromYesThe first day of the period the ledger is returned for, in format 'YYYY-MM-DD' (e.g. '2026-01-01').
postingaccount_numberYesThe number of the postingaccount to return the ledger for

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the description's main added value is explaining that the ledger is generated on the fly, no report must be created beforehand, and large ledgers may take a while. This is useful behavioral context beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably compact and front-loads the read-only nature and the core purpose. There is some redundancy, such as repeating the tool name as a bold heading and restating read-only behavior already present in annotations, but it remains clear and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description provides the essential invocation context: what the ledger contains, where valid postingaccount numbers come from, the on-the-fly generation, and a performance caveat. It does not describe the exact output structure, but that is not strictly necessary for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all five parameters with useful details including date formats and api_key behavior, so the baseline is 3. The description adds meaningful guidance by telling the agent that valid postingaccount_number values can be obtained from reports/get/sums, which helps avoid invalid calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Returns') and the resource ('postingaccount ledger' / 'Kontenblatt') for one postingaccount. It also distinguishes this from the aggregated sums report by explicitly mentioning the report itself is created on the fly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that postingaccount numbers come from reports/get/sums, and contrasts this ledger with the report itself, implying when this tool is appropriate without needing to create a report first. It does not explicitly enumerate alternative tools or exclusions, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_add_batch_creditorsSettings: create creditor batchB

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. create creditor batch Create multiple creditor accounts.

Endpoint: POST /settings/add-batch/creditors

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
creditorsYesan array of creditors, each creditor has the field declaration and validation from the single add/creditor endpoint

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds some context beyond annotations: indicates write operation and non-idempotence, but annotations already convey these. Adds some more specific record types.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is short but includes a generic header line that could be trimmed. Overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Missing context on batch processing constraints (size limits, validation), no mention of return values or typical use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3. Description does not add extra meaning about parameters beyond what schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Create multiple creditor accounts' with specific verb and resource. Distinguishes from siblings like single creditor add and batch debtors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives like settings_add_creditor or settings_update_creditor. Only mentions behavior, not usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_add_batch_debtorsSettings: create debtors batchB

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. create debtors batch Create multiple debtor accounts.

Endpoint: POST /settings/add-batch/debtors

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
debtorsYesan array of debtors, each debtor has the field declaration and validation from the single add/debtor endpoint

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint=false, idempotentHint=false) are consistent with the description's 'WRITE' and non-idempotency warning. The description adds context that it creates data, but includes a generic sentence listing other record types (receipts, transactions, etc.) which is inaccurate for this tool, slightly reducing transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately concise but includes a generic template line that is irrelevant to this specific tool (listing other record types), which detracts from clarity. The bold header helps structure, but the generic part could cause confusion.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description should cover return values or response behavior, but it does not. It also lacks details on batch size limits, validation errors, or overall process flow. The generic sentence introduces ambiguity about the tool's scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with detailed parameter descriptions. The tool description itself adds no additional parameter-specific information beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Create multiple debtor accounts' (specific verb and resource) and opens with 'create debtors batch', clearly distinguishing from sibling tools like 'settings_add_debtor' (single debtor) and 'settings_add_batch_creditors' (batch creditors).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description warns about non-idempotency but provides no explicit guidance on when to use this tool versus the single debtor creation sibling ('settings_add_debtor'), nor does it mention prerequisites or scenarios where batch creation is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_add_creditorSettings: create creditorA

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. create creditor Create a creditor account.

Endpoint: POST /settings/add/creditor

ParametersJSON Schema
NameRequiredDescriptionDefault
bicNoThe bic of your new creditor account. If specified, the field will be validated.
zipNoThe zip of your new creditor account. If specified, the field will be validated.
cityNoThe city of your new creditor account. If specified, the field will be validated.
ibanNoThe iban of your new creditor account. If specified, the field will be validated.
nameYesThe name of your new creditor account
emailNoThe email of your new creditor account. If specified, the field will be validated.
streetNoThe street of your new creditor account. If specified, the field will be validated.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
countryNoThe country of your new creditor account. If specified, the field will be validated. Valid cases are only the German version of the country name [DĂ€nemark] OR the two digit ISO code of the country [DK].
due_in_daysNoThe due in days of your new debtor account. If specified, the field will be validated.
sales_tax_idNoThe sales tax id of your new creditor account. If specified, the field will be validated.
contact_person_nameNoThe contact person name of your new creditor account. If specified, the field will be validated.
postingaccount_numberNoThe postingaccount number of your new creditor account. If not specified, the next possible number will be created. If specified, the field will be validated.
additional_address_lineNoThe additional address line of your new creditor account. If specified, the field will be validated.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-idempotency and non-readOnly. The description explicitly states 'Not idempotent — calling twice may create duplicates' and marks the tool as 'WRITE · creates data', adding behavioral context beyond annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short but includes an initial broad statement 'Creates new records (receipts, transactions, postings, invoices, master data)' which is misleading as this tool only creates a creditor account. This fluff reduces conciseness and clarity. The important non-idempotency warning is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 14 parameters and no output schema, the description covers the action and non-idempotency but omits return value details (e.g., does it return created creditor ID?). The endpoint is provided. The initial overbroad statement slightly detracts from completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all 14 parameters have detailed descriptions. The tool description adds no additional parameter meaning, so it meets the baseline. No need for extra elaboration.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a creditor account, distinguishing it from sibling create tools like settings_add_debtor or settings_add_postingaccount. The verb 'create' and resource 'creditor account' are specific, and the 'WRITE' label emphasizes mutation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through its purpose but provides no explicit guidance on when to use this tool versus alternatives (e.g., settings_add_debtor). The non-idempotency warning is a caution but not a usage rule. No context of prerequisites or conflicting tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_add_debtorSettings: create debtorA

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. create debtor Create a debtor account.

Endpoint: POST /settings/add/debtor

ParametersJSON Schema
NameRequiredDescriptionDefault
bicNoThe bic of your new debtor account. If specified, the field will be validated.
zipNoThe zip of your new debtor account. If specified, the field will be validated.
cityNoThe city of your new debtor account. If specified, the field will be validated.
ibanNoThe iban of your new debtor account. If specified, the field will be validated.
nameYesThe name of your new debtor account
emailNoThe email of your new debtor account. If specified, the field will be validated.
streetNoThe street of your new debtor account. If specified, the field will be validated.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
countryNoThe country of your new debtor account. If specified, the field will be validated. Valid cases are only the German version of the country name [DĂ€nemark] OR the two digit ISO code of the country [DK].
sales_tax_idNoThe sales tax id of your new debtor account. If specified, the field will be validated.
customer_numberNoThe customer_number of your new debtor account. If specified, the field will be validated.
contact_person_nameNoThe contact person name of your new debtor account. If specified, the field will be validated.
postingaccount_numberNoThe postingaccount number of your new debtor account. If not specified, the next possible number will be created. If specified, the field will be validated.
additional_address_lineNoThe additional address line of your new debtor account. If specified, the field will be validated.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool is not idempotent and may create duplicates, which aligns with annotations (idempotentHint=false, readOnlyHint=false). It also indicates validation behavior for optional fields. This adds value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with a brief generic header and two specific sentences. It is front-loaded with the write/duplicate warning, then the specific action. No unnecessary text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the schema covers all parameters, the description lacks information about return values (no output schema) and any post-creation steps or prerequisites. For a creation tool with 14 parameters, more context would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions for all 14 parameters. The tool description does not add additional meaning to the parameters beyond what is in the schema, so it meets the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Create a debtor account' and uses a specific verb-resource pair. The title and description clearly indicate this tool creates debtor records, distinguishing it from sibling tools like settings_update_debtor or settings_add_creditor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives such as settings_add_batch_debtors for bulk creation or settings_update_debtor for modifications. Usage is only implied by the name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_add_postingaccountSettings: add postingaccountB

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add postingaccount Create a postingaccount.

Endpoint: POST /settings/add/postingaccount

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of your new postingaccount.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
postingaccount_numberYesThe postingaccount number of your new postingaccount.
parent_postingaccount_numberYesThe parent postingaccount number of your new postingaccount.This is the postingaccount from which your individually created postingaccount inherits their properties.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and idempotentHint=false. The description adds a warning about duplicates from repeated calls, which is useful. However, it does not disclose potential side effects, required permissions, or return values, missing opportunities to fully inform the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise but includes a generic boilerplate line ('🟡 WRITE · creates data') that does not add tool-specific value. The specific part is short, but the structure could be tighter by removing redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With full schema coverage and a simple structure, the description adequately covers the purpose and non-idempotency. However, it lacks details on expected responses, error conditions, or typical usage patterns, leaving some gaps for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions. The description adds no additional parameter-level meaning beyond what is in the schema, so it meets the baseline without adding value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Create a postingaccount' and mentions the endpoint, making the action clear. However, it does not differentiate from similar tools like settings_update_postingaccount, which might cause confusion about when to use create vs update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. It mentions non-idempotency but does not compare to sibling tools like settings_add_creditor or settings_update_postingaccount, leaving the agent to infer usage from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_get_creditorsSettings: get creditorsB
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get creditors Get all creditors

Endpoint: POST /settings/get/creditors

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNolimit of the results, default is 25 results
offsetNooffset of the results, default is 0
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds 'READ-ONLY' and 'Makes no changes', which aligns but adds no new behavioral insights. There is a slight inconsistency: claiming 'Get all creditors' while supporting pagination, which is not explained. Beyond that, no additional behavioral traits are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, with key info front-loaded in the first line. However, it repeats 'get creditors' (title, description, inline code) and includes an endpoint line that may not be essential. Still, it's efficient and avoids verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 3 optional params, no output schema. The description does not explain pagination behavior (limit/offset defaults, response structure). For a simple list tool, this might suffice, but it leaves gaps about how to retrieve all creditors and what the output contains. More detail on pagination and response would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage: all three parameters have descriptions. The tool description adds no extra meaning to parameters; it merely restates the tool's purpose. Baseline is 3 because schema already provides sufficient semantic info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as fetching creditors with the phrase 'get creditors' and 'Get all creditors'. The title and emoji reinforce the read-only nature. The sibling tools include distinct actions like add/update, so differentiation is clear. However, the term 'all' contradicts the pagination parameters (limit/offset), slightly reducing clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives. The name and sibling set imply it is for reading creditors, not adding or updating. Usage context is implied but not stated, leaving ambiguity for an AI agent that might need to choose between get_creditors and add_creditor.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_get_debtorsSettings: get debitorsB
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get debitors Get all debitors

Endpoint: POST /settings/get/debtors

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNolimit of the results, default is 25 results
offsetNooffset of the results, default is 0
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description repeats the read-only nature already indicated by annotations (readOnlyHint=true) but adds no new behavioral traits. The endpoint method (POST) is a minor detail not found in annotations, but overall value is limited given annotation richness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using only two lines plus an endpoint line. It front-loads the read-only nature and immediately states the action. Every sentence serves a purpose, with no extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimal and lacks context about returns (e.g., a list of debtors) or pagination behavior. For a simple read-only tool with no output schema, it is adequate but leaves gaps in understanding the full scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema fully documents all three parameters. The description adds no additional meaning or explanation to parameters like limit, offset, or api_key, meeting the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('debitors'), making the tool's purpose unambiguous. However, it does not explicitly distinguish itself from sibling tools like settings_get_creditors, which limits contextual clarity slightly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. There is no mention of prerequisites, use cases, or exclusions, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_get_postingaccountsSettings: get postingaccountsA
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get postingaccounts Get all postingaccounts

Endpoint: POST /settings/get/postingaccounts

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNolimit of the results, default is 1000 results. If specified, the field will be validated.
orderNothe order of the results.The following options are valid:postingaccount_number ASC | DESCname ASC | DESCtype ASC | DESC. If specified, the field will be validated.
offsetNooffset of the results, default is 0. If specified, the field will be validated.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
exclude_debtorsNoexclude all debtor postingaccounts from result. If specified, the field will be validated.
exclude_accountsNoexclude all base accounts (e.g. bank accounts) from result. If specified, the field will be validated.
exclude_creditorsNoexclude all creditor postingaccounts from result. If specified, the field will be validated.
exclude_postingaccountsNoexclude all postingaccounts from result. If specified, the field will be validated.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description reinforces read-only behavior but adds minimal new insight beyond stating the method (POST) and the fact that no changes are made.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the key action ('get postingaccounts') and read-only indicator. It includes an emoji for visual clarity but could be slightly more streamlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 8 parameters and no output schema, the description does not explain return format, pagination behavior, or how the filter parameters (exclude_*) interact. This leaves significant gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The tool description does not add any additional meaning or context for parameters beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'get postingaccounts' and 'Get all postingaccounts', making the verb and resource explicit. It distinguishes from sibling tools like settings_get_debtors and settings_get_creditors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates read-only usage but does not provide specific when-to-use or when-not-to-use guidance relative to alternatives. It lacks explicit exclusions or alternative tool references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_update_creditorSettings: update creditorA
Idempotent

🟡 WRITE · updates data — Modifies existing master data in place. update creditor Update a creditor account.

Endpoint: POST /settings/update/creditor

ParametersJSON Schema
NameRequiredDescriptionDefault
bicNoThe new bic of the creditor account. If specified, the field will be validated.
zipNoThe new zip of the creditor account. If specified, the field will be validated.
cityNoThe new city of the creditor account. If specified, the field will be validated.
ibanNoThe new iban of the creditor account. If specified, the field will be validated.
nameNoThe new name of the creditor account
emailNoThe email of the creditor account. If specified, the field will be validated.
streetNoThe new street of the creditor account. If specified, the field will be validated.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
countryNoThe new country of the creditor account. If specified, the field will be validated. Valid cases are only the German version of the country name [DĂ€nemark] OR the two digit ISO code of the country [DK].
due_in_daysNoThe due in days of your new debtor account. If specified, the field will be validated.
sales_tax_idNoThe new sales tax id of the creditor account. If specified, the field will be validated.
contact_person_nameNoThe new contact person name of the creditor account. If specified, the field will be validated.
postingaccount_numberYesThe postingaccount_number of the creditor account
additional_address_lineNoThe new additional address line of the creditor account. If specified, the field will be validated.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=true. The description adds '🟡 WRITE · updates data' and 'Modifies... in place', which aligns but doesn't provide additional behavioral context like authorization needs or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with key info (WRITE label, verb, resource). However, the 'updates data' phrase is redundant with the WRITE label. Overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 14 parameters and no output schema, the description lacks information about return values, confirmation of changes, or what happens after a successful update. This leaves the agent underinformed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The description does not add extra meaning beyond the schema; it only mentions the endpoint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'update' and the resource 'creditor account', and distinguishes it from add/get siblings by specifying 'Modifies existing master data in place'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Minimal guidance: it says 'Modifies existing master data in place' implying it's for existing creditors, but no explicit when-to-use, prerequisites, or alternatives compared to sibling tools like settings_add_creditor.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_update_debtorSettings: update debtorB
Idempotent

🟡 WRITE · updates data — Modifies existing master data in place. update debtor Update a debtor account.

Endpoint: POST /settings/update/debtor

ParametersJSON Schema
NameRequiredDescriptionDefault
bicNoThe new bic of the debtor account. If specified, the field will be validated.
zipNoThe new zip of the debtor account. If specified, the field will be validated.
cityNoThe new city of the debtor account. If specified, the field will be validated.
ibanNoThe new iban of the debtor account. If specified, the field will be validated.
nameNoThe new name of the new debtor account
emailNoThe email of the debtor account. If specified, the field will be validated.
streetNoThe new street of the debtor account. If specified, the field will be validated.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
countryNoThe new country of the debtor account. If specified, the field will be validated. Valid cases are only the German version of the country name [DĂ€nemark] OR the two digit ISO code of the country [DK].
sales_tax_idNoThe new sales tax id of the debtor account. If specified, the field will be validated.
customer_numberNoThe new customer_number of the debtor account. If specified, the field will be validated.
contact_person_nameNoThe new contact person name of the debtor account. If specified, the field will be validated.
postingaccount_numberYesThe postingaccount_number of the debtor account
additional_address_lineNoThe new additional address line of the debtor account. If specified, the field will be validated.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds no additional behavioral context beyond stating it modifies data. No contradiction with annotations, but no extra transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and to the point, containing only essential information. However, it redundantly repeats the title and endpoint. Still efficient overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of 14 parameters and no output schema, the description lacks completeness. It does not specify that postingaccount_number is required to identify the debtor, nor does it explain the return value or update behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has high description coverage (100%), and each parameter is well-documented with validation details. The description adds no additional meaning beyond what is already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update a debtor account' and 'Modifies existing master data in place,' which specifies the verb and resource. The sibling tools include separate create and read operations, providing good differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide guidance on when to use this tool versus alternatives like settings_add_debtor. The context implies it is for updating existing debtors, but no explicit when-to-use or when-not-to-use instructions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

settings_update_postingaccountSettings: update postingaccountC
Idempotent

🟡 WRITE · updates data — Modifies existing master data in place. update postingaccount Update a postingaccount.

Endpoint: POST /settings/update/postingaccount

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe new name of the postingaccount to update.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
postingaccount_numberYesThe postingaccount number of the postingaccount to update.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false. The description adds minimal value by stating 'WRITE · updates data' and 'modifies existing master data in place', but it does not disclose error handling, authentication needs, or rate limits. The endpoint URL is provided but not behavioral.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and uses emoji/bold for emphasis. It includes the endpoint but repeats the tool name. It is concise and front-loaded with the purpose, though slightly redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should explain return value or success indicators, but it does not. It also lacks context about the tool's role among siblings (e.g., only for existing records). The description is too minimal to be considered complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema fully describes all three parameters. The description adds no additional details beyond what the schema provides, thus baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update a postingaccount' with a verb and resource. However, it does not explicitly distinguish from sibling tools like settings_add_postingaccount or settings_get_postingaccounts, though the verb 'update' inherently differentiates it from creation or retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., settings_add_postingaccount for creation, settings_get_postingaccounts for listing). The description lacks any context about prerequisites or typical scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transactions_addTransactions: add transactionB

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add transaction Add a transaction to a payment account of the specified customer.

Endpoint: POST /transactions/add

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoThe transaction type (e.g. 'Direct debit'). If specified, the field will be validated. An empty string is not considered a valid type.
amountYesThe transaction's amount (positive for incoming and negative for outgoing payments) in the account's currency. '0.00' is not considered a valid transaction amount.
accountYesThe posting account number (e.g. '1200') of the account to which to add the transaction. The account must exist as a payment account for the customer.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
purposeNoThe transaction purpose - may also be an empty string.
to_fromYesThe payment recipient or sender
currencyNoThe transaction currency. Currently we support the following currencies: AED, AUD, BGN, BRL, CAD, CHF, CNY, COP, CYP, CZK, DKK, EUR, GBP, HKD, HRK, HUF, IDR, ILS, INR, ISK, JPY, KRW, LTL, LVL, MTL, MXN, MYR, NOK, NZD, PEN, PHP, PLN, QAR, ROL, RON, RUB, SEK, SGD, SIT, SKK, THB, TRL, TRY, UAH, USD, VND, ZAR If specified, the field will be validated. An empty string is not considered a valid type.
bank_codeNoThe bank code (or BIC) of the payment recipient or sender. If specified, the field will be validated. An empty string is not considered a valid bank code.
bank_nameNoThe bank name of the payment recipient or sender. If specified, the field will be validated. An empty string is not considered a valid bank name.
value_dateNoThe transaction's value date in format 'YYYY-MM-DD HH:II:SS' (e.g. '2017-04-26 00:00:00'). If not specified, the value date will be set to the same value as the booking date. If specified, the field will be validated. An empty string is not considered a valid date.
booking_dateYesThe transaction's booking date in format 'YYYY-MM-DD HH:II:SS' (e.g. '2017-04-26 00:00:00').
booking_textNoThe booking text - may also be an empty string.
account_numberNoThe account number (or IBAN) of the payment recipient or sender. If specified, the field will be validated. An empty string is not considered a valid account number.
payment_referenceNoThe payment reference id. If specified correctly, the added transaction will match with the corresponding receipt.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false. The description adds value by stating 'WRITE · creates data' and 'Not idempotent — calling twice may create duplicates', but does not go beyond annotations significantly. No additional context on permissions or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: two sentences plus the endpoint, with a clear emoji and warning. No unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 14 parameters and no output schema, the description does not explain return values, error handling, or the structure of the response. For a write operation, this is a significant gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with descriptions for all 14 parameters. The tool description does not add any extra meaning beyond the schema; it only mentions the endpoint. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a transaction to a payment account of the specified customer' along with the endpoint. The title 'Transactions: add transaction' also reinforces the purpose. It distinguishes from siblings like 'transactions_addBatch' by focusing on a single transaction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as 'transactions_addBatch' for batch additions or other transaction-related tools. It does not mention preconditions or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transactions_addBatchTransactions: add batch transactionA

🟡 WRITE · creates data — Creates new records (receipts, transactions, postings, invoices, master data). Not idempotent — calling twice may create duplicates. add batch transaction Add multiple transactions

Note: a request is allowed only every 5 seconds

Endpoint: POST /transactions/addBatch

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
transactionsYeslist of transactions maximum of 50 transactions are allowed A transaction has the same fields like the /transactions/add endpoint has, same applies for error messages

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (destructiveHint=false, idempotentHint=false), description adds 'WRITE · creates data', explicit non-idempotency warning, and rate-limit constraint. This is valuable behavioral context. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Contains some redundancy ('add batch transaction' then 'Add multiple transactions'), and includes the endpoint path which is not essential. Information is generally front-loaded but could be more streamlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

High schema coverage and parameter count low (2), but missing return value description (no output schema) and error handling details are vaguely referenced ('same applies for error messages'). Adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so baseline is 3. Description adds the maximum batch size (50) and references the single-transaction endpoint for field details, which adds useful context beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it creates new records and adds multiple transactions, using a specific verb and resource. However, the description lists multiple record types (receipts, transactions, etc.) which is slightly broad and could confuse the exact scope. No explicit differentiation from sibling batch tools like receipts_addBatch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides some guidance: not idempotent (duplicate warning) and rate limit (5 seconds). However, it does not explicitly compare to alternative tools (e.g., transactions_add for single transactions) or specify when to choose this over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transactions_assign_batch_receiptTransactions: assign multiple receipts to transactionsB

🟡 WRITE · links/unlinks records — Creates or removes an assignment between records (e.g. receipt ↔ transaction). Reversible. assign multiple receipts to transactions Assign multiple receipts to transactions.

Endpoint: POST /transactions/assign-batch/receipt

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
transactions_to_receiptsYeslist of receipts to transactions maximum of 50 element are allowed

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable context beyond annotations: it explicitly states the operation is a write ('WRITE'), reversible, and links/unlinks records. This complements the annotations (readOnlyHint=false, destructiveHint=false) and informs the agent about the non-destructive, reversible nature. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with key information front-loaded (action, reversibility, endpoint). It uses an emoji for quick visual categorization and avoids redundancy. A minor improvement could be removing the repeated 'Assign multiple receipts to transactions.' line.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core operation and reversibility but lacks some context: it doesn't mention the 50-element batch limit from the schema, nor does it describe return values (no output schema). For a batch tool, additional context like error handling or prerequisites would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the input schema already documents both parameters (api_key and transactions_to_receipts). The description does not add additional parameter semantics beyond what the schema provides, such as format or constraints. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it assigns multiple receipts to transactions, using a specific verb and resource. However, it does not explicitly distinguish itself from sibling tools like transactions_assign_receipt (single) or transactions_unassign_receipt (removal), relying on the name 'batch' to imply the difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention using this for batch operations and the single-assignment counterpart for individual operations, leaving the agent to infer from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transactions_assigned_receipts_getTransactions: get all receipts assigned to a specific transactionA
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get all receipts assigned to a specific transaction Get all receipts assigned to a specific transaction for a specified customer account by id_by_customer. You can get the "id_by_customer" by using the "/transactions/get method" first.

Endpoint: POST /transactions/assigned-receipts/get

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
confirmed_onlyNoIf true, only confirmed assignments will be returned. If specified, the field will be validated.
transaction_id_by_customerYesThe id_by_customer of the transaction.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reiterates read-only and non-destructive behavior, which is already provided via annotations (readOnlyHint, destructiveHint). It adds minimal behavioral context beyond stating the endpoint method (POST) and confirming it fetches data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: one line with a visual indicator, a bold statement of purpose, a brief sentence, and a usage hint. Every sentence serves a purpose with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, full schema coverage, and comprehensive annotations, the description is complete. It covers the main input, a prerequisite, and read-only nature. It could optionally describe the output (list of receipts) but is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all parameters. The description mentions 'transaction_id_by_customer' but does not add extra meaning beyond the schema's field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'get all receipts assigned to a specific transaction', specifying the verb 'get' and resource 'receipts assigned to a transaction'. It distinguishes from sibling tools like 'transactions_assign_receipt' and 'receipts_get'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells when to use this tool: after obtaining the transaction's id_by_customer via '/transactions/get method'. It provides a prerequisite but does not explicitly exclude use cases or mention alternatives for similar lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transactions_assign_receiptTransactions: assign receipt to transactionB

🟡 WRITE · links/unlinks records — Creates or removes an assignment between records (e.g. receipt ↔ transaction). Reversible. assign receipt to transaction Assign a receipt to a transaction.

Endpoint: POST /transactions/assign/receipt

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
receipt_id_by_customerYesThe id_by_customer of the receipt.
transaction_id_by_customerYesThe id_by_customer of the transaction.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds value by marking the action as WRITE, describing it as 'links/unlinks records,' and noting it is reversible. However, it does not elaborate on required permissions or side effects beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise, with key information front-loaded in the first line. However, it contains slight redundancy (e.g., repeating 'assign receipt to transaction' in two forms) and could be tightened without loss of clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two required parameters and no output schema, the description covers the basic behavior and endpoint. Lacking guidance on usage context and sibling differentiation, it is adequate but not fully complete for an agent to confidently select it over alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the input schema already describes all parameters adequately. The description does not add any additional meaning or usage hints for the parameters, so it provides no extra value beyond the schema's descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates or removes an assignment between a receipt and transaction, using specific verbs (links/unlinks, assign). However, it lacks explicit differentiation from sibling tools like transactions_assign_batch_receipt and transactions_unassign_receipt, which could cause confusion about whether this tool handles both actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool over alternatives such as transactions_unassign_receipt or transactions_assign_batch_receipt. The description implies it can both assign and unassign, but the existence of a dedicated unassign sibling suggests this is inaccurate, leaving the agent without clear usage rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transactions_getTransactions: get transactionsA
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get transactions Get transactions for a specified customer account. The response includes the number of returned rows and an array of transaction datas.

Endpoint: POST /transactions/get

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoA limit of returned data. If no limit is given, the default will be 500. Also the maximum limit is 500. If specified, the field will be validated.
offsetNoThe offset for paging returned data. If no offset is given, the default will be 0. If specified, the field will be validated.
accountNoThe account number of the account the transaction is stored to. If specified, the field will be validated.
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
date_toNoThe transaction's booking date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). All transaction with booking date including and before given value will be returned. An empty string is not considered a valid date.
to_fromNoThe payer/payee of the transaction. If specified, the field will be validated.
date_fromNoThe transaction's booking date in format 'YYYY-MM-DD' (e.g. '2017-04-26'). All transactions with booking date including and after given value will be returned. An empty string is not considered a valid date.
id_by_customer_toNoThe id_by_customer as an integer. All transactions to given value will be returned. The transaction with the given value will NOT be returned! NOTE: By specifying this, the sort changes to id_by_customer ASC, even if you use this in combination with date params. If specified, the field will be validated.
id_by_customer_fromNoThe id_by_customer as an integer. All transactions after given value will be returned. The transaction with the given value will NOT be returned! NOTE: By specifying this, the sort changes to id_by_customer ASC, even if you use this in combination with date params. If specified, the field will be validated.
date_since_last_modifiedNoA date and time in format 'YYYY-MM-DD HH:MM:SS' (e.g. '2017-04-26 13:45:00'). If only 'YYYY-MM-DD' is specified, the time defaults to '23:59:59'. All transactions whose date_updated value is later than the specified value will be returned. If specified, the field will be validated. An empty string is not considered a valid date.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The read-only behavior is already provided by annotations, but the description adds useful behavioral context beyond the schema: the response includes the number of returned rows and an array of transaction data. It also explicitly states the HTTP endpoint. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded with the read-only signal, and uses bold headers effectively. Minor redundancy exists: the 'READ-ONLY' line repeats annotation information and '**get transactions**' duplicates the tool name, but overall the content is compact and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema, optional parameters, and no output schema, the description provides a reasonable but not exhaustive overview. It covers the core purpose and response shape, but does not help an agent choose between the many transaction-related sibling tools or understand the behavioral quirks documented in parameters like id_by_customer_to/from.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline holds. The description only highlights 'a specified customer account,' which adds little beyond the schema's own account parameter description. It does not explain filtering combinations or pagination behavior beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Get transactions for a specified customer account.' It also emphasizes read-only behavior. However, it does not explicitly differentiate itself from sibling tools like transactions_get_id_by_customer or transactions_assigned_receipts_get, so it is clear but not fully distinguished.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you need to fetch transaction data for an account. But it provides no explicit alternatives or exclusions, and given many transaction-related sibling tools exist, the routing guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transactions_get_id_by_customerTransactions: get transaction by id_by_customerA
Read-onlyIdempotent

🟱 READ-ONLY — Fetches data. Makes no changes to the accounting records. get transaction by id_by_customer Get a single transaction for a specified customer account by id_by_customer. You can get the "id_by_customer" by using the "/transactions/get method" first. The response includes an array of transaction data.

Endpoint: POST /transactions/get/id_by_customer

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reinforces the READ-ONLY nature already declared in annotations, stating '🟱 READ-ONLY — Fetches data. Makes no changes.' No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately concise, but includes some redundancy (e.g., repeating the tool title in bold). It front-loads the READ-ONLY indicator and effectively uses two short paragraphs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with one optional parameter and no output schema, the description adequately explains the return: 'The response includes an array of transaction data.' However, it could clarify what 'id_by_customer' represents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single parameter 'api_key' already well-described in the schema. The description adds no additional parameter insight beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get a single transaction for a specified customer account by id_by_customer.' It distinguishes from the sibling 'transactions_get' which retrieves all transactions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises obtaining the 'id_by_customer' via another endpoint first: 'You can get the "id_by_customer" by using the "/transactions/get method".' This provides a prerequisite, though it doesn't explicitly cover when not to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transactions_unassign_receiptTransactions: unassign a specific receipt from a transactionB

🟡 WRITE · links/unlinks records — Creates or removes an assignment between records (e.g. receipt ↔ transaction). Reversible. unassign a specific receipt from a transaction Unassign a specific receipt from a transaction.

Endpoint: POST /transactions/unassign/receipt

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional. The BB customer api_key to act on. Defaults to the BB_API_KEY configured on the server — only set this to target a different customer.
receipt_id_by_customerYesThe id_by_customer of the receipt to unassign.
transaction_id_by_customerYesThe id_by_customer of the transaction.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate mutability (readOnlyHint=false) and non-destructiveness. The description adds 'Reversible', which is useful context, but does not elaborate on side effects or required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is verbose and redundant (repeats 'unassign a specific receipt from a transaction' twice). The character emoji and generic 'links/unlinks' intro add unnecessary length without clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple unassignment action, the description covers the core behavior. However, without an output schema, it fails to mention return values or confirmation of success, leaving a gap in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents parameters. The description adds no additional meaning beyond what is in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'unassign a specific receipt from a transaction', using a specific verb and resource. The title reinforces this. It is easily distinguished from sibling tools like transactions_assign_receipt.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives (e.g., transactions_assign_batch_receipt). No prerequisites or conditions for unassignment are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 14 tool updatesv1.0.2
    • Changedinvoices_create1 field changed
      • addedInput schema / properties / language
        Added value: +{
        +  "description": "The language for translatable invoice labels (e.g. headings, table headers, payment terms). Can be either 'de_DE' (\"Deutsch\", default) or 'en_US' (\"English\").\n\nIf omitted, German is used.",
        +  "type": "string"
        +}
    • Changedinvoices_create_draft1 field changed
      • addedInput schema / properties / language
        Added value: +{
        +  "description": "The language for translatable invoice labels (e.g. headings, table headers, payment terms). Can be either 'de_DE' (\"Deutsch\", default) or 'en_US' (\"English\").\n\nIf omitted, German is used.",
        +  "type": "string"
        +}
    • Changedinvoices_create_e_invoice1 field changed
      • addedInput schema / properties / language
        Added value: +{
        +  "description": "The language for translatable invoice labels (e.g. headings, table headers, payment terms). Can be either 'de_DE' (\"Deutsch\", default) or 'en_US' (\"English\").\n\nIf omitted, German is used.",
        +  "type": "string"
        +}
    • Changedpostings_add_free1 field changed
      • changedInput schema / properties / vat / description
        Previous value: -"The vat rate of the posting.\n\nPossible vats:\n- 0_none ('keine Ust.')\n- 19_vat ('19% Ust.')\n- 7_vat ('7% Ust.')\n- 19_pre ('19% Vst.')\n- 7_pre ('7% Vst.')\n- 19_both_1 ('§13b 19% USt./VSt.')\n- 19_both_2 ('I.g.E. 19% USt./VSt.')\n- 7_both ('I.g.E. 7% USt./VSt.')\n- 19_both_1_no_pre ('§13b 19/16% USt.')\n- 19_both_2_no_pre ('i.g.E. 19/16% USt.')\n- 7_both_no_pre ('i.g.E. 7/5% USt.')\n- 19_pre_app ('19/16% Aufz. VSt.')\n- 7_pre_app ('7/5% Aufz. VSt.')\n- 19_both_app_1 ('§13b 19/16% USt./Aufz. VSt.')\n- 19_both_app_2 ('i.g.E. 19/16% USt./Aufz. VSt.')\n- 7_both_app ('i.g.E. 7/5% USt./Aufz. VSt.')"New value: +"The vat rate of the posting.\n\nPossible vats:\n- 0_none ('keine Ust.')\n- 19_vat ('19% Ust.')\n- 7_vat ('7% Ust.')\n- 19_pre ('19% Vst.')\n- 7_pre ('7% Vst.')\n- 19_both_1 ('§13b 19% USt./VSt.')\n- 19_both_506 ('§13b 19% USt./VSt. (EU §13b Abs. 1)')\n- 19_both_6506 ('§13b 19% USt. (EU §13b Abs. 1, ohne VSt.)')\n- 19_both_511 ('§13b 19% USt./VSt. (Drittland §13b Abs. 2 Nr. 1)')\n- 19_both_6511 ('§13b 19% USt. (Drittland §13b Abs. 2 Nr. 1, ohne VSt.)')\n- 19_both_6501 ('§13b 19/16% USt. (ohne VSt.)')\n- 19_both_2 ('I.g.E. 19% USt./VSt.')\n- 7_both ('I.g.E. 7% USt./VSt.')\n- 19_both_1_no_pre ('§13b 19/16% USt.')\n- 19_both_2_no_pre ('i.g.E. 19/16% USt.')\n- 7_both_no_pre ('i.g.E. 7/5% USt.')\n- 19_pre_app ('19/16% Aufz. VSt.')\n- 7_pre_app ('7/5% Aufz. VSt.')\n- 19_both_app_1 ('§13b 19/16% USt./Aufz. VSt.')\n- 19_both_app_506 ('§13b 19/16% USt./Aufz. VSt. (EU §13b Abs. 1)')\n- 19_both_app_511 ('§13b 19/16% USt./Aufz. VSt. (Drittland §13b Abs. 2 Nr. 1)')\n- 19_both_app_2 ('i.g.E. 19/16% USt./Aufz. VSt.')\n- 7_both_app ('i.g.E. 7/5% USt./Aufz. VSt.')"
    • Changedpostings_add_receipt1 field changed
      • changedInput schema / properties / vats / description
        Previous value: -"An array of vats.\n\nUsage:\n\"vats\" : ['vat of posting 1', 'vat of posting 2'].\n\nPossible vats:\n- 0_none ('keine Ust.')\n- 19_vat ('19% Ust.')\n- 7_vat ('7% Ust.')\n- 19_pre ('19% Vst.')\n- 7_pre ('7% Vst.')\n- 19_both_1 ('§13b 19% USt./VSt.')\n- 19_both_2 ('I.g.E. 19% USt./VSt.')\n- 7_both ('I.g.E. 7% USt./VSt.')\n- 19_both_1_no_pre ('§13b 19/16% USt.')\n- 19_both_2_no_pre ('i.g.E. 19/16% USt.')\n- 7_both_no_pre ('i.g.E. 7/5% USt.')\n- 19_pre_app ('19/16% Aufz. VSt.')\n- 7_pre_app ('7/5% Aufz. VSt.')\n- 19_both_app_1 ('§13b 19/16% USt./Aufz. VSt.')\n- 19_both_app_2 ('i.g.E. 19/16% USt./Aufz. VSt.')\n- 7_both_app ('i.g.E. 7/5% USt./Aufz. VSt.')"New value: +"An array of vats.\n\nUsage:\n\"vats\" : ['vat of posting 1', 'vat of posting 2'].\n\nPossible vats:\n- 0_none ('keine Ust.')\n- 19_vat ('19% Ust.')\n- 7_vat ('7% Ust.')\n- 19_pre ('19% Vst.')\n- 7_pre ('7% Vst.')\n- 19_both_1 ('§13b 19% USt./VSt.')\n- 19_both_506 ('§13b 19% USt./VSt. (EU §13b Abs. 1)')\n- 19_both_6506 ('§13b 19% USt. (EU §13b Abs. 1, ohne VSt.)')\n- 19_both_511 ('§13b 19% USt./VSt. (Drittland §13b Abs. 2 Nr. 1)')\n- 19_both_6511 ('§13b 19% USt. (Drittland §13b Abs. 2 Nr. 1, ohne VSt.)')\n- 19_both_6501 ('§13b 19/16% USt. (ohne VSt.)')\n- 19_both_2 ('I.g.E. 19% USt./VSt.')\n- 7_both ('I.g.E. 7% USt./VSt.')\n- 19_both_1_no_pre ('§13b 19/16% USt.')\n- 19_both_2_no_pre ('i.g.E. 19/16% USt.')\n- 7_both_no_pre ('i.g.E. 7/5% USt.')\n- 19_pre_app ('19/16% Aufz. VSt.')\n- 7_pre_app ('7/5% Aufz. VSt.')\n- 19_both_app_1 ('§13b 19/16% USt./Aufz. VSt.')\n- 19_both_app_506 ('§13b 19/16% USt./Aufz. VSt. (EU §13b Abs. 1)')\n- 19_both_app_511 ('§13b 19/16% USt./Aufz. VSt. (Drittland §13b Abs. 2 Nr. 1)')\n- 19_both_app_2 ('i.g.E. 19/16% USt./Aufz. VSt.')\n- 7_both_app ('i.g.E. 7/5% USt./Aufz. VSt.')"
    • Changedpostings_add_transaction1 field changed
      • changedInput schema / properties / vats / description
        Previous value: -"An array of vats.\n\nUsage:\n\"vats\" : ['vat of posting 1', 'vat of posting 2'].\n\nPossible vats:\n- 0_none ('keine Ust.')\n- 19_vat ('19% Ust.')\n- 7_vat ('7% Ust.')\n- 19_pre ('19% Vst.')\n- 7_pre ('7% Vst.')\n- 19_both_1 ('§13b 19% USt./VSt.')\n- 19_both_2 ('I.g.E. 19% USt./VSt.')\n- 7_both ('I.g.E. 7% USt./VSt.')\n- 19_both_1_no_pre ('§13b 19/16% USt.')\n- 19_both_2_no_pre ('i.g.E. 19/16% USt.')\n- 7_both_no_pre ('i.g.E. 7/5% USt.')\n- 19_pre_app ('19/16% Aufz. VSt.')\n- 7_pre_app ('7/5% Aufz. VSt.')\n- 19_both_app_1 ('§13b 19/16% USt./Aufz. VSt.')\n- 19_both_app_2 ('i.g.E. 19/16% USt./Aufz. VSt.')\n- 7_both_app ('i.g.E. 7/5% USt./Aufz. VSt.')"New value: +"An array of vats.\n\nUsage:\n\"vats\" : ['vat of posting 1', 'vat of posting 2'].\n\nPossible vats:\n- 0_none ('keine Ust.')\n- 19_vat ('19% Ust.')\n- 7_vat ('7% Ust.')\n- 19_pre ('19% Vst.')\n- 7_pre ('7% Vst.')\n- 19_both_1 ('§13b 19% USt./VSt.')\n- 19_both_506 ('§13b 19% USt./VSt. (EU §13b Abs. 1)')\n- 19_both_6506 ('§13b 19% USt. (EU §13b Abs. 1, ohne VSt.)')\n- 19_both_511 ('§13b 19% USt./VSt. (Drittland §13b Abs. 2 Nr. 1)')\n- 19_both_6511 ('§13b 19% USt. (Drittland §13b Abs. 2 Nr. 1, ohne VSt.)')\n- 19_both_6501 ('§13b 19/16% USt. (ohne VSt.)')\n- 19_both_2 ('I.g.E. 19% USt./VSt.')\n- 7_both ('I.g.E. 7% USt./VSt.')\n- 19_both_1_no_pre ('§13b 19/16% USt.')\n- 19_both_2_no_pre ('i.g.E. 19/16% USt.')\n- 7_both_no_pre ('i.g.E. 7/5% USt.')\n- 19_pre_app ('19/16% Aufz. VSt.')\n- 7_pre_app ('7/5% Aufz. VSt.')\n- 19_both_app_1 ('§13b 19/16% USt./Aufz. VSt.')\n- 19_both_app_506 ('§13b 19/16% USt./Aufz. VSt. (EU §13b Abs. 1)')\n- 19_both_app_511 ('§13b 19/16% USt./Aufz. VSt. (Drittland §13b Abs. 2 Nr. 1)')\n- 19_both_app_2 ('i.g.E. 19/16% USt./Aufz. VSt.')\n- 7_both_app ('i.g.E. 7/5% USt./Aufz. VSt.')"
    • Addedpostings_cancel
    • Changedreceipts_get1 field changed
      • addedInput schema / properties / date_since_last_modified
        Added value: +{
        +  "description": "A date and time in format 'YYYY-MM-DD HH:MM:SS' (e.g. '2017-04-26 13:45:00'). If only 'YYYY-MM-DD' is specified, the time defaults to '23:59:59'. All receipts whose date_updated value is later than the specified value will be returned.\n\nIf specified, the field will be validated. An empty string is not considered a valid date.",
        +  "type": "string"
        +}
    • Addedreports_create_bwa
    • Addedreports_create_sums
    • Addedreports_get_bwa
    • Addedreports_get_sums
    • Addedreports_get_sums_ledger
    • Changedtransactions_get1 field changed
      • addedInput schema / properties / date_since_last_modified
        Added value: +{
        +  "description": "A date and time in format 'YYYY-MM-DD HH:MM:SS' (e.g. '2017-04-26 13:45:00'). If only 'YYYY-MM-DD' is specified, the time defaults to '23:59:59'. All transactions whose date_updated value is later than the specified value will be returned.\n\nIf specified, the field will be validated. An empty string is not considered a valid date.",
        +  "type": "string"
        +}
  2. 48 tool updatesv1.0.0
    • First observedaccounts_add
    • First observedaccounts_get
    • First observedcomments_add
    • First observedcost_locations_add
    • First observedcost_locations_delete
    • First observedcost_locations_get
    • First observedcost_locations_update
    • First observedinvoices_create
    • First observedinvoices_create_draft
    • First observedinvoices_create_e_invoice
    • First observedpostings_add_batch_free
    • First observedpostings_add_batch_receipts
    • First observedpostings_add_batch_transactions
    • First observedpostings_add_free
    • First observedpostings_add_receipt
    • First observedpostings_add_transaction
    • First observedpostings_assign_receipt_to_free_posting
    • First observedpostings_get
    • First observedpostings_unconfirm_free
    • First observedpostings_unconfirm_receipt
    • First observedpostings_unconfirm_transaction
    • First observedreceipts_add
    • First observedreceipts_addBatch
    • First observedreceipts_assigned_transactions_get
    • First observedreceipts_delete_id_by_customer
    • First observedreceipts_get
    • First observedreceipts_get_id_by_customer
    • First observedreceipts_restore_id_by_customer
    • First observedreceipts_upload
    • First observedsettings_add_batch_creditors
    • First observedsettings_add_batch_debtors
    • First observedsettings_add_creditor
    • First observedsettings_add_debtor
    • First observedsettings_add_postingaccount
    • First observedsettings_get_creditors
    • First observedsettings_get_debtors
    • First observedsettings_get_postingaccounts
    • First observedsettings_update_creditor
    • First observedsettings_update_debtor
    • First observedsettings_update_postingaccount
    • First observedtransactions_add
    • First observedtransactions_addBatch
    • First observedtransactions_assign_batch_receipt
    • First observedtransactions_assign_receipt
    • First observedtransactions_assigned_receipts_get
    • First observedtransactions_get
    • First observedtransactions_get_id_by_customer
    • First observedtransactions_unassign_receipt

TDQS

B3.1/5.0
Disambiguation4/5

Most tools have distinct purposes, but some overlap exists, e.g., between receipts_upload and receipts_add (both add receipts) and between multiple posting add tools. However, descriptions clarify differences, so confusion is minimal.

Naming Consistency3/5

Naming is mostly verb_noun with underscores, but there are inconsistencies like 'add' vs 'create' (e.g., transactions_add vs invoices_create) and 'batch' naming (transactions_addBatch vs settings_add_batch_creditors). Plural/singular also varies.

Tool Count2/5

With 48 tools, the server is overloaded. While the accounting domain has many entities, this count is higher than typical MCP servers and may overwhelm agents. Some tools could be merged (e.g., batch and single variants).

Completeness3/5

The tool set covers many CRUD operations for most entities, but notable gaps exist: no update or delete for transactions, no update for receipts, no delete for postings, accounts, or settings. This may force agent workarounds.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

  • Malaysian SME accounting, e-Invoice and payroll for your AI. 61 tools; writes are approved drafts.

  • QuickBooks Online in Claude and ChatGPT: 211 tools, full ledger, multi-company, Canada + US, FR/EN.

    1
  • Log, query, and edit expenses, budgets, and accounts in Manilo (formerly Ledgy) from any MCP-compatible AI assistant.

  • Taokeh is accounting software for Malaysian SMEs — double-entry books, LHDN e-Invoice (MyInvois), SST, and full statutory payroll — and this connector opens a company's live books to the AI its owner already uses. 59 tools. The reads answer real questions from the ledger: P&L and balance sheet with server-computed comparisons, cash position, A/R and A/P aging, per-channel marketplace sales, an 8-week cash-flow forecast, tax position, document search with e-Invoice standing, and a one-call daily brief. The writes are drafts only — expenses, invoices, bills, quotes, purchase orders, receipts, credit and debit notes, adjusting journals, bank-statement imports and bank-row suggestions — every figure re-checked by the server, every draft waiting for a human tap in Taokeh. The AI can also work the Shoebox: staff snap paper on free phone logins, and the connector lists the pile, reads each photo, and files the draft with the original attached — the server maps its own stored copy, so the document trail stays byte-perfect. One connection is bound to one company at consent; no tool takes a company argument. Migrating from another system? The same connector stages the chart of accounts, opening balances, contacts, products, historical documents and workspace settings onto the owner's own review screens. Bring your own AI subscription — no per-call fees.

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to interact with QuickFile UK accounting software, providing access to invoicing, client management, purchases, banking, and financial reporting through 40+ tools covering the complete QuickFile API.
    4
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables LLMs to interact with Billforward's billing and subscription management API, providing tools for accounts, subscriptions, invoices, payments, and more with read-only safety by default.
    23
    65
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Integrates with the sevdesk German accounting API, providing 76 tools for full CRUD operations across contacts, invoices, vouchers, orders, credit notes, bank accounts, transactions, parts, tags, addresses, and communication ways.
    71
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides comprehensive AI-agnostic access to all Firefly III personal finance features via 66 tools, enabling natural language management of accounts, transactions, budgets, and more.
    13
    23
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ohneben/Buchhaltungsbutler-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server