Skip to content

Mavengence/einvoice-mcp

Repository files navigation

einvoice-mcp

CI Python 3.11+ License: MIT Tests Coverage

MCP-Server for German e-invoice compliance — XRechnung 3.0 & ZUGFeRD 2.x

An MCP server that enables AI agents (Claude, Cursor, Copilot) to validate, generate, parse, and check compliance of electronic invoices per EN 16931 — without a single line of integration code.


Why This Exists

Germany mandated e-invoice reception for B2B as of January 2025 (BMF 2024-11-15). Issuance mandates follow in 2027 (Vorjahresumsatz > 800K) and 2028 (all businesses). Every German company needs tooling — this MCP server gives AI agents that capability.


Compliance Proof

675 tests | 100% coverage (2106 stmts) | 0 failures | lint clean (ruff + mypy strict)

Run make test to verify.

EN 16931 / XRechnung 3.0 Field Coverage

Every mandatory Business Term is tested in generated XML output:

BT Field Test Result
BT-1 Invoice number test_contains_invoice_id PASS
BT-2 Issue date test_produces_valid_xml PASS
BT-3 Invoice type code (380/381/384) test_type_code_380_rechnung, test_type_code_381_gutschrift PASS
BT-5 Currency code (EUR) test_currency_eur PASS
BT-10 Buyer reference / Leitweg-ID test_buyer_reference_set PASS
BT-27 Seller name test_contains_seller PASS
BT-31 Seller VAT ID (schemeID=VA) test_tax_registration_scheme_id_correct PASS
BT-32 Seller tax number (schemeID=FC) test_steuernummer_bt32_scheme_fc PASS
BT-34 Seller electronic address (schemeID=EM) test_seller_electronic_address_bt34 PASS
BT-35..38 Seller address test_contains_seller PASS
BT-39 Seller country subdivision test_country_subdivision_seller_buyer PASS
BT-40 Seller country code test_contains_seller PASS
BT-41 Seller contact name (BR-DE-5) test_seller_contact_br_de_5 PASS
BT-42 Seller contact phone test_seller_contact_phone PASS
BT-43 Seller contact email (BR-DE-7) test_seller_contact_email_br_de_7 PASS
BT-44 Buyer name test_contains_buyer PASS
BT-49 Buyer electronic address (schemeID=EM) test_buyer_electronic_address_bt49 PASS
BT-50..53 Buyer address test_contains_buyer PASS
BT-54 Buyer country subdivision test_country_subdivision_seller_buyer PASS
BT-55 Buyer country code test_contains_buyer PASS
BT-71 Delivery date (§14 Abs. 4 Nr. 6 UStG) test_delivery_date_bt71 PASS
BT-20 Payment terms text test_payment_terms_text_roundtrip PASS
BT-22 Invoice note test_invoice_note_roundtrip PASS
BT-73/74 Service period start/end test_service_period_bt73_bt74 PASS
BT-11 Project reference test_project_reference_bt11 PASS
BT-12 Contract reference test_contract_reference_bt12 PASS
BT-13 Purchase order reference test_purchase_order_reference_bt13 PASS
BT-25 Preceding invoice number test_preceding_invoice_bt25 PASS
BT-81 Payment means type code test_payment_means_type_code_custom PASS
BT-83 Remittance information test_remittance_information_roundtrip PASS
BT-84 IBAN (SEPA credit transfer) test_iban_in_xml PASS
BT-9 Due date test_due_date_roundtrip PASS
BT-14 Sales order reference test_sales_order_roundtrip PASS
BT-29 Seller registration ID (GLN) test_seller_registration_id_roundtrip PASS
BT-36/37 Seller address lines 2/3 test_address_lines_full_roundtrip PASS
BT-44 Buyer contact name test_buyer_contact_roundtrip PASS
BT-46 Buyer contact phone test_buyer_contact_roundtrip PASS
BT-47 Buyer contact email test_buyer_contact_roundtrip PASS
BT-51/52 Buyer address lines 2/3 test_address_lines_full_roundtrip PASS
BT-70..80 Delivery location test_delivery_location_roundtrip PASS
BT-127 Line item note test_item_note_roundtrip PASS
BT-155 Seller item identifier test_seller_item_id_roundtrip PASS
BT-156 Buyer item identifier test_buyer_item_id_roundtrip PASS
BT-157 Standard item ID (GTIN) test_standard_item_id_roundtrip PASS
BG-20/21 Document-level allowances/charges test_allowance_roundtrip PASS
BG-27/28 Line-level allowances/charges test_line_allowance_roundtrip PASS
BT-16 Despatch advice reference test_despatch_advice_roundtrip PASS
BT-18 Invoiced object identifier test_invoiced_object_identifier_roundtrip PASS
BT-23 Business process type test_business_process_type_roundtrip PASS
BT-89 SEPA mandate reference (BG-19) test_sepa_direct_debit_roundtrip PASS
BT-91 Buyer IBAN (BG-19) test_sepa_direct_debit_roundtrip PASS
BT-120 VAT exemption reason text (BR-E-10) test_exemption_reason_roundtrip PASS
BT-121 VAT exemption reason code test_exemption_reason_roundtrip PASS
BT-28 Seller trading name test_trading_names_roundtrip PASS
BT-45 Buyer trading name test_trading_names_roundtrip PASS
BT-17 Tender or lot reference test_tender_reference_roundtrip PASS
BT-133 Buyer accounting reference test_bt133_roundtrip PASS
BT-134/135 Line-level billing period test_line_period_roundtrip PASS
BT-147/148 Gross price / price discount test_gross_price_and_discount_roundtrip PASS
BT-158 Item classification (CPV, etc.) test_item_classification_roundtrip PASS
BG-11 Seller tax representative (BT-62..65) test_seller_tax_rep_roundtrip PASS
BG-10 Payee party (BT-59..61) test_payee_party_roundtrip PASS
BG-18 Payment card (BT-87/88) test_payment_card_roundtrip PASS
BT-159 Item country of origin test_country_of_origin_roundtrip PASS
BG-30 Item attributes (BT-160/161) test_single_attribute_roundtrip PASS
BT-15 Receiving advice reference test_receiving_advice_roundtrip PASS
BT-71 Delivery location identifier test_delivery_location_id_roundtrip PASS
BT-82 Payment means text test_payment_means_text_roundtrip PASS
BG-24 Supporting documents (BT-122..125) test_supporting_doc_with_uri PASS
Skonto Payment discount terms test_skonto_roundtrip PASS

Calculation Rules

Rule Description Test Result
BR-CO-14 TaxTotalAmount = sum of per-group CalculatedAmount test_br_co_14_tax_total_equals_sum_of_trade_tax PASS
BR-CO-14 PDF/XML/API totals use identical per-group rounding test_total_tax_uses_per_group_rounding PASS
BR-CO-10 Line item LineTotalAmount quantized to 0.01 test_line_item_net_amount_quantized PASS
BR-DE-23 IBAN mandatory when PaymentMeansCode=58 test_iban_missing_flags_bt84 PASS
§14/4/2 BT-31 or BT-32 must be present test_neither_bt31_nor_bt32_flags_missing PASS
§14/4/6 BT-71 or BT-73/74 must be present test_no_delivery_date_or_period_flags_missing PASS
BT-3 TypeCode validated against EN 16931 codes test_invalid_type_code_rejected PASS
BT-25 Credit note (381) must reference preceding invoice test_credit_note_without_bt25_flags_missing PASS
384-BT-25 Corrective invoice (384) must reference preceding invoice test_384_with_preceding_ref PASS
RC-COUNTRY Reverse charge: seller ≠ buyer country advisory test_ae_same_country_advisory PASS
IC-COUNTRY Intra-community: seller ≠ buyer country required test_k_same_country_error PASS
§13b UStG Reverse charge: seller+buyer VAT IDs, 0% rate test_reverse_charge_* PASS
§4/1b UStG Intra-community (K): buyer VAT ID, 0% rate test_k_* PASS
§19 UStG Kleinunternehmer: exemption note advisory test_exempt_without_note_suggests_ku PASS
LW-FMT Leitweg-ID format advisory test_invalid_leitweg_format PASS
VAT-FMT German USt-IdNr. format advisory (DE + 9 digits) test_invalid_german_vat_format PASS
§4/1a UStG Export (G): 0% tax rate test_export_g_* PASS
§33 UStDV Kleinbetragsrechnung advisory (≤250€) test_small_invoice_gets_kb_hint PASS
BR-E-10 Exemption reason required for TaxCategory E test_compliance_missing_exemption_reason PASS
BR-DE-24 SEPA DD: mandate (BT-89) + buyer IBAN (BT-91) test_dd_missing_mandate_and_iban PASS
BR-DE-15 Payment terms (BT-20) required for XRechnung test_payment_terms_missing PASS
BR-DE-20 Max one payment instruction type (no mix CT+DD) test_mixed_ct_and_dd_flagged PASS
CC-BT-87 Credit card PAN required when code=48 test_credit_card_missing_pan PASS
REP-BT-63 Tax rep VAT ID required when BG-11 present test_tax_rep_without_tax_id PASS
IBAN IBAN format validation (ISO 13616) test_invalid_iban_* PASS
BIC BIC format validation (ISO 9362) test_invalid_bic_* PASS

Parsing Fidelity

Scenario Description Test Result
SchemeID stripping DE123456789 (VA)DE123456789 test_str_element_strips_scheme_id PASS
Numeric schemeID 4000000000098 (9930)4000000000098 test_strips_numeric_scheme PASS
Description text Reisekosten (pauschal) preserved test_preserves_lowercase_parens PASS
Unicode safety Artikel (3Ü) preserved (not stripped) test_preserves_unicode_parens PASS
BT-32 roundtrip Steuernummer FC generate → parse test_steuernummer_roundtrip PASS
TypeCode roundtrip 381 Gutschrift generate → parse test_type_code_381_roundtrip PASS
Delivery date roundtrip BT-71 generate → parse test_delivery_date_roundtrip PASS
Service period roundtrip BT-73/74 generate → parse test_service_period_roundtrip PASS
Electronic address roundtrip BT-34 generate → parse test_seller_electronic_address_roundtrip PASS
Invoice note roundtrip BT-22 generate → parse test_invoice_note_roundtrip PASS
Payment terms roundtrip BT-20 generate → parse test_payment_terms_text_roundtrip PASS
Payment terms override BT-20 text overrides days test_payment_terms_text_overrides_days PASS
Purchase order roundtrip BT-13 generate → parse test_purchase_order_reference_bt13 PASS
Contract roundtrip BT-12 generate → parse test_contract_reference_bt12 PASS
Project roundtrip BT-11 generate → parse test_project_reference_bt11 PASS
Preceding invoice roundtrip BT-25 generate → parse test_preceding_invoice_bt25 PASS
Remittance roundtrip BT-83 generate → parse test_remittance_information_roundtrip PASS
Empty scheme stripping "PO-42 ()""PO-42" test_strips_empty_parens PASS
Roundtrip invoice Generate → Parse → Verify key fields test_xrechnung_roundtrip PASS
Due date roundtrip BT-9 generate → parse test_due_date_roundtrip PASS
Address line 2/3 roundtrip BT-36/37, BT-51/52 generate → parse test_address_lines_full_roundtrip PASS
Buyer contact roundtrip BT-44/46/47 generate → parse test_buyer_contact_roundtrip PASS
Registration ID roundtrip BT-29 generate → parse test_seller_registration_id_roundtrip PASS
Sales order roundtrip BT-14 generate → parse test_sales_order_roundtrip PASS
Item identifiers roundtrip BT-155/156/157 generate → parse test_all_item_ids_together PASS
Line item note roundtrip BT-127 generate → parse test_item_note_roundtrip PASS
Delivery location roundtrip BT-70..80 generate → parse test_delivery_location_roundtrip PASS
Allowance roundtrip BG-20 generate → parse test_allowance_roundtrip PASS
Charge roundtrip BG-21 generate → parse test_charge_roundtrip PASS
Line allowance roundtrip BG-27 generate → parse test_line_allowance_roundtrip PASS
Despatch advice roundtrip BT-16 generate → parse test_despatch_advice_roundtrip PASS
Invoiced object roundtrip BT-18 generate → parse test_invoiced_object_identifier_roundtrip PASS
Business process roundtrip BT-23 generate → parse test_business_process_type_roundtrip PASS
SEPA direct debit roundtrip BG-19 generate → parse test_sepa_direct_debit_roundtrip PASS
Skonto roundtrip PaymentDiscountTerms generate → parse test_skonto_roundtrip PASS
BT-133 roundtrip Buyer accounting reference generate → parse test_bt133_roundtrip PASS
Trading names roundtrip BT-28/BT-45 generate → parse test_trading_names_roundtrip PASS
Tender reference roundtrip BT-17 generate → parse test_tender_reference_roundtrip PASS
Exemption reason roundtrip BT-120/BT-121 generate → parse test_exemption_reason_roundtrip PASS
Line period roundtrip BT-134/BT-135 generate → parse test_line_period_roundtrip PASS
Seller tax rep roundtrip BG-11 generate → parse test_seller_tax_rep_roundtrip PASS
Payee roundtrip BT-59/60/61 generate → parse test_payee_party_roundtrip PASS
Payment card roundtrip BT-87/88 generate → parse test_payment_card_roundtrip PASS
Gross price roundtrip BT-147/148 generate → parse test_gross_price_and_discount_roundtrip PASS
Classification roundtrip BT-158 generate → parse test_item_classification_roundtrip PASS
Country of origin roundtrip BT-159 generate → parse test_country_of_origin_roundtrip PASS
Item attributes roundtrip BT-160/161 generate → parse test_single_attribute_roundtrip PASS
Receiving advice roundtrip BT-15 generate → parse test_receiving_advice_roundtrip PASS
Delivery location ID roundtrip BT-71 generate → parse test_delivery_location_id_roundtrip PASS
Payment means text roundtrip BT-82 generate → parse test_payment_means_text_roundtrip PASS
Supporting docs roundtrip BG-24 generate → parse test_supporting_doc_with_uri PASS
Supporting docs + tender ref BG-24 + BT-17 coexistence test_supporting_docs_coexist_with_tender_ref PASS
Country subdivision roundtrip BT-39/BT-54 generate → parse test_country_subdivision_seller_buyer PASS
Payment means type code roundtrip BT-81 generate → parse test_sepa_type_code_roundtrip PASS
Buyer reference roundtrip BT-10 generate → parse test_buyer_reference_roundtrip PASS
Tax rep subdivision roundtrip BG-11 BT-39 generate → parse test_tax_rep_subdivision_roundtrip PASS
Combined item features BT-159 + BG-30 + BT-148 together test_all_item_features_together PASS
Multi-reference coexistence BT-17 + BT-18 in same invoice test_tender_and_invoiced_object_coexist PASS
Non-ASCII party names Cyrillic/Chinese names test_non_ascii_party_names PASS
All type codes 380, 381, 384, 389, 875, 876, 877 test_all_type_codes PASS
All tax categories S, Z, E, AE, K, G, O, L, M test_all_tax_categories PASS
50 line items Large invoice build + parse test_many_line_items PASS
Mixed tax categories S + G items in same invoice test_mixed_tax_category_invoice PASS
Unicode safety (umlauts) ÄÖÜäöüß in all text fields test_unicode_invoice PASS
High-value invoice 50 line items with high amounts test_high_value_invoice PASS
Mixed tax rates 7% + 19% with exact rounding test_reduced_tax_rate PASS
Classification version BT-158-2 version roundtrip test_classification_with_version_roundtrip PASS
UBL detection UBL Invoice/CreditNote rejected test_ubl_invoice_rejected PASS
Defensive handlers Exception in buyer_reference/tax_rep/payee/exemption TestDefensiveExceptionHandlers PASS
Pydantic BT mapping Validation errors show BT numbers test_invalid_iban_shows_bt84 PASS

Tax Category Coverage (All 9 EU VAT Categories)

Category Code Description Result
Standard S 19% / 7% USt PASS
Zero Z 0% rated PASS
Exempt E Exempt PASS
Reverse charge AE Reverse charge (Umkehr der Steuerschuld) PASS
Intra-community K EU supply (innergemeinschaftliche Lieferung) PASS
Export G Outside EU (Drittlandslieferung) PASS
Not subject O No VAT PASS
Canary Islands L IGIC PASS
Ceuta/Melilla M IPSI PASS

Security Hardening

Attack Vector Protection Test Result
XXE entity expansion defusedxml pre-screen test_parse_xml_blocks_xxe PASS
Billion laughs (entity bomb) defusedxml pre-screen test_parse_xml_blocks_billion_laughs PASS
External entity injection defusedxml pre-screen test_parse_xml_blocks_external_entity PASS
XML bomb (>10 MB) Size limit test_validate_rejects_oversized_xml PASS
PDF bomb (>50 MB base64) Size limit test_validate_rejects_oversized_pdf PASS
Decoded PDF bomb (>50 MB) Post-decode guard test_validate_rejects_oversized_decoded_pdf PASS
KoSIT response bomb 10 MB + 512 KB cap test_oversized_content_length_header PASS
Input reflection in errors Sanitized test_parse_rejects_unknown_file_type PASS
Error detail leakage Generic messages test_connection_error_no_hostname_in_message_de PASS
SSRF via redirect follow_redirects=False Defense-in-depth HARDENED
Supply chain (Docker) SHA-256 checksum verification Dockerfile.kosit HARDENED
Container privilege Non-root user (both containers) Dockerfile, Dockerfile.kosit HARDENED
Port exposure KoSIT bound to 127.0.0.1 only docker-compose.yml HARDENED
Supply chain (Python) uv.lock for reproducible builds uv.lock HARDENED
IBAN injection ISO 13616 format validation test_invalid_iban_* HARDENED
BIC injection ISO 9362 format validation test_invalid_bic_* HARDENED

Profile Coverage

Profile Generate Parse Validate Compliance
XRechnung 3.0 PASS PASS PASS PASS
ZUGFeRD EN16931 PASS PASS PASS PASS
ZUGFeRD Basic PASS* - - -
ZUGFeRD Extended PASS* - - -

* Generation produces XML with correct guideline URI; full parse/validate/compliance support planned.

Module Coverage

Module Lines Description
config.py 16 Pydantic settings
errors.py 36 Custom exceptions
models/ 600+ Pydantic models (invoice, party, line items, results, enums)
prompts/guides.py 633 14 German tax scenario prompts
prompts/guides_advanced.py 511 8 advanced prompts (EU trade, recurring, Schlussrechnung, Proforma, Drittland, Gutschrift)
prompts/guides_additional.py 304 5 additional prompts (Berichtigung, RC+Steuervertreter, Teilrechnung, IG deep, Skonto)
resources/ 1200+ 24 resources (schemas, reference codes, compliance, SEPA, CPV, BT-23, VAT exemptions, UNCL 5189)
services/invoice_builder.py 576 CII XML generation via drafthorse
services/invoice_data_builder.py 320 Flat parameter builder
services/cii_extractors.py 457 Party, item, attribute extraction
services/kosit.py 80 KoSIT HTTP client
services/pdf_generator.py 182 Visual PDF + factur-x embed
services/xml_parser.py 720 CII/ZUGFeRD XML parser
tools/compliance.py 217 Compliance orchestration
tools/compliance_checks.py 795 BR-DE/BR-CO field checks
tools/arithmetic_checks.py 230 BR-CO-10/11/12/13/14/15/16 math checks
tools/generate.py 50 Generate tools
tools/parse.py 39 Parse tool
tools/validate.py 33 Validation tools

server.py excluded — FastMCP Context cannot be unit-tested; helpers tested in test_server_helpers.py.


Tools

Tool Description
einvoice_validate_xrechnung Validates XRechnung XML against the KoSIT Validator
einvoice_validate_zugferd Validates ZUGFeRD PDF (extracts + validates embedded XML)
einvoice_generate_xrechnung Generates an XRechnung-compliant CII XML invoice
einvoice_generate_zugferd Generates a ZUGFeRD hybrid PDF (visual + machine-readable)
einvoice_parse Parses e-invoices (XML or PDF) into structured data
einvoice_check_compliance Checks mandatory fields + KoSIT validation with German suggestions

MCP Resources

Resource URI Description
einvoice://schemas/line-item JSON-Schema für Rechnungspositionen (items-Array)
einvoice://schemas/allowance-charge JSON-Schema für Zu-/Abschläge
einvoice://schemas/item-attribute JSON-Schema für Artikelmerkmale (BG-30)
einvoice://schemas/supporting-document JSON-Schema für Belegdokumente (BG-24)
einvoice://schemas/invoice-data Vollständiges JSON-Schema für InvoiceData
einvoice://reference/type-codes Rechnungstyp-Codes (380, 381, 384, 389, 875, 876, 877)
einvoice://reference/payment-means-codes Zahlungsart-Codes (58=SEPA, 59=Lastschrift, 48=Kreditkarte, …)
einvoice://reference/tax-categories EU-USt-Kategorien (S, Z, E, AE, K, G, O, L, M) mit Erklärungen
einvoice://reference/unit-codes Mengeneinheiten-Codes (H87=Stück, HUR=Stunde, KGM=kg, …)
einvoice://reference/eas-codes Elektronische Adress-Schemata (EM=E-Mail, 9930=USt-IdNr., …)
einvoice://system/kosit-status On-demand KoSIT-Validator Statusabfrage
einvoice://reference/e-rechnung-pflichten Zeitplan E-Rechnungspflichten 2020–2028 mit Rechtsgrundlagen
einvoice://reference/br-de-rules Deutsche Geschäftsregeln (BR-DE-1..24) mit Lösungshinweisen
einvoice://reference/skr04-mapping SKR04-Kontenzuordnung für häufige Rechnungsarten (DATEV)
einvoice://reference/credit-note-reasons Gutschrift-Gründe und Korrektur-Codes mit Empfehlungen
einvoice://reference/leitweg-id-format Leitweg-ID Aufbau (Grobadresse-Feinadresse-Prüfziffer), Regex, Beispiele
einvoice://reference/tax-category-decision-tree Steuerkategorie-Entscheidungsbaum (S/Z/E/AE/K/G/O/L/M) mit Szenarien
einvoice://reference/sepa-mandate-type-codes SEPA-Mandatstypen (CORE/B2B), Sequenztypen (FRST/RCUR/OOFF), Gläubiger-ID
einvoice://reference/cpv-classification-codes CPV-Codes für öffentliche Vergabe (BT-158), IT/Bau/Beratung/Gesundheit
einvoice://reference/business-process-identifiers BT-23 Geschäftsprozesstyp-Kennungen (Peppol BIS, XRechnung)
einvoice://reference/vat-exemption-reason-texts USt-Befreiungsgründe (BT-120/BT-121) — §19, §4, §13b UStG mit Texten
einvoice://reference/uncl-5189-allowance-reason-codes UNCL 5189 Zu-/Abschlagsgrund-Codes (Rabatt, Skonto, Zuschläge)

MCP Prompts

Prompt Description
gutschrift_erstellen Schritt-für-Schritt: Gutschrift (381) erstellen
reverse_charge_checkliste Checkliste: Reverse Charge (§13b UStG, Kategorie AE)
xrechnung_schnellstart Schnellstart: XRechnung für öffentliche Auftraggeber
korrekturrechnung_erstellen Anleitung: Korrekturrechnung (384) erstellen
abschlagsrechnung_guide Abschlagsrechnung / Teilrechnung (TypeCode 875/876/877)
ratenzahlung_rechnung Rechnung mit Ratenzahlung erstellen
handwerkerrechnung_35a Handwerkerrechnung nach §35a EStG
typecode_entscheidungshilfe Entscheidungshilfe: Welcher TypeCode für welchen Anlass?
b2b_pflicht_2027 Checkliste: B2B E-Rechnungspflicht ab 2027 vorbereiten
steuerprüfung_checkliste E-Rechnungen für Betriebsprüfung vorbereiten (GoBD, §147 AO)
kleinunternehmer_guide Kleinunternehmer (§19 UStG) — E-Rechnung ohne Umsatzsteuer
bauleistungen_13b_guide Bauleistungen / §13b UStG — Reverse Charge im Baugewerbe
differenzbesteuerung_25a_guide Differenzbesteuerung (§25a UStG) für Gebrauchtwarenhändler
stornobuchung_workflow Stornierung: 381 vs 384 vs neue 380 — Entscheidungsbaum
reiseleistungen_25_guide Reiseleistungen (§25 UStG) — Margenbesteuerung
innergemeinschaftliche_lieferung_guide Innergemeinschaftliche Lieferung (§4 Nr. 1b / §6a UStG)
dauerrechnung_guide Dauerrechnung / Monatsrechnung für wiederkehrende Leistungen
steuernummer_vs_ustidnr_guide Steuernummer vs. USt-IdNr. — Entscheidungshilfe (BR-DE-26)
schlussrechnung_nach_abschlag Schlussrechnung nach Abschlagszahlungen (prepaid_amount, BT-113)
proforma_rechnung_guide Proforma-Rechnung — rechtliche Einordnung, E-Rechnungs-Behandlung
drittlandlieferung_guide Export außerhalb EU (§4 Nr. 1a UStG, Steuerkategorie G, Incoterms)
gutschriftverfahren_389_guide Gutschriftverfahren / Self-Billing (TypeCode 389, §14 Abs. 2)
rechnungsberichtigung_vs_storno 381 vs 384: Gutschrift, Korrektur oder Storno? Entscheidungsbaum
reverse_charge_steuervertreter_combined Reverse Charge + Steuervertreter (BG-11): Kombiniertes Szenario
teilrechnung_workflow 875 → 877 Lifecycle: Abschlag, Teilrechnung, Schlussrechnung
innergemeinschaftliche_deep_dive IG Lieferung: Gelangensbestätigung, ZM, Nachweispflichten, eVatR
skonto_berechnung_guide Skonto: Berechnung, BT-20 Kodierung, §17 UStG Steuerbehandlung

Quick Start

Prerequisites

  • Python 3.11+
  • Docker (for the KoSIT Validator)

Installation

git clone https://github.com/Mavengence/einvoice-mcp.git
cd einvoice-mcp
pip install -e ".[dev]"

Start KoSIT Validator

make docker-up

Starts the KoSIT Validator (v1.6.2, XRechnung scenarios v2026-01-31) on port 8081.

Local Operation (stdio)

make dev

Configuration

Claude Desktop

{
  "mcpServers": {
    "einvoice": {
      "command": "python",
      "args": ["-m", "einvoice_mcp"],
      "env": {
        "KOSIT_URL": "http://localhost:8081"
      }
    }
  }
}

Claude Code

claude mcp add einvoice -- python -m einvoice_mcp

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "einvoice": {
      "command": "python",
      "args": ["-m", "einvoice_mcp"],
      "env": {
        "KOSIT_URL": "http://localhost:8081"
      }
    }
  }
}

Environment Variables

Variable Default Description
KOSIT_URL http://localhost:8081 KoSIT Validator URL
LOG_LEVEL INFO Log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)

Example Prompts

Validiere diese XRechnung: [XML einfügen]

Erstelle eine Rechnung von TechCorp GmbH (DE123456789) an ClientCorp GmbH
für 40 Stunden Software-Beratung à 150€/Stunde mit 19% USt.

Parse diese E-Rechnung und zeig mir die Positionen.

Prüfe ob diese Rechnung XRechnung-konform ist und gib Verbesserungsvorschläge.

Advanced Examples

Erstelle eine Gutschrift (TypeCode 381) für Rechnung RE-2025-099 über
200€ netto mit 19% USt.

Erstelle eine Rechnung mit Reverse Charge (§13b UStG, Kategorie AE):
Verkäufer DE123456789, Käufer ATU12345678, Dienstleistung 5.000€.

Erstelle eine Rechnung mit 2% Skonto bei Zahlung innerhalb von 10 Tagen.

Erstelle eine Rechnung mit SEPA-Lastschrift (PaymentMeansCode 59),
Käufer-IBAN DE89370400440532013000, Mandatsreferenz MREF-2025-001.

Erstelle eine Rechnung mit Lieferort: Lager Hamburg, Hafenstraße 42,
20457 Hamburg.

Erstelle eine innergemeinschaftliche Lieferung (Kategorie K) an
einen französischen Kunden (FR12345678901).

Erstelle eine steuerbefreite Rechnung (§19 UStG, Kleinunternehmer)
mit Befreiungsgrund und Code vatex-eu-132.

Erstelle eine Rechnung für ein Vergabeverfahren mit Losnummer VERGABE-2026-42
und Kontierungsreferenz KST-4711 pro Position.

Erstelle eine Korrekturrechnung (TypeCode 384) für die fehlerhafte Rechnung
RE-2026-001 mit korrigiertem Steuersatz.

Architecture

[AI Client] --> stdio --> [FastMCP Server]
                              |-- drafthorse (CII XML generation/parsing)
                              |-- factur-x (PDF/A-3 embedding/extraction)
                              |-- reportlab (Visual PDF rendering)
                              |-- defusedxml (XXE protection on all parse paths)
                              '-- httpx --> [KoSIT Validator :8081]

KoSIT Validator Stack

Component Version Source
KoSIT Validator v1.6.2 (SHA-256 verified) itplr-kosit/validator
XRechnung Scenarios v2026-01-31 (SHA-256 verified) itplr-kosit/validator-configuration-xrechnung
Java Runtime Eclipse Temurin 17 OpenJDK

Development

make install    # Install dependencies
make test       # Run tests with coverage
make lint       # Ruff + mypy strict
make fmt        # Format code
make docker-up  # Start Docker stack

Supported Business Terms (EN 16931)

BT/BG Field Generate Parse Compliance
BT-1 Invoice number Yes Yes Yes
BT-2 Issue date Yes Yes Yes
BT-3 Type code (380/381/384) Yes Yes Yes
BT-5 Currency code Yes Yes Yes
BT-9 Due date Yes Yes
BT-10 Buyer reference / Leitweg-ID Yes Yes Yes
BT-11 Project reference Yes Yes
BT-12 Contract reference Yes Yes
BT-13 Purchase order reference Yes Yes
BT-14 Sales order reference Yes Yes
BT-16 Despatch advice reference Yes Yes
BT-17 Tender or lot reference Yes Yes
BT-18 Invoiced object identifier Yes Yes
BT-20 Payment terms text Yes Yes
BT-22 Invoice note Yes Yes
BT-23 Business process type Yes Yes
BT-25 Preceding invoice (credit notes) Yes Yes Yes
BT-27..40 Seller party + address (incl. lines 2/3, subdivision) Yes Yes Yes
BT-28 Seller trading name Yes Yes
BT-29 Seller registration ID (GLN) Yes Yes
BT-31 Seller VAT ID (schemeID=VA) Yes Yes Yes
BT-32 Seller tax number (schemeID=FC) Yes Yes Yes
BT-34 Seller electronic address Yes Yes Yes
BT-41 Seller contact name Yes Yes Yes
BT-42 Seller contact phone Yes Yes Yes
BT-43 Seller contact email Yes Yes Yes
BT-44..55 Buyer party + address (incl. lines 2/3, subdivision) Yes Yes Yes
BT-45 Buyer trading name Yes Yes
BT-46 Buyer registration ID (GLN) Yes Yes
BT-49 Buyer electronic address Yes Yes Yes
BT-70..80 Delivery location (name + address) Yes Yes
BT-71 Delivery date Yes Yes Yes
BT-73/74 Service period Yes Yes Yes
BT-81 Payment means type code Yes Yes
BT-83 Remittance information Yes Yes
BT-84 Seller IBAN Yes Yes Yes
BT-86 BIC Yes Yes
BT-89 SEPA mandate reference Yes Yes Yes
BT-91 Buyer IBAN (SEPA direct debit) Yes Yes Yes
BT-120 VAT exemption reason text Yes Yes Yes
BT-121 VAT exemption reason code Yes Yes
BT-127 Line item note Yes Yes
BT-155 Seller item identifier Yes Yes
BT-156 Buyer item identifier Yes Yes
BT-157 Standard item ID (GTIN/EAN) Yes Yes
BT-159 Item country of origin Yes Yes
BT-160/161 Item attributes (BG-30, name/value) Yes Yes
BG-20/21 Document-level allowances/charges Yes Yes
BG-27/28 Line-level allowances/charges Yes Yes
BT-15 Receiving advice reference Yes Yes
BT-71 Delivery location identifier Yes Yes
BT-82 Payment means text Yes Yes
BG-24 Supporting documents (BT-122..125) Yes Yes
BT-133 Buyer accounting reference Yes Yes
Skonto Payment discount terms (percent, days) Yes Yes

Gutschrift (Credit Note) Support

For credit notes (TypeCode 381), the server:

  • Sets XML header name to "GUTSCHRIFT" and PDF title accordingly
  • Requires BT-25 (preceding invoice number) in compliance checks
  • Shows "Bezug: [Rechnungsnummer]" in the PDF header
  • Validates against EN 16931 type code whitelist (380, 381, 384, 389, 875, 876, 877)

Example: type_code="381", preceding_invoice_number="RE-2025-099"


Profile Selection Guide

Profile Use Case Guideline URI
XRECHNUNG German public sector (B2G), Leitweg-ID required urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0
ZUGFERD_EN16931 B2B invoices (default for ZUGFeRD PDF) urn:cen.eu:en16931:2017
ZUGFERD_BASIC Simplified B2B invoices urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic
ZUGFERD_EXTENDED Extended B2B invoices with additional fields urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended

German Compliance Guide

See docs/GERMAN_COMPLIANCE_GUIDE.md for:

  • TypeCode decision tree (380/381/384/875/876/877)
  • Tax category decision tree (S/Z/E/AE/K/G/O/L/M)
  • Leitweg-ID format and sources
  • Reverse charge vs. intra-community supply
  • Handwerkerrechnung §35a EStG
  • Pflichtfelder-Checkliste for XRechnung 3.0

Limitations

  • ZUGFeRD Basic/Extended: Generation produces XML with correct guideline URIs, but parsing, validation, and compliance checks are tested for XRechnung 3.0 and ZUGFeRD EN16931 only.
  • Batch processing: Each tool call processes one invoice. For bulk operations, call the tools in sequence.

Troubleshooting

KoSIT Validator nicht erreichbar

Fehler: KoSIT-Validator nicht erreichbar. Bitte prüfen Sie die Verbindung.
  1. Start the Docker containers: make docker-up
  2. Wait for healthy status: docker compose -f docker/docker-compose.yml ps
  3. Verify manually: curl http://localhost:8081/server/health
  4. Check if port 8081 is blocked by firewall or another process

Docker Container startet nicht

# Check logs
docker compose -f docker/docker-compose.yml logs kosit

# Common issue: port already in use
lsof -i :8081

# Restart clean
docker compose -f docker/docker-compose.yml down
docker compose -f docker/docker-compose.yml up -d

UBL-Format erkannt

Fehler: UBL-Format erkannt. Dieses Tool unterstützt nur CII.

The parser only supports CII (Cross Industry Invoice) XML, which is the standard for XRechnung and ZUGFeRD. If you have a UBL invoice, convert it to CII first using an external tool.

Pydantic Validation Errors

When generating invoices, field errors now reference BT numbers:

Fehler: Ungültige Rechnungsdaten:
  - BT-84 (IBAN): String should match pattern ...
  - BT-27 (Verkäufername): String should have at least 1 character

Check the German Compliance Guide for field requirements.

Tests laufen nicht

# Install dev dependencies
pip install -e ".[dev]"

# Run unit tests only (no Docker needed)
make test

# Run integration tests (requires Docker)
make docker-up
pytest -m integration

Regulatory References

  • EN 16931 — European standard for electronic invoicing
  • XRechnung 3.0 (Szenarien 3.0.2) — German CIUS (Core Invoice Usage Specification)
  • ZUGFeRD 2.x / Factur-X 1.08 — Hybrid PDF/A-3 invoice format
  • BMF 2024-11-15 — German Federal Ministry of Finance e-invoice mandate
  • §14 UStG — German VAT Act invoice requirements
  • §14 Abs. 4 Nr. 2 UStG — Steuernummer or USt-IdNr. required (BT-31 / BT-32)
  • §14 Abs. 4 Nr. 6 UStG — Delivery date or service period required (BT-71 / BT-73/74)
  • BR-CO-14 — Tax total must equal sum of per-group calculated amounts
  • BR-DE-5 — Seller contact person (mandatory for XRechnung)
  • BR-DE-7 — Seller contact email (mandatory for XRechnung)
  • BR-DE-23 — IBAN mandatory when PaymentMeansCode = 58 (SEPA)
  • §13b UStG — Reverse charge: seller + buyer VAT IDs required, 0% tax rate
  • §4 Nr. 1b UStG — Intra-community supply: buyer VAT ID required, 0% tax rate
  • §19 UStG — Kleinunternehmerregelung: exemption note advisory for TaxCategory E
  • BG-19 — SEPA direct debit (PaymentMeansCode = 59, buyer IBAN, mandate reference)
  • BR-DE-20 — Max one payment instruction type (no mixing credit transfer + direct debit)
  • BR-DE-24 — SEPA direct debit: mandate reference + buyer IBAN required
  • BR-E-10 — VAT exemption reason (BT-120) required for TaxCategory E
  • §4 Nr. 1a UStG — Export outside EU (TaxCategory G): 0% tax rate required
  • §33 UStDV — Kleinbetragsrechnung advisory (invoices ≤250€ gross)
  • Skonto — Early payment discount terms (PaymentDiscountTerms in CII)
  • 384 Korrekturrechnung — Corrective invoice must reference preceding invoice (BT-25)
  • RC-COUNTRY — Reverse charge: seller/buyer country advisory (§13b allows domestic)
  • IC-COUNTRY — Intra-community: seller ≠ buyer country required
  • §632a BGB — Abschlagsrechnung for construction/service contracts
  • §35a Abs. 3 EStG — Handwerkerleistungen tax deduction (20% of labor, max 1.200€/year)
  • §271 BGB — Payment due date per agreement (Ratenzahlung)
  • ISO 13616 — IBAN format validation (seller + buyer)
  • ISO 9362 — BIC/SWIFT format validation

License

MIT

About

MCP server for German e-invoice compliance — XRechnung 3.0 & ZUGFeRD 2.x. Validate, generate, parse, and check compliance of electronic invoices per EN 16931.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages