MCP server for German e-invoice compliance (XRechnung/ZUGFeRD). Enables validation, creation, parsing and compliance checking of electronic invoices according to EN 16931.
Server has 6 tools with complete input schemas and descriptions. Naming follows verb_noun pattern (validate_*, generate_*, parse_*, check_*). Descriptions are present but vary in quality (34 - 194 chars). All parameters have type and description. However, output schemas are not documented in the source code, parameter constraints lack enums/ranges, and error handling guidance is minimal. No tool annotations for destructive operations despite two WRITE-risk tools (generate_xrechnung, generate_zugferd). Composition is sound, each tool has one responsibility. Missing: pagination guidance, output field documentation, recovery hints in error messages.
Checks an invoice for German e-invoice compliance (XRechnung/ZUGFeRD).
Generates an XRechnung (CII XML) from invoice data.
Generates a ZUGFeRD PDF from invoice data.
Parses an e-invoice (XRechnung XML or ZUGFeRD PDF) and extracts structured data.
Validiert eine XRechnung (CII XML) gegen den KoSIT-Validator. Gibt Fehler, Warnungen und das erkannte Profil zurück.
Validiert eine ZUGFeRD-PDF, indem das eingebettete XML extrahiert und geprüft wird.
Output schemas not documented. Tools return structured data but LLMs cannot see what fields to expect. Breaks downstream tool chaining and forces agents to guess field names.
No parameter constraints (enums, ranges, patterns). 'items' parameter in generate_* tools accepts 'JSON array' as free-form string, LLMs will hallucinate invalid JSON. 'country_code' lacks ISO 3166-1 alpha-2 enum.
Destructive tools (generate_xrechnung, generate_zugferd) lack tool annotations. No destructiveHint or idempotentHint declared. Agents cannot distinguish safe reads from state-modifying writes.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
Error handling not visible in tool definitions. No guidance on retryability, user-fixable vs fatal errors, or recovery steps. Agents will not know how to respond to validation failures.
Parameter 'xml_or_pdf_base64' in parse_einvoice and check_compliance is overloaded, accepts two different input types (XML string vs Base64 PDF). Ambiguous naming forces LLM to reason about type detection.