invowerk
Server Details
E-invoice checker for ZUGFeRD, Factur-X, XRechnung and Peppol BIS. Free web tool, API and MCP.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- invowerk-dev/invowerk
- GitHub Stars
- 0
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: convert_invoice changes syntax/flavor, generate_invoice creates from JSON, parse_invoice reads into JSON, render_invoice produces HTML, validate_invoice checks compliance, and explain_errors explains rule codes. Input and output formats are well differentiated, so an agent can reliably select the right tool.
All tool names follow a consistent snake_case verb_noun pattern: convert_invoice, explain_errors, generate_invoice, parse_invoice, render_invoice, validate_invoice. The only minor variation is the plural noun in explain_errors, which is natural and does not break the pattern.
Six tools is well-scoped for an e-invoice processing server. Each tool covers a necessary operation (create, read, convert, validate, render, explain) without redundancy, and the count sits comfortably in the ideal 3-15 range.
The set covers the full e-invoice lifecycle: generation from JSON, parsing to JSON, conversion between UBL/CII, validation against EN 16931 and German rules, rendering to HTML, and error explanation. The parse_invoice and generate_invoice pair explicitly enables editing, so no critical CRUD or workflow gaps are apparent.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | The file as a download link, instead of `invoice_base64`. In ChatGPT, pass the user's uploaded file here. Other clients can set `download_url` to a public https URL. | |
| target_flavor | No | Optional: "en16931" or "xrechnung". Without it the flavor of the source is kept. | |
| target_syntax | Yes | Syntax to convert to: "ubl" or "cii". | |
| invoice_base64 | No | The invoice file, base64-encoded. At most 4 MB decoded. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description layers on non-obvious behavior: a pre-return validation pass, a guarantee that invalid documents are never returned, the 4 MB decoded size limit, error behavior on unreadable input, and the 3-credit cost. This is exactly the operational context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then cleanly segmented into Input, Returns and Credits blocks with no wasted clauses. It is longer than strictly necessary given a full schema and output schema exist, which keeps it off a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a conversion tool with a nested-file parameter and an output schema, the description covers inputs, target selection, validation guarantee, failure mode and cost. 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.
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 every parameter including the 4 MB limit, the flavor default and the file-vs-base64 distinction. The description largely restates that content rather than adding syntax or format detail beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Convert) and resource (e-invoice) with both source and target formats named (UBL/CII, ZUGFeRD/Factur-X). An agent can distinguish it from parse_invoice, validate_invoice and render_invoice 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context on the two mutually exclusive input paths (base64 field vs file download link) and the flavor default, which is real operational guidance. It never names a sibling or an explicit when-not-to-use condition, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of the explanations: "de" (default) or "en". | de |
| codes | Yes | One or more rule codes from validate_invoice, e.g. ["BR-CO-18", "BR-DE-21"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, it discloses real behavioral traits: duplicates are removed, unknown codes cause a hard failure that names the offending codes, and the call is free/unmetered. These are operationally relevant facts an agent cannot infer from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then scope, then input/output contract, then cost. Every line earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the input contract, the failure mode for unknown codes, the return shape, and the credit/no-auth situation. Even though an output schema exists, the extra context on error behavior and cost completes the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description nevertheless adds the dedup behavior for `codes` and restates the `lang` default and accepted values in prose. The added semantics are real but modest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (explain) and resource (rule codes) and scopes it to the exact code families emitted by validate_invoice. An agent can distinguish it from the sibling validate_invoice, which produces the codes this tool consumes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Establishes clear context: it explains codes found by validate_invoice and hints (EN 16931, XRechnung, ZUGFeRD, IW-*), and notes it works without an API key. It does not state explicit exclusions or name alternative tools, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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), 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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice | Yes | The invoice as a JSON object keyed on EN 16931 Business Terms, the schema of POST /v1/generate and of parse_invoice's `model`: syntax, flavor, invoice_number, issue_date, currency, seller, buyer, lines, tax_breakdown, totals. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint; the description adds substantial behavioral context beyond them: a 5-credit cost per call, an explicit guarantee that the XML is self-validated and never returned invalid, named error modes (engine_busy, engine_timeout), and the important caveat that amounts are written as given and not computed or corrected. That last point is exactly the kind of non-obvious behavior an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then Input, then Returns, then Credits — a predictable and scannable layout. Every sentence carries operative information (size limit, defaults, conditional requirement, no auto-correction, cost); there is no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, nested-object generation tool with an output schema present, the description covers everything needed: input shape and limits, defaults, conditional field requirements, output fields, validation guarantee, error modes and cost. Nothing material is left for the agent to infer before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100% and the single parameter is documented, so the baseline is 3; the description goes further by enumerating the main invoice fields, stating defaults ("ubl", "en16931"), the date format (YYYY-MM-DD), and the conditional dependency between flavor and buyer_reference. It adds real semantics the schema's flat field list does not carry, though it does not detail nested structures like seller, buyer, lines or tax_breakdown.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb (create), the artifact (EN 16931 e-invoice), the output format (UBL or CII XML), and the input form (from JSON). It is clearly distinguishable from siblings like convert_invoice, parse_invoice, validate_invoice and render_invoice, which are named in the sibling list and not conflated here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong contextual guidance: 4 MB input cap, default values for syntax/flavor, and the conditional rule that flavor="xrechnung" requires buyer_reference (Leitweg-ID BT-10). It also names the failure conditions (invalid input, failed self-check, engine_busy, engine_timeout). It stops short of explicitly routing the agent away from siblings such as validate_invoice or convert_invoice, so it is clear but not a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | The file as a download link, instead of `invoice_base64`. In ChatGPT, pass the user's uploaded file here. Other clients can set `download_url` to a public https URL. | |
| invoice_base64 | No | The invoice file, base64-encoded. At most 4 MB decoded. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/openWorldHint already declaring the safety profile, the description still adds substantial operational context: 4 MB decoded cap, 500-page and 16-attachment PDF limits, accepted syntaxes (UBL, CII, ZUGFeRD/Factur-X), the exact failure modes (no embedded XML, UBL credit note, malformed XML, engine_busy, engine_timeout) and a cost of 2 credits per call. None of that is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then broken into Input / Returns / Credits sections. The sentences are dense with limits and error codes but each one carries actionable information, so there is little waste despite the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, nested-object tool with an output schema, the description covers the inputs accepted, the decoded size and page/attachment caps, the returned keys, the error-code convention, and the credit cost. An agent has everything needed to decide to call it and to interpret both success and failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real constraint meaning on top: 'at most 4 MB decoded' and the 500-page/16-attachment limits for the PDF path, plus the explicit either/or between invoice_base64 and file. It stops short of explaining the base64 encoding/format expectations beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read an existing e-invoice into JSON') and pins the output shape ('keyed on EN 16931 Business Terms'), which is far more precise than siblings like convert_invoice or render_invoice. It names generate_invoice as a downstream consumer rather than as an alternative, so the boundary against read/convert siblings is only implied, not explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the round-trip workflow: the returned JSON is generate_invoice's input, so 'you can edit it and create the invoice again.' That is clear usage context, but there is no statement of when NOT to use it (e.g. for a PDF without embedded XML, or when the file is not an e-invoice), which would be the deciding exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | The file as a download link, instead of `invoice_base64`. In ChatGPT, pass the user's uploaded file here. Other clients can set `download_url` to a public https URL. | |
| lang | No | Language of the labels: "de" (default) or "en". | de |
| invoice_base64 | No | The invoice file, base64-encoded. At most 4 MB decoded. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, it discloses the 4 MB decoded size cap, that PDFs are not accepted, the specific failure modes (non-invoice XML, malformed XML, DOCTYPE, engine_busy, engine_timeout), and the 1-credit cost per call. These are substantial operational details 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then inputs, then returns, then error modes, then cost. Every sentence carries distinct information and none is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with an output schema and annotations already present, the description still covers inputs, return shape, failure modes and pricing. An agent has everything needed to call it and interpret the result; nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: the accepted XML flavors, the mutually exclusive file-vs-base64 input path, the label-language semantics of lang, and the PDF rejection constraint not stated in the schema. It does not need to re-explain file_id/download_url, which the schema documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (render) and resource (XML e-invoice) and names the accepted formats (UBL, CII, XRechnung) and output (HTML page). This clearly distinguishes it from parse_invoice, validate_invoice, convert_invoice and generate_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use it to show a person what an e-invoice contains" gives a clear context for when to reach for this tool. It does not explicitly name the alternatives (parse_invoice, convert_invoice) or state when NOT to use it, so it stops just short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | The file as a download link, instead of `invoice_base64`. In ChatGPT, pass the user's uploaded file here. Other clients can set `download_url` to a public https URL. | |
| lang | No | Language of the explanations: "de" (default) or "en". | de |
| explain | No | true adds an explanation to each finding whose rule has one. | |
| invoice_base64 | No | The invoice file, base64-encoded. At most 4 MB decoded. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint/openWorldHint annotations: it explains the KoSIT-vs-local verdict fallback, verdict_source, official_degraded, disagreement semantics, that hints never change valid, that unreadable input yields a finding rather than an error, the three specific error codes, and the 1-credit cost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded, with the core purpose first and output/failure semantics after. It is long, but nearly every clause carries operational information; only the output-field enumeration slightly overlaps the existing output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation-free but open-world validator with 4 params, nested input objects, an output schema and a credit cost, the description covers inputs, outputs, degraded-mode behavior, and failure modes thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds meaning the schema lacks: accepted input formats (UBL, CII, ZUGFeRD/Factur-X PDF) and the 4 MB decoded limit, plus the file-vs-invoice_base64 relationship. It omits detail on the nested file object, but the schema covers that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check/validate) and resource (e-invoice) plus the exact rule sets applied (EN 16931, German rules), which immediately distinguishes it from parse_invoice, convert_invoice and render_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: two alternative input channels (invoice_base64 or file), when to set explain, and routes the agent to explain_errors for finding codes. It does not explicitly state when NOT to use this tool versus parse_invoice, so it stops short of a 5.
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.
6 tool updates
- First observed
convert_invoice - First observed
explain_errors - First observed
generate_invoice - First observed
parse_invoice - First observed
render_invoice - First observed
validate_invoice
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.
Validiert E-Rechnungen (ZUGFeRD/Factur-X, XRechnung) gegen EN 16931 mit Korrekturvorschlägen.
Generate & validate EN 16931 e-invoices (Factur-X, ZUGFeRD, XRechnung); verification certificates
Related MCP Servers
- AlicenseAqualityCmaintenanceValidates electronic invoices (XRechnung, ZUGFeRD, Factur-X, Peppol BIS, etc.) against authority-pinned rules and explains failures.2226 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.674 npm2MIT
- AlicenseAqualityAmaintenanceModel 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.502Apache 2.0

InvoiceInofficial
AlicenseAqualityAmaintenanceReads 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.25MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.