Skip to main content
Glama
dennismenken

BuchhaltungsButler MCP-Server

by dennismenken

E-Rechnung erzeugen

bb_invoices_create_einvoice

Create a finalized, numbered e-invoice in BuchhaltungsButler as a PDF plus structured EN 16931 data, for public authorities and other recipients requiring e-invoices.

Instructions

Erzeugt in BuchhaltungsButler eine E-Rechnung: endgültig, nummeriert, mit PDF und strukturiertem Datensatz nach EN 16931. Zu nehmen für Empfänger, die eine E-Rechnung verlangen, etwa öffentliche Auftraggeber; bb_invoices_create erzeugt die gewöhnliche Rechnung, bb_invoices_create_draft einen Entwurf. Strengste Feldprüfung der API: Die Käuferreferenz e_invoice_id sowie street, zip, city, country und email des Empfängers sind Pflicht, und je Position stehen item_tax_type und item_tax_amount an der Stelle von item_vat. Die API kennt keinen Pfad, eine Rechnung zu lesen; nachsehen lässt sich das Ergebnis nur in der Weboberfläche. Schreibt in die echten Buchhaltungsdaten von BuchhaltungsButler. Die API bietet keinen Endpunkt, das rückgängig zu machen.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
zipYesPostleitzahl, zum Beispiel "28195".
cityYesOrt, zum Beispiel Bremen.
dateYesRechnungsdatum als YYYY-MM-DD, zum Beispiel 2026-04-26. Ein leerer String wird abgelehnt; das Feld stattdessen weglassen. Die Spezifikation nennt hier kein Format; YYYY-MM-DD gilt überall sonst in dieser API.
emailYesE-Mail-Adresse des Empfängers. Hier Pflicht, an bb_invoices_create nicht.
itemsYesDie Positionen der E-Rechnung, je Eintrag eine Zeile des Dokuments. item_amount ist die Menge und nicht der Betrag; der Preis einer Einheit steht in item_single_price. Die Steuer wird hier als Steuerart item_tax_type angegeben, nicht als item_vat. Die BuchhaltungsButler-API nimmt diese Werte als parallele Arrays entgegen (item_name, item_amount, item_unit, item_tax_type, item_tax_amount, item_single_price, item_description); dieses Werkzeug nimmt eine Positionsliste und rechnet sie um, wodurch die Arrays zwingend gleich lang sind.
streetYesStraße und Hausnummer, zum Beispiel Hauptstraße 12.
countryYesLand des Empfängers, deutscher Ländername oder ISO-Code, zum Beispiel DK.
due_daysNoTage bis zur Fälligkeit, Ziffernfolge, zum Beispiel 14. Ohne Angabe gilt 0, die Rechnung ist dann sofort fällig. Nur dieses Feld erzeugt ein Fälligkeitsdatum.
languageNoSprache der festen Beschriftungen: 'de_DE' oder 'en_US', ohne Angabe 'de_DE'. Positionstexte werden nicht übersetzt.
company_nameYesFirmenname des Empfängers, wie er auf dem Dokument erscheint.
e_invoice_idYesKäuferreferenz des Empfängers, in der Norm die Leitweg-Identifikationsnummer. Ohne eigene Referenz '0' senden; öffentliche Auftraggeber geben sie vor.
invoice_typeYesArt des Dokuments: 'invoice' Rechnung, 'credit' Gutschrift, 'offer' Angebot. Heißt in der API type, hier umbenannt: type ist dort siebenfach belegt.
discount_typeNoRabatt auf die gesamte Rechnung: 'percent' Prozent, 'EUR' Euro. Positionsrabatte kennt die API nicht; gemeinsam mit discount_value setzen.
invoicenumberNoRechnungsnummer. Ohne Angabe vergibt BuchhaltungsButler sie aus dem eigenen Nummernkreis.
show_bankdataNotrue zeigt die im Mandanten hinterlegte Bankverbindung auf dem Dokument. Die Bankdaten selbst stammen aus den Mandanteneinstellungen.
correspondenceNoAnschreiben an den Empfänger, erscheint vor den Positionen.
date_of_supplyNoLiefer- oder Leistungsdatum, freier Text oder YYYY-MM-DD. Nur im Format YYYY-MM-DD wird der Wert zusätzlich date_delivery des entstehenden Belegs. Ein Datum nach date verwirft BuchhaltungsButler wegen der DATEV-Regel stillschweigend.
discount_valueNoHöhe des Rabatts mit Dezimalpunkt, zum Beispiel 10 oder 49.50. Die Bedeutung entscheidet discount_type.
customer_numberNoKunden- oder Lieferantennummer des Mandanten.
final_provisionsNoSchlusstext des Dokuments, erscheint nach den Positionen.
show_contactdataNotrue zeigt die im Mandanten hinterlegten Kontaktdaten auf dem Dokument.
show_prices_typeYesPreisdarstellung: 'net' Nettopreise, 'gross' Bruttopreise. Danach werden die Werte in item_single_price gelesen.
payment_referenceNoZahlungsreferenz für die spätere Zuordnung zu einer Zahlung: Amazon-Bestellnummer oder Vorgangsnummer von PayPal oder Stripe.
payment_conditionsNoZahlungsbedingungen als Text auf dem Dokument. Erzeugt kein Fälligkeitsdatum, dafür ist due_days da.
recurring_intervalNoRhythmus eines Rechnungsplans: 'weekly', 'monthly', 'quarterly' oder 'yearly'. Es entsteht ein dauerhafter Plan, der selbsttätig weitere Rechnungen erzeugt und über die API weder lesbar noch zu beenden ist.
contact_person_nameNoName der Ansprechperson, zum Beispiel Maria Schmidt.
recurring_date_nextNoNächster Termin des Rechnungsplans als YYYY-MM-DD. Ein leerer String wird abgelehnt; das Feld stattdessen weglassen. Pflicht, sobald recurring_interval gesetzt ist.
additional_addresslineNoZusätzliche Adresszeile, zum Beispiel Gebäude B.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataNo
createdNo
messageNo
successYes
endpointNo
reversalNo
_contract_warningsNo
fields_not_returnedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag a non-idempotent, non-read-only write, but the description goes well beyond them: it warns this writes into real BuchhaltungsButler data, that there is no API endpoint to undo it, that there is no API path to read the resulting invoice back (only the web UI), and that the endpoint applies the strictest field validation in the API. This is exactly the operational caveat an agent needs before calling.

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?

