1. Übersicht

Der Server stellt drei Tools und eine Resource bereit, die von KI-Agenten über das Model Context Protocol aufgerufen werden können.

SzenarioTool / Resource
Rechnung vor dem Versand prüfenvalidate_invoice
XML-Daten aus ZUGFeRD-PDF lesenextract_xml
Prüfen ob PDF und XML übereinstimmencheck_consistency
Verfügbare Formate und Regelsets abfragenvalidation://rules
Alle Antworten sind strukturiertes JSON. Kein Freitext — jeder Fehler enthält Regel-ID, betroffenes Feld, Fehlermeldung, umsetzbaren Korrekturvorschlag und XPath.

2. Architektur & Datenfluss

KI-Agent │ │ MCP-Nachricht (JSON-RPC über stdio) ▼ ┌─────────────────────────────────────────┐ │ zugferd-mcp-client (npm, lokal) │ │ │ │ validate_invoice · extract_xml │ │ check_consistency │ │ │ │ │ HTTPS REST-Request │ │ ▼ │ │ ZUGFeRD Validator API (gehostet) │ │ api.zugferd-validator.de │ │ Auth: X-Api-Key │ │ │ │ │ Base64 → Mustang CLI → XML-Report │ │ ▼ │ │ Report-Parser + Fix-Suggestions-DB │ └─────────────────┬───────────────────────┘ │ Strukturiertes JSON ▼ KI-Agent erhält Ergebnis

Ablauf für validate_invoice

1
MCP-Client empfängt Aufruf — Base64-Datei + Parameter vom KI-Agenten
2
HTTPS-Request an API — POST /v1/validate mit X-Api-Key Header
3
Auth & Rate-Limit — API prüft Key und Tageslimit des Tiers
4
Mustang CLI — Java-Subprocess validiert gegen EN 16931 (max. 30s)
5
Fix-Suggestions anreichern — Regel-IDs werden auf konkrete Lösungshinweise gemappt
6
JSON-Ergebnis — API antwortet, MCP-Client leitet an KI-Agenten weiter

3. Installation & Konfiguration

1
API-Key holen
# Kostenlos registrieren:
https://zugferd-validator.de/portal.html
2
MCP-Client installieren
npm install -g zugferd-mcp-client
3
In MCP-Client konfigurieren
// mcp_config.json (je nach Client abweichender Pfad)
{
  "mcpServers": {
    "zugferd": {
      "command": "zugferd-mcp-client",
      "env": {
        "ZUGFERD_API_KEY": "zv_dein_key_hier"
      }
    }
  }
}

Direkte REST API

Die API kann auch direkt ohne MCP-Client angesprochen werden:

# Beispiel: Validierung per curl
curl -X POST https://api.zugferd-validator.de/v1/validate \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: zv_dein_key_hier" \
  -d '{"file_content":"<base64>","file_type":"xml"}'

Umgebungsvariablen (MCP-Client)

VariableBeschreibungStandard
ZUGFERD_API_KEYAPI-Key vom Portal– (Pflicht)
ZUGFERD_API_URLAPI-Basis-URLhttps://api.zugferd-validator.de

4. Tools

validate_invoice TOOL

Validiert eine E-Rechnung (ZUGFeRD/Factur-X PDF oder XRechnung XML) gegen EN 16931 und die deutschen Erweiterungen. Gibt strukturierte Fehler, Warnungen und Korrekturvorschläge zurück.

Input-Schema

file_content * string Base64-kodierter Inhalt der PDF- oder XML-Datei. Data-URL-Präfixe (data:application/pdf;base64,…) werden automatisch entfernt.
file_type * enum "pdf" für ZUGFeRD/Factur-X-PDFs · "xml" für reine XRechnung/CII-XML-Dateien
profile enum? Optionale Profilangabe. Bei Abweichung zum erkannten Profil wird eine warning mit rule_id: "PROFILE_MISMATCH" erzeugt.
Werte: minimum · basic_wl · basic · en16931 · extended · xrechnung

Output-Schema

{
  "valid":   true,
  "format":  "ZUGFeRD 2.4 / Factur-X 1.0",
  "profile": "EN16931",
  "summary": "Keine Probleme gefunden",
  "errors":  [],
  "warnings": [],
  "metadata": {
    "invoice_number": "RE-2026-001",
    "issue_date":     "2026-04-01",
    "seller":         "Musterfirma GmbH",
    "buyer":          "Beispiel AG",
    "total_amount":   "1190.00",
    "currency":       "EUR"
  }
}
{
  "valid":   false,
  "format":  "ZUGFeRD 2.4 / Factur-X 1.0",
  "profile": "EN16931",
  "summary": "2 Fehler, 1 Warnung gefunden",
  "errors": [
    {
      "severity":       "error",
      "rule_id":        "BR-DE-1",
      "field":          "BT-31 / BT-32",
      "message":        "Die USt-ID (BT-31) oder Steuernummer (BT-32) muss angegeben werden.",
      "fix_suggestion": "Füge 'ram:SpecifiedTaxRegistration' mit schemeID='VA' und USt-ID hinzu.",
      "xpath":          "//ram:SellerTradeParty/ram:SpecifiedTaxRegistration"
    }
  ],
  "warnings": [
    {
      "severity":       "warning",
      "rule_id":        "BR-CL-10",
      "field":          "BT-81",
      "message":        "Zahlungsmittelcode muss aus UNTDID 4461 stammen.",
      "fix_suggestion": "Verwende z.B. '58' für SEPA-Überweisung oder '59' für SEPA-Lastschrift.",
      "xpath":          "//ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode"
    }
  ]
}

Ausgabefelder

FeldTypPflichtBeschreibung
validbooleanJatrue wenn kein einziger Fehler gefunden wurde
formatstringNeinErkanntes Format, z.B. "ZUGFeRD 2.4 / Factur-X 1.0"
profilestringNeinErkanntes Profil in Großbuchstaben, z.B. "EN16931"
summarystringJaLesbare Zusammenfassung, z.B. "2 Fehler, 1 Warnung gefunden"
errorsarrayJaValidierungsfehler — machen die Rechnung ungültig
warningsarrayJaWarnungen — Rechnung kann trotzdem gültig sein
noticesarrayNeinInformative Hinweise ohne Einfluss auf die Gültigkeit
metadataobjectNeinExtrahierte Rechnungsdaten (nur bei file_type: "xml")
extract_xml TOOL

Extrahiert das eingebettete XML-Dokument aus einer ZUGFeRD/Factur-X-PDF. Gibt den vollständigen XML-Inhalt als String zurück, zusammen mit erkanntem Format und Profil.

Input

pdf_content * string Base64-kodierter Inhalt der ZUGFeRD/Factur-X-PDF-Datei.

Output

{
  "xml_content": "<?xml version='1.0' encoding='UTF-8'?>\n<rsm:CrossIndustryInvoice ...>...</rsm:CrossIndustryInvoice>",
  "format":      "ZUGFeRD 2.4 / Factur-X 1.0",
  "profile":     "EN16931"
}
Das extrahierte xml_content kann direkt (nach Base64-Kodierung) an validate_invoice mit file_type: "xml" weitergegeben werden.
check_consistency TOOL

Prüft, ob die für Menschen sichtbaren Daten im PDF (Rechnungsnummer, Datum, Gesamtbetrag) mit den im XML-Anhang gespeicherten Maschinendaten übereinstimmen. Deckt Manipulationen oder Erfassungsfehler auf.

Input

pdf_content * string Base64-kodierter Inhalt der ZUGFeRD/Factur-X-PDF-Datei.

Output

{
  "consistent":    true,
  "discrepancies": []
}
{
  "consistent":    false,
  "discrepancies": [
    {
      "field":     "total_amount",
      "pdf_value": "1190.00",
      "xml_value": "1180.00",
      "message":   "Gesamtbetrag im PDF ('1190.00') unterscheidet sich von dem im XML ('1180.00')."
    }
  ]
}

Geprüfte Felder & Toleranzen

FeldErkennungsmuster im PDFToleranz
invoice_numberRechnungsnummer:, Rechnung Nr., Invoice No.Groß-/Kleinschreibung, Leerzeichen, Bindestriche ignoriert
issue_dateRechnungsdatum:, Datum:, Invoice Date:Keiner — Datumformate werden auf ISO 8601 normiert
total_amountGesamtbetrag:, Rechnungsbetrag:, Total:±0,01 EUR (Rundungsdifferenzen)
Die Texterkennung basiert auf dem maschinenlesbaren PDF-Text. Gescannte PDFs ohne OCR-Schicht werden nicht unterstützt.

5. Resource: validation_rules

Gibt das aktuelle Regelwerk des Servers zurück: unterstützte Formate, Profile und die verwendete Validierungsengine.

URI: validation://rules

{
  "supported_formats": [
    "ZUGFeRD 1.0", "ZUGFeRD 2.0", "ZUGFeRD 2.1", "ZUGFeRD 2.2",
    "ZUGFeRD 2.3", "ZUGFeRD 2.4 / Factur-X 1.0",
    "XRechnung 1.2", "XRechnung 2.0", "XRechnung 2.3", "XRechnung 3.0"
  ],
  "supported_profiles": [
    "minimum", "basic_wl", "basic", "en16931", "extended", "xrechnung"
  ],
  "validation_engine": "Mustang Project v2.22.0",
  "last_updated":      "2026-04-01"
}

6. Fehlerbehandlung

Alle Tools geben bei Fehlern ein JSON-Objekt mit einem error-Feld zurück. Es gibt niemals eine unstrukturierte Fehlerausgabe.

{
  "error":   "Kurze Fehlerkategorie",
  "details": "Ausführliche Beschreibung mit konkretem Hinweis zur Behebung."
}
errorAuslöser
"Fehlender Parameter"Pflichtfeld nicht übergeben
"Ungültiger Parameter"Falscher Wert für file_type
"Ungültiger Base64-Input"Kein gültiger Base64-String übergeben
"Validierungsfehler"Mustang CLI konnte nicht starten (z.B. Java fehlt) oder Timeout
"XML-Extraktion fehlgeschlagen"Keine XML-Datei im PDF-Anhang gefunden
"PDF-Lesefehler"PDF kann nicht gelesen werden
"XML-Parsing-Fehler"Extrahiertes XML ist kein valides XML
"Interner Fehler"Unerwarteter Laufzeitfehler
Timeout: Mustang CLI wird nach 30 Sekunden abgebrochen. Bei Timeout gibt das Tool "error": "Validierungsfehler" zurück.

7. Gemeinsame Datentypen

ValidationIssue

Wird in den Arrays errors, warnings und notices von validate_invoice verwendet.

FeldTypPflichtBeschreibung
severity"error" | "warning" | "notice"JaSchweregrad des Befundes
rule_idstringJaRegel-ID, z.B. "BR-DE-1", "BR-CL-10"
fieldstringNeinBetroffenes BT-Feld, z.B. "BT-31 / BT-32"
messagestringJaFehlermeldung auf Deutsch
fix_suggestionstringNeinKonkreter Korrekturhinweis mit XML-Beispiel
xpathstringNeinXPath zum betroffenen XML-Element

InvoiceMetadata

Optionales Feld im Ergebnis von validate_invoice (nur bei file_type: "xml").

FeldTypBeschreibung
invoice_numberstring?Rechnungsnummer (BT-1)
issue_datestring?Rechnungsdatum ISO 8601, z.B. "2026-04-01"
sellerstring?Name des Verkäufers (BT-27)
buyerstring?Name des Käufers (BT-44)
total_amountstring?Gesamtbetrag als Dezimalstring, z.B. "1190.00"
currencystring?ISO 4217 Währungscode, z.B. "EUR"

8. Unterstützte Formate & Profile

Formate

FormatStandardAnmerkung
ZUGFeRD 1.0ZUGFeRD 1.0 / GEFEGÄltere Version, eingeschränkte Profilunterstützung
ZUGFeRD 2.0FeRD 2.0Erste CII-basierte Version
ZUGFeRD 2.1Factur-X 1.0 (FR)Technisch identisch mit Factur-X 1.0
ZUGFeRD 2.2Factur-X 1.0.05Kleinere Korrekturen
ZUGFeRD 2.3Factur-X 1.0.06Version vor 2.4
ZUGFeRD 2.4 / Factur-X 1.0EN 16931 + D16BAktuelle Hauptversion (2026)
XRechnung 1.2XRechnung 1.2Ältere XRechnung-Version
XRechnung 2.xXRechnung 2.0–2.3Verschiedene Zwischenversionen
XRechnung 3.0XRechnung 3.0Aktuelle XRechnung-Version

Profile (ZUGFeRD/Factur-X)

Profil-IDAnzeigenameTypischer Einsatz
minimumMINIMUMEinfache maschinelle Verarbeitung
basic_wlBASIC-WLOhne Positionsdetails
basicBASICStandard-Rechnungen
en16931EN 16931 (COMFORT)Öffentliche Auftraggeber, PEPPOL
extendedEXTENDEDKomplexe B2B-Prozesse
xrechnungXRECHNUNGDeutsche öffentliche Verwaltung

9. Regelwerk & Korrekturvorschläge

Der Server enthält eine Datenbank mit Korrekturvorschlägen für 48 Regelkategorien. Wenn Mustang einen Fehler mit bekannter Regel-ID meldet, wird der Korrekturvorschlag automatisch angehängt.

BR-DE-Regeln 26 Regeln

Deutsche Erweiterungen — Pflicht für XRechnung-konforme Rechnungen.

Regel-IDFeldKurzbeschreibung
BR-DE-1BT-31 / BT-32USt-ID oder Steuernummer des Verkäufers
BR-DE-2BT-35Straße des Verkäufers
BR-DE-3BT-37Stadt des Verkäufers
BR-DE-4BT-38PLZ des Verkäufers
BR-DE-5BT-40Land des Verkäufers
BR-DE-6BT-50Straße des Käufers
BR-DE-7BT-52Stadt des Käufers
BR-DE-8BT-53PLZ des Käufers
BR-DE-9BT-55Land des Käufers
BR-DE-10BT-81Zahlungsmitteltyp-Code
BR-DE-11BT-84IBAN des Zahlungskontos
BR-DE-12BT-86BIC des Zahlungsdienstleisters
BR-DE-13BT-20Zahlungsbedingung als Freitext
BR-DE-14BT-22Rechnungsanmerkung nicht leer
BR-DE-15BT-7Steuerdatum wenn abweichend
BR-DE-16BT-6Steuerkurs-Code
BR-DE-17BT-92Nachlass-Grund auf Belegebene
BR-DE-18BT-98Abschlags-Grund auf Belegebene
BR-DE-19BT-132Nachlass-Grund auf Positionsebene
BR-DE-20BT-140Abschlags-Grund auf Positionsebene
BR-DE-21BT-23Prozessart
BR-DE-22BT-24Spezifikationskennung
BR-DE-23BT-10Käuferreferenz / Leitweg-ID
BR-DE-24BT-48USt-ID oder Steuer-ID des Käufers
BR-DE-25BT-131Nettobetrag der Position positiv
BR-DE-26BT-129Abgerechnete Menge > 0

EN-16931-Kernregeln (BR-*) 10 Regeln

Regel-IDFeldKurzbeschreibung
BR-1BT-1Rechnungsnummer
BR-2BT-2Rechnungsdatum
BR-3BT-3Rechnungstyp-Code
BR-4BT-5Währungsangabe
BR-5BT-27Name des Verkäufers
BR-6BT-44Name des Käufers
BR-7BT-22Rechnungsanmerkung nicht leer
BR-8BT-19Bestellreferenz mit Inhalt
BR-9BT-14Vertragsnummer mit Inhalt
BR-10BT-13Bestellnummer mit Inhalt

Berechnungsregeln (BR-CO-*) & Codelistenregeln (BR-CL-*) 8 Regeln

Regel-IDKurzbeschreibung
BR-CO-3Gesamtbetrag korrekt berechnet
BR-CO-9Nettobetrag korrekt berechnet
BR-CO-10Gesamtsteuer korrekt berechnet
BR-CO-13Summe der Positionsnettobeträge korrekt
BR-CL-10Zahlungsmittelcode aus UNTDID 4461
BR-CL-16Steuerbefreiungscode aus VATEX-Liste
BR-CL-17Steuercode aus UNCL5305 (S, Z, E, AE, K)
BR-CL-18Maßeinheitencode aus UN/ECE Rec. 20

Steuerkategorieregeln (BR-S/Z/E/AE-*) 4 Regeln

Regel-IDKurzbeschreibung
BR-S-1Steuerbetrag bei Normalsatz (S) angegeben
BR-Z-1Steuerbetrag bei Nullsatz (Z) = 0
BR-E-1Steuerbetrag bei Steuerbefreiung (E) = 0
BR-AE-1Steuerbetrag bei Reverse Charge (AE) = 0

10. Nutzungsbeispiele

Beispiel 1: XRechnung-XML validieren

{
  "tool": "validate_invoice",
  "arguments": {
    "file_content": "PD94bWwgdmVyc2lvbj0iMS4wIj8+...",
    "file_type":   "xml",
    "profile":     "xrechnung"
  }
}
{
  "valid":   true,
  "format":  "XRechnung 3.0",
  "profile": "XRECHNUNG",
  "summary": "Keine Probleme gefunden",
  "errors":  [],
  "warnings": [],
  "metadata": {
    "invoice_number": "INV-2026-0042",
    "issue_date":     "2026-04-07",
    "seller":         "Tech GmbH",
    "buyer":          "Bundesbehörde X",
    "total_amount":   "5950.00",
    "currency":       "EUR"
  }
}

Beispiel 2: Fehlerhafte Rechnung mit Korrekturvorschlag

{
  "tool": "validate_invoice",
  "arguments": {
    "file_content": "JVBERi0xLjQK...",
    "file_type":   "pdf"
  }
}
{
  "valid":   false,
  "format":  "ZUGFeRD 2.4 / Factur-X 1.0",
  "profile": "EN16931",
  "summary": "1 Fehler gefunden",
  "errors": [{
    "severity":       "error",
    "rule_id":        "BR-DE-23",
    "field":          "BT-10",
    "message":        "Käuferreferenz (BT-10) muss für XRechnung angegeben werden.",
    "fix_suggestion": "Füge 'ram:BuyerReference' hinzu, z.B. '04011000-1234-34' für Behörden.",
    "xpath":          "//ram:ApplicableHeaderTradeAgreement/ram:BuyerReference"
  }],
  "warnings": []
}

Beispiel 3: XML extrahieren und validieren

// Schritt 1 — XML aus PDF extrahieren
{ "tool": "extract_xml", "arguments": { "pdf_content": "JVBERi0x..." } }

// Schritt 2 — Extrahiertes XML validieren (base64-kodiert übergeben)
{ "tool": "validate_invoice", "arguments": { "file_content": "<base64 des xml_content>", "file_type": "xml" } }

Beispiel 4: Konsistenzprüfung

{
  "tool": "check_consistency",
  "arguments": { "pdf_content": "JVBERi0xLjQK..." }
}
{
  "consistent":    false,
  "discrepancies": [{
    "field":     "total_amount",
    "pdf_value": "1190.00",
    "xml_value": "1180.00",
    "message":   "Gesamtbetrag im PDF ('1190.00') unterscheidet sich von dem im XML ('1180.00')."
  }]
}

11. Grenzen & Bekannte Einschränkungen

EinschränkungDetails
TimeoutMustang CLI wird serverseitig nach 30 Sekunden abgebrochen. Sehr große oder korrupte Dateien können diesen Timeout auslösen.
Rate-LimitFree: 20 Anfragen/Tag · Pro: 500/Tag · Ultra: 5.000/Tag. Bei Überschreitung: HTTP 429.
PDF-OCRcheck_consistency wertet nur maschinenlesbaren PDF-Text aus. Eingescannte PDFs ohne OCR-Schicht werden nicht unterstützt.
Metadaten nur bei XMLvalidate_invoice extrahiert Metadaten nur bei file_type: "xml". Bei PDFs fehlt dieses Feld.
KonsistenzprüfungNur drei Felder werden verglichen (Nummer, Datum, Betrag). Adressen, Steuernummern und Positionsdetails werden nicht abgeglichen.
Unbekannte Regel-IDsFehlt eine Regel-ID in der Fix-Suggestions-DB, bleibt fix_suggestion leer. Die Meldung wird trotzdem zurückgegeben.
DateigrößeKeine explizite Größenbeschränkung, aber sehr große PDFs (>50 MB) können zum Timeout führen.