invowerk
Server Details
E-invoice checker for ZUGFeRD, Factur-X, XRechnung and Peppol BIS. Free web tool, API and MCP.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- invowerk-dev/invowerk
- GitHub Stars
- 0
- Server Listing
- invowerk
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 6 tools
Each tool maps to a distinct lifecycle action: generate from JSON, parse to JSON, convert between syntaxes, validate, render HTML, and explain validation codes. Overlap between convert_invoice and generate_invoice is minimal because their inputs and intents are clearly different.
All six tools follow the same snake_case verb_noun pattern: convert_invoice, explain_errors, generate_invoice, parse_invoice, render_invoice, validate_invoice. The convention is predictable and unambiguous.
Six tools is well-scoped for an e-invoicing server, with one tool per major operation. No tool feels redundant or out of place.
The surface covers the core e-invoice lifecycle: creation, parsing, syntax conversion, validation, human-readable rendering, and rule explanation. Cross-tool workflows are explicitly supported, such as parse_invoice output feeding generate_invoice and validate_invoice findings feeding explain_errors.
Available Tools
6 toolsconvert_invoiceConvert an e-invoice between UBL and CIIARead-onlyInspect
Convert an e-invoice to UBL or CII. The result is checked before it is returned.
Input: invoice_base64 is the base64 of an XML invoice or a ZUGFeRD /
Factur-X PDF, at most 4 MB decoded; or pass the file as a download link in
file. target_syntax is "ubl" or "cii". target_flavor is optional,
"en16931" or "xrechnung"; without it the flavor of the source is kept.
Returns xml, syntax, flavor and self_validation (valid,
finding_count). invowerk checks the converted XML before answering and never
returns an invalid document. Input that cannot be read or converted fails with
an error message.
Credits: 3 per call.
Inputs: target_syntax (required), file, target_flavor, invoice_base64. Returns: object
explain_errorsExplain error codesARead-onlyInspect
Explain rule codes in plain language. Works without an API key.
Covers the codes of validate_invoice findings and hints: EN 16931,
XRechnung, ZUGFeRD and invowerk's own hint codes (IW-*).
Input: codes is a list of one or more codes, e.g. ["BR-CO-18", "BR-DE-21"].
Duplicates are removed. lang is "de" (default) or "en".
Returns lang and explanations. Each explanation has title, meaning,
causes, fixes, severity, standard, bt_refs, xpath_hints and
explain_url (the German page for the code). If any code is unknown, the call
fails and names the unknown codes.
Credits: free. This tool is not metered.
Inputs: codes (required), lang. Returns: object
generate_invoiceCreate an e-invoice from JSONARead-onlyInspect
Create a valid EN 16931 e-invoice (UBL or CII XML) from JSON.
Input: invoice is a JSON object keyed on EN 16931 Business Terms, the same
schema as POST /v1/generate, at most 4 MB. Main fields: syntax ("ubl"
default, or "cii"), flavor ("en16931" default, or "xrechnung", which
requires buyer_reference, the Leitweg-ID BT-10, and payment_iban),
invoice_number,
issue_date (YYYY-MM-DD), currency, seller, buyer, lines,
tax_breakdown, totals. invowerk writes your amounts as given. It does not
compute or correct them. Input that breaks an EN 16931 or XRechnung rule
returns an error naming each rule, e.g. BT-112 = BT-109 + BT-110 (BR-CO-15).
Dates are YYYY-MM-DD, amounts go up to 999,999,999.99.
Returns xml, syntax, flavor and self_validation. invowerk checks the
XML before answering and never returns an invalid document. Invalid input, or
XML that fails the check, returns an error, as does a busy (engine_busy) or
overrunning (engine_timeout) generate.
Credits: 5 per call.
Inputs: invoice (required). Returns: object
parse_invoiceRead an e-invoice into JSONARead-onlyInspect
Read an existing e-invoice into JSON keyed on EN 16931 Business Terms.
The JSON is the input format of generate_invoice, so you can edit it and
create the invoice again.
Input: invoice_base64 is the base64 of an XML invoice (UBL or CII) or a
ZUGFeRD / Factur-X PDF, at most 4 MB decoded; or pass the file as a download
link in file. A PDF may have at most 500 pages and 16 attachments.
Returns model (the invoice as JSON), detection (syntax, flavor,
customization_id) and source ("xml" or "pdf-embedded"). A file that cannot
be read fails with an error that starts with an error code, e.g. a PDF without
embedded XML, a UBL credit note, malformed XML, or a busy (engine_busy) or
overrunning (engine_timeout) read.
Credits: 2 per call.
Inputs: file, invoice_base64. Returns: object
render_invoiceRender an e-invoice as HTMLARead-onlyInspect
Render an XML e-invoice (UBL or CII, e.g. XRechnung) as a readable HTML page.
invowerk uses the KoSIT XRechnung visualization. Use it to show a person what an e-invoice contains.
Input: invoice_base64 is the base64 of the XML, at most 4 MB decoded, or pass
the file as a download link in file. PDFs are not accepted. lang sets the
label language, "de" (default) or "en".
Returns html (a complete HTML document), lang, flavor (e.g.
"xrechnung") and syntax (e.g. "ubl_invoice"). A file that is not an XML
invoice, malformed XML or XML with a DOCTYPE fails with an error message,
and so does a busy (engine_busy) or overrunning (engine_timeout) render.
Credits: 1 per call.
Inputs: file, lang, invoice_base64. Returns: object
validate_invoiceCheck an e-invoiceARead-onlyInspect
Check an e-invoice against EN 16931 and German rules.
Input: invoice_base64 is the base64 of an XML invoice (UBL or CII) or a
ZUGFeRD / Factur-X PDF, at most 4 MB decoded; or pass the file as a download
link in file. explain=true adds an explanation to findings whose rule
has one, in lang ("de" or "en").
valid is the result. For XRechnung the KoSIT validator decides. If it is
unreachable, invowerk's own check with the same rules decides,
verdict_source is "local" and official_degraded is true.
disagreement is true when both ran and differ. findings lists each
problem with rule_id, severity and message; pass the codes to
explain_errors (free). pdfa_verdict is the PDF/A check of a PDF.
hints never change valid. Unreadable input returns a finding, not an
error. It fails with an error when the check is busy (engine_busy), ran
longer than 20 s (engine_timeout) or the XML has more than 100,000
elements (document_too_complex).
Credits: 1 per call.
Inputs: file, lang, explain, invoice_base64. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
XRechnung and ZUGFeRD e-invoicing (EN 16931): create, validate, check Leitweg-IDs, German VAT.
Validate, generate & convert EU e-invoices (UBL, CII, XRechnung, Factur-X) — EN 16931 pre-validated.
Create and validate XRechnung, ZUGFeRD and Peppol e-invoices (KoSIT); Peppol lookup, rule help.
Create ZUGFeRD e-invoices from JSON or PDF, verify Factur-X, check VAT IDs and Peppol.
Related MCP Servers
- AlicenseAqualityCmaintenanceValidates electronic invoices (XRechnung, ZUGFeRD, Factur-X, Peppol BIS, etc.) against authority-pinned rules and explains failures.223 npmMIT
- AlicenseAqualityDmaintenanceMCP 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.661 npm2MIT
- AlicenseAqualityBmaintenanceModel 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.5046 PyPI2Apache 2.0

InvoiceInofficial
AlicenseAqualityBmaintenanceReads and validates any European e-invoice a business receives — XRechnung, UBL, CII, ZUGFeRD/Factur-X PDF, Peppol BIS 3, FatturaPA, KSeF FA(3) — into canonical EN 16931 JSON with plain-language fix hints in EN/DE/PL/IT/FR, plus PDF, CSV and DATEV export. Nothing is stored; works without a key on a small daily quota.5MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.