Five dense sentences packed into one paragraph, front-loaded with the purpose and the sibling routing before the validation and irreversibility caveats. Slightly long, but each sentence carries distinct information (routing, required-field deltas, no-read path, irreversibility) rather than filler.

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 28-parameter, 11-required mutation tool this covers the gaps that matter: it duplicates none of the output schema but supplies the irreversibility, the missing read-back path, and the sibling selection rule. Nothing an agent needs in order to call it correctly is missing.

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 the baseline is 3, but the description adds real meaning: it calls out which fields become mandatory here (e_invoice_id plus street, zip, city, country, email) and that positions use item_tax_type/item_tax_amount in place of item_vat, an API renaming the schema does not explain. That goes beyond restating the required list.

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 ('Erzeugt ... eine E-Rechnung: endgültig, nummeriert, mit PDF und strukturiertem Datensatz nach EN 16931') and immediately names the two closest siblings (bb_invoices_create for the ordinary invoice, bb_invoices_create_draft for a draft). An agent can distinguish this from every other invoice tool without opening a schema.

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

Usage Guidelines5/5

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

Explicit when-to-use ('Zu nehmen für Empfänger, die eine E-Rechnung verlangen, etwa öffentliche Auftraggeber') and explicit alternatives with the condition that selects each ('bb_invoices_create erzeugt die gewöhnliche Rechnung, bb_invoices_create_draft einen Entwurf'). Nothing is left to inference.

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