Skip to main content
Glama

finisma – ZUGFeRD e-invoices

Server Details

Create ZUGFeRD e-invoices from JSON or PDF, verify Factur-X, check VAT IDs and Peppol.

Ownership verified
Status
Healthy
Uptime
100.0% over 19 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A4/5.0

Scored across 9 tools

Disambiguation4/5

Most tools target clearly distinct actions and resources (create vs extract vs verify ZUGFeRD, parse vs validate bank statements, validate payment files). The only mild overlap is between check_peppol_participant and check_vat_id, which both validate a business partner identifier, though their descriptions make the boundary clear.

Naming Consistency4/5

All names use consistent snake_case with a verb_noun pattern (check_*, create_*, extract_*, parse_*, request_*, validate_*, verify_*). Minor deviation: the same invoice concept is named 'zugferd' in create/verify but 'invoice' in extract, and the near-synonyms validate/verify are used for different purposes.

Tool Count5/5

Nine tools is well-scoped for an e-invoicing and payment-file validation domain, with each tool earning its place across creation, extraction, verification, and validation workflows.

Completeness4/5

The surface covers the core lifecycle: create/extract/verify ZUGFeRD, validate payment files, and parse/validate bank statements, plus Peppol and VAT lookups. Minor gaps exist, such as no payment-file or bank-statement generation and no Peppol send/transmit operation, but these are workable given the validation-focused scope.

Available Tools

9 tools
check_peppol_participantPeppol-Erreichbarkeit prüfenA
Read-onlyIdempotent
Inspect

Prüft per SML/SMP-Lookup, ob ein Geschäftspartner im Peppol-Netz erreichbar ist, und listet seine registrierten Dokumenttypen. Akzeptiert eine volle Kennung ("0088:4399901550926"), eine nackte GLN, eine deutsche USt-IdNr. oder eine Leitweg-ID. registered:false ist ein normales Ergebnis, kein Fehler. Kostenlos.

ParametersJSON Schema
NameRequiredDescriptionDefault
participantYesKennung des Partners: volle Peppol-Kennung ("0088:4399901550926"), nackte GLN, deutsche USt-IdNr. ("DE123456789") oder Leitweg-ID ("991-33333TEST-33").

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNoName laut Peppol Directory, falls gelistet
inputYes
valueYes
cachedYes
schemeYes
checkedAtYesZeitpunkt der echten Prüfung (ISO 8601)
registeredYes
countryCodeNo
documentTypesYesregistrierte Dokumenttypen laut SMP (leer bei registered:false)
participantIdYesvolle Kennung inkl. Meta-Schema, z. B. "iso6523-actorid-upis::0088:4399901550926"

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and open-world, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: it names the underlying SML/SMP lookup mechanism, clarifies that registered:false is a normal result rather than an error (a real gotcha for retry logic), and notes the call is free.

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?

Three tightly-packed sentences with the purpose front-loaded, followed by accepted input forms and the key behavioral caveat. Every sentence earns its place with zero redundancy.

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?

An output schema exists, so return values need no explanation; the description still adds the important normal-result semantics around registered:false. For a single-parameter, read-only lookup, nothing an agent needs to invoke it correctly is 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 description coverage is 100%, so the participant parameter's accepted formats are already documented and the description largely mirrors them (full Peppol identifier, bare GLN, German VAT ID, Leitweg-ID). No additional semantics such as normalization or fallback behavior are added 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?

States a specific verb and resource: SML/SMP lookup to check whether a partner is reachable in the Peppol network, plus a secondary output (registered document types). This is clearly distinct from sibling check_vat_id, which validates a VAT number rather than network reachability.

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?

Usage is implied — you'd call this to verify a partner before sending a Peppol document — but the description never states when to use this versus the closely related check_vat_id sibling, nor any prerequisites or exclusions. The implied context is clear, but no explicit routing guidance is provided.

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

check_vat_idUSt-IdNr. prüfen (VIES)A
Read-onlyIdempotent
Inspect

Prüft eine USt-IdNr. live gegen VIES (EU-Bestätigungsverfahren): Gültigkeit plus Firmenname, sofern der Mitgliedsstaat ihn herausgibt. Antwort-Status ist valid, invalid oder unavailable (VIES nicht erreichbar — keine Aussage). Kostenlos.

ParametersJSON Schema
NameRequiredDescriptionDefault
vat_idYesDie zu prüfende USt-IdNr. mit Länderpräfix, z. B. "DE325821677" oder "ATU12345675". Leerzeichen, Punkte und Bindestriche werden toleriert.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNoFirmenname laut Mitgliedsstaat, oft nicht herausgegeben
vatIdYesnormalisierte Nummer, wie geprüft wurde
cachedYes
statusYes
checkedAtYesZeitpunkt der echten Prüfung (ISO 8601)
countryCodeYes

TDQS

A3.7/5.0
Behavior4/5

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

Die Beschreibung geht über die Annotationen hinaus: Sie erklärt das Antwortformat (valid, invalid, unavailable), die Live-Abfrage bei VIES und dass VIES nicht erreichbar sein kann. Das ist wertvolle Information, die nicht in den Annotationen steht. Allerdings fehlen Details zu Rate-Limits oder Fehlerbehandlung.

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?

Die Beschreibung ist kompakt und front-loaded: Kernaussage zuerst, dann Details zum Status und der Kosten. Es gibt keine überflüssigen Sätze.

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?

Für ein Tool mit einem Parameter, vollständiger Schema-Beschreibung und Output-Schema ist die Beschreibung ausreichend. Sie erklärt den Rückgabestatus und den externen Dienst. Es fehlt der Hinweis, dass die Prüfung live erfolgt und daher Latenz auftreten kann, aber das ist angesichts der Annotationen (idempotent, readOnly) und des Output-Schemas vertretbar.

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?

Der Parameter vat_id ist im Schema vollständig beschrieben (100% Abdeckung), sodass die Beschreibung keine zusätzlichen semantischen Informationen liefert. Sie wiederholt lediglich, dass eine USt-IdNr. geprüft wird.

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?

Der Beschreibung nennt klar das Verb und die Ressource ('Prüft eine USt-IdNr. live gegen VIES') und grenzt damit die Funktion von den Geschwistertools ab. Allerdings wird nicht explizit erwähnt, dass es sich um eine externe, kostenlose Prüfung handelt, was die Abgrenzung verbessern würde.

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?

Es wird impliziert, wann das Tool zu nutzen ist (Prüfung einer USt-IdNr.), aber es fehlen explizite Hinweise, wann es nicht zu verwenden ist oder welche Alternativen es gibt. Geschwistertools wie check_peppol_participant werden nicht erwähnt.

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

create_zugferdZUGFeRD-Rechnung erzeugenA
Idempotent
Inspect

Erzeugt eine ZUGFeRD-PDF aus strukturierten EN-16931-Daten (kein LLM). Mit visueller PDF (pdf_base64/upload_id) wird das XML in diese PDF eingebettet; ohne PDF wird die Rechnung aus den Daten gesetzt, optional mit Logo (logo_base64: PNG, JPEG oder SVG, max. 500 KB) und Sprache (lang: de oder en). Verletzen die Daten EN-16931-Geschäftsregeln, liefert der Remote-Kanal (Chat-Connector) strukturierte Issues statt einer Datei zurück — invoice korrigieren (siehe extract_invoice) und mit denselben Quelldaten (upload_id/pdf_base64) erneut aufrufen. Ohne aktives Abo kostenlos mit Konto (API-Key): die PDF trägt dann das finisma-Prüfsiegel als Wasserzeichen, standardmäßig bis zu 5 Rechnungen pro Tag; mit Abo ohne Wasserzeichen und ohne Tageslimit. Rabatte und Zuschläge je Position (lines[].allowanceCharges) dürfen als Prozentsatz ohne Betrag kommen: amount = round2(Menge × unitPriceNet × percent / 100); ebenso auf die ganze Rechnung (allowanceCharges): Grundbetrag ohne Angabe ist die Summe der lineNetAmount mit ratePercent. lineNetAmount, vatBreakdown und die Summen muss der Aufrufer mit diesen Beträgen rechnen. Für öffentliche Auftraggeber erzeugt invoice.profile='xrechnung' eine XRechnung 3.0 (nur als reines XML über die REST-API mit format=xml; Pflichten: Leitweg-ID in buyerReference, Verkäufer-Kontakt mit Telefon und E-Mail, payment, electronicAddress beider Parteien).

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoSprache der aus den Daten gesetzten Rechnung (Beschriftungen, Zahlen- und Datumsformat). Standard: de.
invoiceYesStrukturierte Rechnungsdaten nach EN 16931 (wird gegen Schema und Geschäftsregeln geprüft).
filenameNoDateiname der erzeugten Rechnung (Standard: invoice.pdf).
logo_mimeNoOptional; der Typ wird sonst aus dem Inhalt erkannt.
upload_idNoReferenz auf eine zuvor über request_upload_link hochgeladene Datei, anstelle von pdf_base64. Höchstens eines von beiden angeben.
pdf_base64NoOptional: die visuelle Rechnungs-PDF, Base64-kodiert (max. 25 MB). In sie wird das CII-XML eingebettet. Alternativ 'upload_id' angeben. Ohne beides wird die Rechnung aus den Daten gesetzt. Chat-Clients, die eine angehängte Datei nicht zuverlässig als Base64 übergeben können, rufen zuerst request_upload_link auf.
attachmentsNoOptionale Anhänge (z. B. Stundennachweise). Erlaubt: PDF, PNG, JPEG, CSV, XLSX, ODS, XML; je max. 10 MB.
logo_base64NoOptionales Logo für die aus den Daten gesetzte Rechnung (nur ohne PDF): PNG, JPEG oder SVG, Base64-kodiert oder als data:-URI, max. 500 KB. Steht rechts oben im Kopf. SVG nur ohne Skripte und ohne Verweise auf andere Dateien.

Output Schema

ParametersJSON Schema
NameRequiredDescription
bytesNoGröße der erzeugten PDF in Bytes.
issuesNoNur gesetzt, wenn die übergebenen Rechnungsdaten EN-16931-Geschäftsregeln verletzen: es wurde keine Datei erzeugt (Korrekturschleife, T20). Felder anhand der Issues korrigieren und create_zugferd mit denselben Quelldaten (upload_id/pdf_base64) und dem korrigierten invoice erneut aufrufen.
generatedNotrue, wenn die Rechnung ohne Eingabe-PDF aus den Daten gesetzt wurde.
expires_atNoISO-8601-Zeitpunkt, ab dem download_url verfällt (nur mit download_url gesetzt).
pdf_base64NoDie erzeugte ZUGFeRD-Rechnung (PDF/A-3 mit eingebettetem CII-XML). Gesetzt, wenn die Eingabe als 'pdf_base64' kam oder die Rechnung über WebMCP aus den Daten gesetzt wurde; sonst steht download_url im Ergebnis.
watermarkedNotrue, wenn die PDF aus dem kostenlosen Tageskontingent stammt und das finisma-Prüfsiegel als Wasserzeichen trägt (Aufruf ohne aktives Abo).
download_urlNoKurzlebiger Download-Link zur erzeugten PDF. Gesetzt, wenn die Eingabe als 'upload_id' kam (Chat-Client-Fallback) oder die Rechnung über den Remote-Kanal aus den Daten gesetzt wurde.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false): it discloses that rule violations return structured issues instead of a file, the free-tier watermark and 5-per-day cap versus the subscription tier, caller responsibility for computing lineNetAmount/vatBreakdown/totals, and the extra obligations for xrechnung. No contradiction with 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?

Front-loaded with purpose, then PDF embedding, error handling, billing tier, calculation formula and xrechnung profile — a sensible order. It is a single dense block with no formatting, which makes it harder to scan, but almost every sentence carries information an agent needs.

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 complex 8-parameter, deeply nested tool, the description covers generation paths, validation-failure behavior, licensing limits and the public-sector profile variant. With an output schema present it need not describe return values, and nothing an agent needs to invoke 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 genuine semantics the schema does not: the rounding formula for percentage allowances (round2(quantity × unitPriceNet × percent / 100)) and the explicit warning that the caller must compute lineNetAmount, vatBreakdown and the totals themselves. It also reinforces the 500 KB / PNG-JPEG-SVG logo constraint.

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?

"Erzeugt eine ZUGFeRD-PDF aus strukturierten EN-16931-Daten (kein LLM)" gives a specific verb, resource, input format and a hard constraint in one clause. It is immediately distinguishable from verify_zugferd (checks) and extract_invoice (reads data out of invoices).

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?

It states the three mutually exclusive paths (pdf_base64 vs upload_id vs no PDF, documented as "Höchstens eines von beiden") and when each applies. It also names the recovery branch explicitly: on business-rule violations, correct the invoice (referencing extract_invoice) and re-call with the same source data.

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

extract_invoiceRechnungsdaten aus PDF auslesenAInspect

Extrahiert EN-16931-Rechnungsdaten aus einer hochgeladenen PDF (Formularfelder) plus Validierungs-Issues, als Korrekturschritt vor create_zugferd: Felder und Issues dem Nutzer zeigen, korrigieren lassen, danach create_zugferd mit dem korrigierten invoice und derselben upload_id aufrufen. Unsichere Felder stehen als Platzhalter 'KORRIGIEREN' (Text) bzw. '1900-01-01' (Datum) drin und werden als Issue mit Code EXTRACTION_UNCERTAIN gemeldet — diese Felder müssen vor create_zugferd korrigiert werden. Enthält die PDF bereits eine eingebettete E-Rechnung (ZUGFeRD/Factur-X), kommen die Felder deterministisch aus der XML (source='xml') statt aus einer Sprachmodell-Lesung des Druckbilds. Erfordert ein Konto mit aktivem Abo oder Guthaben.

ParametersJSON Schema
NameRequiredDescriptionDefault
upload_idNoReferenz auf eine zuvor über request_upload_link hochgeladene Datei, anstelle von pdf_base64. Genau eines von beiden angeben. Wird im Ergebnis erneut zurückgegeben und kann anschließend bei create_zugferd als 'upload_id' verwendet werden, damit dieselbe Quell-PDF eingebettet wird.
pdf_base64NoDie zu extrahierende PDF-Rechnung, Base64-kodiert (max. 25 MB). Alternativ 'upload_id' angeben. Chat-Clients, die eine angehängte Datei nicht zuverlässig als Base64 übergeben können, rufen zuerst request_upload_link auf.

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceYesHerkunft der Felder: 'xml' = deterministisch aus der in der PDF eingebetteten E-Rechnung übernommen, 'llm' = per Sprachmodell aus dem Druckbild extrahiert.
invoiceYesExtrahierte EN-16931-Rechnungsdaten (Formularfelder). Vor create_zugferd prüfen und korrigieren, insbesondere Felder mit dem Wert 'KORRIGIEREN' bzw. '1900-01-01'.
upload_idYesBei create_zugferd als 'upload_id' übergeben, damit dieselbe Quell-PDF eingebettet wird.
expires_atYesISO-8601-Zeitpunkt, ab dem upload_id verfällt. Danach erneut request_upload_link und extract_invoice aufrufen.
validation_issuesYesOffene Probleme der extrahierten Daten. severity='error' blockiert create_zugferd (dort wird dieselbe Prüfung erneut ausgeführt), 'warning' nicht.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true). The description adds genuinely useful behavior: uncertain fields appear as 'KORRIGIEREN' / '1900-01-01' placeholders flagged with code EXTRACTION_UNCERTAIN and must be fixed before create_zugferd, source='xml' vs. model reading of the rendered page, and the subscription/credit requirement. It does not mention rate limits or result payload size, but the disclosure is well 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?

Purpose and pipeline role are front-loaded in the first sentence, and the remaining sentences each carry distinct constraints (placeholders, XML branch, account requirement). It is dense and somewhat run-on as a single block, but nothing is redundant padding.

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?

With an output schema present, return values need no explanation, and the description still covers what an agent needs: prerequisites (upload_id or pdf_base64), the correction workflow, sentinel values to fix, the deterministic XML path, and the billing prerequisite. Nothing material is 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 description coverage is 100%, so the schema already documents both upload_id and pdf_base64, including the mutual-exclusivity rule and base64 size limit. The description reiterates the upload_id reuse for embedding the same source PDF in create_zugferd, which is workflow context rather than new parameter semantics. 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?

States a specific verb and resource — extracting EN-16931 invoice data (fields plus validation issues) from an uploaded PDF — and names its role in the pipeline relative to create_zugferd. An agent can distinguish it from verify_zugferd, parse_bank_statement, and other siblings without opening any 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?

Gives explicit ordering: run as a correction step before create_zugferd, show fields/issues to the user, correct them, then call create_zugferd with the corrected invoice and the same upload_id. It also covers the branch where the PDF already contains an embedded E-Rechnung, so the agent knows the XML path applies. No inference required.

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

parse_bank_statementKontoauszug auslesen (camt)A
Read-onlyIdempotent
Inspect

Liest Kontoauszüge, Kontoberichte und Avise (camt.052, camt.053, camt.054, Versionen .02 und .08) und Gebührenabrechnungen (camt.086, .01 bis .05) in strukturiertes JSON; auch mehrere Dateien als ZIP. 052/053/054: Konten, Salden und Buchungen (Buchungs- und Valutadatum, Betrag, Währung, Soll/Haben, je Transaktion Gegenpartei mit IBAN, Verwendungszweck, End-to-End-Referenz, Buchungscode BkTxCd mit GVC). 086: Abrechnungen mit Services und Summen je Währung. Kostenlos bis 5 Aufrufe pro Monat und Konto. Mit dem Zahlungsverkehr-Abo (Feature payments) ohne Limit. Ohne Abo kostet jeder weitere Aufruf 1 Credit. Ein Konto (API-Key oder OAuth) ist immer nötig.

ParametersJSON Schema
NameRequiredDescriptionDefault
xmlNoDie Datei als XML-Text (max. 10 MB). Alternativ 'file_base64'.
filenameNoOptionaler Dateiname, erscheint in den Meldungen.
file_base64NoDie Datei Base64-kodiert: eine XML-Datei oder ein ZIP mit mehreren XML-Dateien (max. 10 MB). Alternativ 'xml'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYes
billingYesWomit der Aufruf bezahlt wurde: free_quota (Freikontingent), subscription (Zahlungsverkehr-Abo), check_block (Prüfblock: 1 Credit für 10 Prüfungen) oder credit (Guthaben).
skippedYesDateien im ZIP-Archiv, die keine unterstützte camt-Datei sind.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantially more than the structured fields: rate limits and cost model, the mandatory account (API key or OAuth) requirement, and the 10 MB input ceiling. These are exactly the operational facts an agent needs before invoking and are not derivable from 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?

Front-loaded with the purpose and supported formats, then the per-format field breakdown, then the cost/auth rules. It is dense and the long field enumeration is somewhat list-like, but every sentence carries actionable information and nothing is padding.

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?

Covers formats, accepted input forms, size limit, quota/pricing, and authentication, which is complete for a read-only parsing tool. An output schema exists, so the extra field enumeration is redundant but harmless; nothing an agent needs 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.

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 only marginal parameter meaning — that a ZIP containing multiple XML files may be supplied (relevant to file_base64) and the 10 MB limit — which the schema already documents, so no credit above the baseline is earned.

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 (liest/parses) plus the exact resource family (camt.052/.053/.054/.086 fee statements) and the output (strukturiertes JSON). It implicitly distinguishes itself from the sibling validate_bank_statement by describing extraction into structured data including ZIP batches, so an agent can tell what this tool does versus validation.

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?

Clear operational context: which message versions are supported, batch-via-ZIP support, the free quota (5 calls/month/account), the payments subscription removing the limit, and the credit cost per extra call. However it never names the closest alternative (validate_bank_statement) nor states when to prefer one over the other, so the routing guidance is implied rather than explicit.

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

validate_bank_statementKontoauszug prüfen (camt)A
Read-onlyIdempotent
Inspect

Prüft Kontoauszüge, Kontoberichte und Avise (camt.052, camt.053, camt.054 in den Versionen .02 und .08) sowie Gebührenabrechnungen (camt.086, .01 bis .05); auch mehrere Dateien als ZIP. Liefert je Datei Nachricht, Version, die Befunde der Prüfregeln (Salden, Summen, IBAN-Prüfziffern, Reihenfolge), das Ergebnis der Schemaprüfung (mit Zeile und Spalte) und ein Gesamturteil. Kostenlos bis 5 Aufrufe pro Tag und Konto. Mit dem Zahlungsverkehr-Abo (Feature payments) ohne Limit. Ohne Abo kauft 1 Credit einen Prüfblock mit 10 weiteren Prüfungen (für Zahlungsdateien und Kontoauszüge gemeinsam, ohne Ablaufdatum). Ein Konto (API-Key oder OAuth) ist immer nötig.

ParametersJSON Schema
NameRequiredDescriptionDefault
xmlNoDie Datei als XML-Text (max. 10 MB). Alternativ 'file_base64'.
filenameNoOptionaler Dateiname, erscheint in den Meldungen.
file_base64NoDie Datei Base64-kodiert: eine XML-Datei oder ein ZIP mit mehreren XML-Dateien (max. 10 MB). Alternativ 'xml'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYes
billingYesWomit der Aufruf bezahlt wurde: free_quota (Freikontingent), subscription (Zahlungsverkehr-Abo), check_block (Prüfblock: 1 Credit für 10 Prüfungen) oder credit (Guthaben).
skippedYesDateien im ZIP-Archiv, die keine unterstützte camt-Datei sind.
verdictYes
schemaCheckedNofalse, wenn die Schemaprüfung für mindestens eine Datei nicht verfügbar war.
deliveryFindingsYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description goes further by disclosing rate limits/credit consumption and the auth requirement (an account is always needed), plus what each run returns (per-file message, version, rule findings, schema check with line/column, overall verdict), which is context the annotations do not carry.

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 purpose and supported formats are front-loaded, and the semicolon-separated clauses each carry distinct information (formats, output, pricing, auth). It is dense and somewhat long, but little of it is 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?

With an output schema present and full parameter coverage, the definition needs only to cover scope, cost and prerequisites, all of which it does. The only gap is the lack of explicit routing against the sibling validate/parse tools.

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 xml, filename and file_base64 are fully documented in the schema. The description only adds that multiple files may be supplied as a ZIP, which matches the base64 field's own text; baseline 3 applies when the schema does the heavy lifting.

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?

Names a specific verb ("Prüft") plus the exact resources validated (Kontoauszüge, Kontoberichte, Avise, Gebührenabrechnungen) and even pins the message types/versions (camt.052/.053/.054/.02/.08, camt.086). This clearly separates it from sibling parse_bank_statement, which reads rather than validates.

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 gives cost/limit context (free up to 5 calls/day, subscription removes the limit, 1 credit buys 10 checks) and that an account/API key is always required, which is useful operational guidance. However it never states when to choose this over parse_bank_statement or validate_payment_file, so the when/when-not routing is only implied.

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

validate_payment_fileZahlungsdatei prüfen (pain.001)A
Read-onlyIdempotent
Inspect

Prüft eine Zahlungsdatei pain.001 (SEPA-Überweisung oder Auslandszahlung AXZ, Versionen .09 und .03). Erkennt das Profil selbst, fasst den Zahllauf zusammen (Anzahl, Summe je Währung), liefert die Befunde der fachlichen Prüfregeln (Code, Schwere, Meldung, Pfad), das Ergebnis der Schemaprüfung (mit Zeile und Spalte) und ein Gesamturteil. Kostenlos bis 5 Aufrufe pro Tag und Konto. Mit dem Zahlungsverkehr-Abo (Feature payments) ohne Limit. Ohne Abo kauft 1 Credit einen Prüfblock mit 10 weiteren Prüfungen (für Zahlungsdateien und Kontoauszüge gemeinsam, ohne Ablaufdatum). Ein Konto (API-Key oder OAuth) ist immer nötig.

ParametersJSON Schema
NameRequiredDescriptionDefault
xmlNoDie Datei als XML-Text (max. 10 MB). Alternativ 'file_base64'.
profileNoProfil der Prüfung: auto (Erkennung aus der Datei), sct (SEPA-Überweisung) oder axz (Auslandszahlung).auto
filenameNoOptionaler Dateiname, erscheint in den Meldungen.
file_base64NoDie XML-Datei Base64-kodiert (max. 10 MB). Alternativ 'xml'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
xsdYesSchemaprüfung über den Validierungsdienst. available=false heißt: nicht verfügbar, das Urteil beruht dann nur auf den Prüfregeln.
billingYesWomit der Aufruf bezahlt wurde: free_quota (Freikontingent), subscription (Zahlungsverkehr-Abo), check_block (Prüfblock: 1 Credit für 10 Prüfungen) oder credit (Guthaben).
messageYes
profileYes
summaryYes
verdictYes
versionYes
findingsYes
profileSourceNo
schemaCheckedNo
profileReasonsNo

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses rate limits (5 free calls/day), the subscription model (feature payments unlimited), the credit-based fallback (1 credit = 10 further validations), and the mandatory account requirement. This is rich behavioral context an agent cannot get from annotations alone.

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?

Purpose is front-loaded and the output summary is efficient, but the pricing/subscription explanation spans three sentences and is comparatively verbose for a definition where the schema and annotations already carry much of the load.

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?

With an output schema present, annotations covering the safety profile, and 100% parameter coverage, the description fills the remaining gap (cost/limit/auth) and leaves nothing an agent needs to call it correctly.

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 both input alternatives (xml vs file_base64), the profile enum, and filename are fully documented in the schema. The description adds no parameter detail beyond what the schema already provides; baseline 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 (prüft/validates) and resource (Zahlungsdatei pain.001) with scope qualifiers (SEPA-Überweisung, Auslandszahlung AXZ, versions .09/.03). An agent can distinguish it from validate_bank_statement without opening either schema.

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 the pain.001 scope and the credit note covering 'payment files and bank statements together', but it never names an alternative tool or states when NOT to use this one. Usage 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.

verify_zugferdE-Rechnung prüfenA
Read-onlyIdempotent
Inspect

Prüft eine ZUGFeRD-/Factur-X-PDF: Struktur, EN-16931-Regeln, PDF/A-3-Anhänge.

ParametersJSON Schema
NameRequiredDescriptionDefault
upload_idNoReferenz auf eine zuvor über request_upload_link hochgeladene Datei, anstelle von pdf_base64. Genau eines von beiden angeben.
pdf_base64NoDie zu prüfende PDF-Datei, Base64-kodiert (max. 25 MB). Alternativ 'upload_id' angeben. Chat-Clients, die eine angehängte Datei nicht zuverlässig als Base64 übergeben können, rufen zuerst request_upload_link auf.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pdfa3NoPDF/A-3-Anbindung der eingebetteten Dateien (ISO 19005-3 §6.8).
en16931NoEN-16931-Prüfung; null, wenn keine XML eingebettet war.
structureYesStrukturelle Prüfung der PDF (ohne die eingebettete XML).
attachmentsYesIm CII referenzierte Anhänge (BT-125).
authoritativeYesAutoritative Prüfung: PDF/A-Konformität (ISO 19005-3), XML-Syntax (XSD) und Geschäftsregeln des erkannten Profils. available=false, wenn der Validator-Service nicht erreichbar war; das Ergebnis basiert dann nur auf der Schnellprüfung.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely useful information beyond that by disclosing the depth of validation performed (structure, EN 16931 rule conformance, PDF/A-3 attachment checks), which tells the agent what a positive or negative result means.

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?

A single front-loaded sentence with zero filler: verb, resource, and scope in order of importance. It is arguably thinner than a multi-step validation tool warrants, but nothing is redundant or padded.

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?

With an output schema present the description need not explain return values, and annotations plus full schema coverage handle safety and inputs, so the remaining burden is small. The one real gap is task routing – nothing tells the agent when to prefer this over extract_invoice – which keeps it short of a 5.

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% – both upload_id and pdf_base64 are documented in the schema, including the 'exactly one of the two' constraint and the 25 MB limit. The description adds no parameter detail of its own, so the baseline of 3 for schema-driven parameters 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 names a specific verb ('Prüft') and a precise resource ('ZUGFeRD-/Factur-X-PDF') and enumerates the validation scope (Struktur, EN-16931-Regeln, PDF/A-3-Anhänge), so an agent immediately knows this is a validator, not a generator or extractor. It does not, however, distinguish itself from siblings like extract_invoice or create_zugferd by naming them or contrasting 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?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The only routing hint in the whole definition lives in the schema for pdf_base64 (call request_upload_link first for chat clients), not in the description itself, so an agent gets no help choosing between this and extract_invoice or create_zugferd.

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.

  1. 1 tool update
    • Changedcreate_zugferd8 fields changed
      • addedInput schema / properties / lang
        Added value: +{
        +  "description": "Sprache der aus den Daten gesetzten Rechnung (Beschriftungen, Zahlen- und Datumsformat). Standard: de.",
        +  "enum": [
        +    "de",
        +    "en"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / logo_base64
        Added value: +{
        +  "contentEncoding": "base64",
        +  "description": "Optionales Logo für die aus den Daten gesetzte Rechnung (nur ohne PDF): PNG, JPEG oder SVG, Base64-kodiert oder als data:-URI, max. 500 KB. Steht rechts oben im Kopf. SVG nur ohne Skripte und ohne Verweise auf andere Dateien.",
        +  "type": "string"
        +}
      • addedInput schema / properties / logo_mime
        Added value: +{
        +  "description": "Optional; der Typ wird sonst aus dem Inhalt erkannt.",
        +  "enum": [
        +    "image/png",
        +    "image/jpeg",
        +    "image/svg+xml"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / pdf_base64 / description
        Previous value: -"Die visuelle Rechnungs-PDF, Base64-kodiert (max. 25 MB). In sie wird das CII-XML eingebettet. Alternativ 'upload_id' angeben. Chat-Clients, die eine angehängte Datei nicht zuverlässig als Base64 übergeben können, rufen zuerst request_upload_link auf."New value: +"Optional: die visuelle Rechnungs-PDF, Base64-kodiert (max. 25 MB). In sie wird das CII-XML eingebettet. Alternativ 'upload_id' angeben. Ohne beides wird die Rechnung aus den Daten gesetzt. Chat-Clients, die eine angehängte Datei nicht zuverlässig als Base64 übergeben können, rufen zuerst request_upload_link auf."
      • changedInput schema / properties / upload_id / description
        Previous value: -"Referenz auf eine zuvor über request_upload_link hochgeladene Datei, anstelle von pdf_base64. Genau eines von beiden angeben."New value: +"Referenz auf eine zuvor über request_upload_link hochgeladene Datei, anstelle von pdf_base64. Höchstens eines von beiden angeben."
      • changedOutput schema / properties / download_url / description
        Previous value: -"Kurzlebiger Download-Link zur erzeugten PDF. Nur gesetzt, wenn die Eingabe als 'upload_id' kam (Chat-Client-Fallback)."New value: +"Kurzlebiger Download-Link zur erzeugten PDF. Gesetzt, wenn die Eingabe als 'upload_id' kam (Chat-Client-Fallback) oder die Rechnung über den Remote-Kanal aus den Daten gesetzt wurde."
      • addedOutput schema / properties / generated
        Added value: +{
        +  "description": "true, wenn die Rechnung ohne Eingabe-PDF aus den Daten gesetzt wurde.",
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / pdf_base64 / description
        Previous value: -"Die erzeugte ZUGFeRD-Rechnung (PDF/A-3 mit eingebettetem CII-XML). Nur gesetzt, wenn die Eingabe als 'pdf_base64' kam; wurde 'upload_id' verwendet, steht stattdessen download_url im Ergebnis."New value: +"Die erzeugte ZUGFeRD-Rechnung (PDF/A-3 mit eingebettetem CII-XML). Gesetzt, wenn die Eingabe als 'pdf_base64' kam oder die Rechnung über WebMCP aus den Daten gesetzt wurde; sonst steht download_url im Ergebnis."
  2. 5 tool updates
    • Changedcreate_zugferd2 fields changed
      • addedInput schema / properties / invoice / properties / delivery / properties / gln
        Added value: +{
        +  "maxLength": 20,
        +  "type": "string"
        +}
      • addedInput schema / properties / invoice / properties / seller / properties / customerAssignedId
        Added value: +{
        +  "maxLength": 100,
        +  "type": "string"
        +}
    • Changedextract_invoice2 fields changed
      • addedOutput schema / properties / invoice / properties / delivery / properties / gln
        Added value: +{
        +  "maxLength": 20,
        +  "type": "string"
        +}
      • addedOutput schema / properties / invoice / properties / seller / properties / customerAssignedId
        Added value: +{
        +  "maxLength": 100,
        +  "type": "string"
        +}
    • Addedparse_bank_statement
    • Addedvalidate_bank_statement
    • Addedvalidate_payment_file
  3. 6 tool updates
    • First observedcheck_peppol_participant
    • First observedcheck_vat_id
    • First observedcreate_zugferd
    • First observedextract_invoice
    • First observedrequest_upload_link
    • First observedverify_zugferd

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server for DACH e-invoicing. Create XRechnung (UBL) and ZUGFeRD 2.3 (Factur-X CII) invoices, validate against EN 16931 rules, extract data from XML, and convert between UBL, CII and JSON formats.
    6
    15 npm
    2
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Model Context Protocol (MCP) server for German Electronic Invoicing (ZUGFeRD 2.x / XRechnung 3.x). Provides tools to validate, generate, parse, and convert invoices compliant with EN 16931 and KoSIT.
    50
    122 PyPI
    2
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants and agents to create, validate, read and convert German and EU e-invoices in ZUGFeRD, XRechnung and Factur-X formats, including extracting structured data from scanned or PDF invoices and embedding XML into PDF/A-3 files. It can run as a hosted remote server or locally, with each request authenticated by the caller's own API token.
    10
    28 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Validates electronic invoices (XRechnung, ZUGFeRD, Factur-X, Peppol BIS, etc.) against authority-pinned rules and explains failures.
    2
    137 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources