Skip to main content
Glama

invowerk

Server Details

E-invoice checker for ZUGFeRD, Factur-X, XRechnung and Peppol BIS. Free web tool, API and MCP.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
invowerk-dev/invowerk
GitHub Stars
0

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a clearly distinct operation: parse, generate, convert, validate, render, and explain errors. Inputs, outputs, and primary purposes do not overlap, so an agent can easily select the right tool.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: convert_invoice, explain_errors, generate_invoice, parse_invoice, render_invoice, validate_invoice. The sole deviation (explain_errors instead of explain_invoice_errors) still adheres to the same pattern.

Tool Count5/5

Six tools is well-scoped for an e-invoicing utility. Each tool provides a unique, necessary operation without redundancy, and the count falls comfortably within the typical 3-15 range.

Completeness5/5

The set covers the full e-invoice handling lifecycle: reading (parse_invoice), creating (generate_invoice), transforming (convert_invoice), validating (validate_invoice), visualizing (render_invoice), and error explanation (explain_errors). Editing is supported via the parse→generate round-trip, leaving no obvious gaps.

Available Tools

6 tools
convert_invoiceConvert an e-invoice between UBL and CIIA
Read-only
Inspect

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. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_flavorNo
target_syntaxYes
invoice_base64Yes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

With annotations only declaring readOnlyHint and openWorldHint, the description carries real behavioral weight: it discloses the 4 MB decoded size limit, that the output is self-validated and invalid documents are never returned, and the error behavior for unreadable/unconvertible input. It also states the 3-credit cost, which annotations never surface.

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, then clean Input/Returns/Credits sections that are easy to scan. Slight redundancy in stating twice that the result is checked/validated before returning, but overall every sentence earns its place.

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 3-parameter conversion tool with an output schema, the description covers inputs, defaults, limits, validation guarantees, failure behavior, 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: invoice_base64 is explained as base64 XML or ZUGFeRD/Factur-X PDF with a size cap, target_syntax values are given as "ubl"/"cii", and target_flavor is explained as optional with its default (source flavor retained) plus its "en16931"/"xrechnung" values.

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 ('Convert an e-invoice to UBL or CII') and scopes it to a well-defined transformation. It is clearly distinguishable from siblings like parse_invoice, generate_invoice, and validate_invoice, which do different jobs on the same resource.

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 the conversion context and clarifies acceptable inputs, but offers no explicit when-to-use guidance or exclusions relative to siblings such as validate_invoice. An agent can infer the purpose, but routing decisions are left to inference.

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

explain_errorsExplain error codesA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNode
codesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With readOnlyHint=true already covering the safety profile, the description adds real behavioral context beyond annotations: no API key required, free/not metered, duplicate codes are removed, and the call fails naming unknown codes. It does not detail rate limits or payload size limits, but the added disclosure is substantial.

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 input contract, then return shape and failure behavior, then cost. Slightly long, and the return-field enumeration partly duplicates the output schema, but every sentence carries useful information.

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, yet the description still usefully names the failure mode (unknown codes abort the call) and the cost model. Combined with the schema and annotations, an agent has everything needed to invoke this correctly.

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 description coverage is 0%, so the description must carry both parameters, and it does: `codes` is a list of one or more codes with duplicates removed (with an example), and `lang` is 'de' (default) or 'en'. It compensates well for the empty schema, though enum values for lang are only implicitly given.

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+resource ('Explain rule codes in plain language') and enumerates the code families covered (EN 16931, XRechnung, ZUGFeRD, IW-*). It also ties itself to the sibling validate_invoice by naming whose findings it explains, so it is distinguishable from the other invoice tools.

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?

The description clearly establishes the context of use: decoding codes surfaced by validate_invoice findings and hints. It gives no explicit when-not-to-use or alternative-tool routing, but the usage context is unambiguous.

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 JSONA
Read-only
Inspect

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.

Credits: 5 per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Adds substantial behavior beyond annotations: 4 MB input cap, an explicit non-behavior ('invowerk writes your amounts as given. It does not compute or correct them.'), a self-validation guarantee ('never returns an invalid document'), the failure path (invalid input or failed check returns an error), and cost (5 credits per call). This is exactly the kind of context readOnlyHint/openWorldHint 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-line contract, then input field inventory, then return/error behavior, then cost. Dense but mostly non-redundant; the field enumeration is a long list that could be compressed, keeping it just short of the top mark.

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?

Given one parameter, nested objects, an output schema, and annotations covering safety, nothing an agent needs to call this correctly is missing: input shape and limits, conditional requirements, failure behavior, cost, and returns are all stated.

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?

The single top-level parameter `invoice` has 0% schema description coverage, so the description carries the burden and largely succeeds by enumerating syntax (ubl default / cii), flavor (en16931 default / xrechnung), invoice_number, issue_date format, currency, parties, lines, tax_breakdown and totals. It still defers nested field detail to an external schema reference ('same schema as POST /v1/generate') and doesn't state which nested fields are required beyond the xrechnung case.

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?

States a concrete verb and resource with format precision: create an EN 16931 e-invoice (UBL or CII XML) from JSON keyed on EN 16931 Business Terms. Input/output contract is clear enough to separate it from parse_invoice/validate_invoice, but no sibling is named, so the 5-level 'distinguishes from siblings' bar is only implicitly met.

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 rather than directed: the description notes equivalence to POST /v1/generate and gives a conditional prerequisite (flavor "xrechnung" requires buyer_reference / Leitweg-ID BT-10). There is no explicit when-to-use/when-not and no routing to convert_invoice, validate_invoice, or render_invoice, which the agent must infer.

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 JSONA
Read-only
Inspect

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. 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 or malformed XML.

Credits: 2 per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoice_base64Yes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint/openWorldHint annotations by disclosing hard input limits (4 MB decoded, 500 pages, 16 attachments), cost (2 credits per call), and failure behavior (errors prefixed with an error code, with named failure modes). This is exactly the operational context an agent needs before invoking.

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?

Front-loaded with purpose, then input, then returns, then failure modes, then cost. Every sentence carries information; no filler or restatement.

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?

Despite an output schema existing, the description usefully previews `model`, `detection`, and `source`, and adds limits, error semantics, and cost. Nothing needed to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single parameter, so the description must carry the burden — and it does, specifying that `invoice_base64` is base64 of UBL or CII XML or a ZUGFeRD/Factur-X PDF, plus decoded-size, page, and attachment caps.

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?

Names a specific verb and resource ('Read an existing e-invoice into JSON') and even states the output convention (EN 16931 Business Terms). It relates itself to the sibling generate_invoice as a round-trip pair, though it does not explicitly distinguish itself from convert_invoice or validate_invoice.

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?

Gives clear usage context: the result is the input format for `generate_invoice`, so it can be edited and re-submitted. This tells the agent when the tool fits in a workflow, but offers no explicit exclusion criteria against the other read/convert siblings.

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 HTMLA
Read-only
Inspect

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. 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.

Credits: 1 per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNode
invoice_base64Yes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint/openWorldHint annotations, the description discloses real behavioral traits: a 4 MB decoded size cap, PDF rejection, DOCTYPE rejection, failure on malformed XML, the exact response fields, and a 1-credit cost per call. These are the kind of operation-specific constraints 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is front-loaded with the purpose, then input constraints, then outputs and failure modes, then cost. Every sentence carries information an agent needs; 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?

Inputs, limits, failure modes, credit cost, and return fields are all covered, and although an output schema exists the description still names the returned fields helpfully. Nothing needed to invoke this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully carry parameter meaning, and it does: invoice_base64 is defined as base64 of the XML with a 4 MB decoded limit and no PDFs, and lang is documented with allowed values 'de' (default) and 'en'.

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 states a specific verb and resource ('Render an XML e-invoice (UBL or CII, e.g. XRechnung) as a readable HTML page') and adds the intent 'show a person what an e-invoice contains', which implicitly separates it from parse_invoice or validate_invoice. It does not explicitly name a sibling or contrast itself with the conversion tool, so it falls short of a 5.

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?

'Use it to show a person what an e-invoice contains' gives a clear condition for selecting this tool versus machine-oriented siblings. There is no explicit when-not guidance or named alternative, so it does not reach 5.

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-invoiceA
Read-only
Inspect

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. 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.

Credits: 1 per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNode
explainNo
invoice_base64Yes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior1/5

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

Annotations declare readOnlyHint=true and openWorldHint=false. The description says an external KoSIT validator decides XRechnung outcomes and may be unreachable, implying an open-world external dependency that conflicts with openWorldHint=false. Otherwise it richly describes fallback, verdict_source, disagreement, findings, pdfa_verdict, hints, and cost.

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-loads purpose and input requirements, then behavior. Dense but mostly useful; some return-field detail (verdict_source, disagreement, pdfa_verdict) may duplicate the output schema, making it slightly longer than necessary.

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?

Covers input formats, size limit, fallback behavior, output meaning, and cost, which is sufficient for a complex validation tool. The unresolved openWorldHint contradiction and absence of sibling routing beyond explain_errors are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden. It documents invoice_base64 format (base64 XML UBL/CII or ZUGFeRD/Factur-X PDF, max 4 MB decoded), the explain boolean effect, and lang allowed values ('de'/'en').

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 ('Check'), resource ('e-invoice'), and validation standards (EN 16931 and German rules). It distinguishes itself from the explanation sibling by directing rule codes to explain_errors, though it does not explicitly contrast with parse/convert/render siblings.

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?

Gives clear context for use: validate XML/PDF e-invoices against standards, with input limit and explain/lang options. Mentions explain_errors as a follow-up for findings, but does not explicitly state when not to use it versus parse_invoice or convert_invoice.

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. 6 tool updates
    • First observedconvert_invoice
    • First observedexplain_errors
    • First observedgenerate_invoice
    • First observedparse_invoice
    • First observedrender_invoice
    • First observedvalidate_invoice

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Validates electronic invoices (XRechnung, ZUGFeRD, Factur-X, Peppol BIS, etc.) against authority-pinned rules and explains failures.
    2
    151 npm
    MIT
  • 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
    30 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
    2
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Reads 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.
    2
    5
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.