{"serverInfo":{"name":"formkorrekt","title":"formkorrekt","version":"1.0.0"},"description":"formkorrekt: validate, repair and generate German e-invoices (XRechnung, ZUGFeRD). Billed per document (free allowance first, then prepaid credit; get_credit shows both). Findings carry rule codes (BR-DE-…) with German fix hints. Nothing is invented for a legal document: missing fields are reported, never filled in. No tax advice.","transport":{"type":"streamable-http","endpoint":"/mcp"},"authentication":{"required":true,"schemes":["bearer"],"headers":["Authorization: Bearer sk_…","X-API-Key: sk_…"]},"tools":[{"name":"validate_invoice","title":"Validate an e-invoice","description":"Check a German e-invoice (XRechnung UBL/CII XML or ZUGFeRD PDF) against XRechnung / EN 16931. Returns status valid/invalid and every finding with rule code (e.g. BR-DE-15), German message and a fix hint. Billed as 1 document (free allowance first, then credit). Give `xml` (text) or `file_base64`. The document is processed in memory and not stored. / E-Rechnung prüfen (keine Steuerberatung).","inputSchema":{"type":"object","properties":{"xml":{"type":"string","description":"The invoice XML as text (XRechnung UBL or CII)."},"file_base64":{"type":"string","description":"The invoice file base64-encoded (XML or ZUGFeRD PDF, ≤ 10 MB)."},"idempotency_key":{"type":"string","maxLength":200,"description":"Optional. A retry with the same key and the same input within 24 h is billed once; the work is done again and returned again - nothing is stored, only a SHA-256 of the input (any size) is kept for 24 h. The same key with other input is IDEMPOTENCY_CONFLICT; after 3 retries or 1 h a key is IDEMPOTENCY_KEY_EXHAUSTED - use a new one."}},"additionalProperties":false}},{"name":"repair_invoice","title":"Repair an XRechnung","description":"Apply deterministic repairs to an XRechnung XML (recalculated totals, specification identifier, date and number formats) - nothing is guessed or invented. Returns the repaired XML (`document`), what was changed (`applied`) and the remaining findings. Billed as 3 documents if something was repaired, otherwise 1. XML only (PDF → REPAIR_FORMAT). / XRechnung reparieren.","inputSchema":{"type":"object","properties":{"xml":{"type":"string","description":"The invoice XML as text (XRechnung UBL or CII)."},"file_base64":{"type":"string","description":"The invoice file base64-encoded (XML or ZUGFeRD PDF, ≤ 10 MB)."},"idempotency_key":{"type":"string","maxLength":200,"description":"Optional. A retry with the same key and the same input within 24 h is billed once; the work is done again and returned again - nothing is stored, only a SHA-256 of the input (any size) is kept for 24 h. The same key with other input is IDEMPOTENCY_CONFLICT; after 3 retries or 1 h a key is IDEMPOTENCY_KEY_EXHAUSTED - use a new one."}},"additionalProperties":false}},{"name":"generate_invoice","title":"Generate XRechnung / ZUGFeRD","description":"Create an e-invoice from JSON: XRechnung UBL or CII (XML) or ZUGFeRD EN 16931 (PDF). Nothing is invented for a legal document: missing required fields (seller.contact name/phone/email, buyer.email, address.country, per line quantity/unit_price/vat_rate) are answered with VALIDATION naming the field. The file is re-validated before delivery; an invalid result is not billed (INVOICE_INVALID). Billed as 3 documents. The file comes back in this response as an embedded resource (XML as text, PDF base64); it is not stored. / E-Rechnung erzeugen.","inputSchema":{"type":"object","properties":{"target":{"type":"string","enum":["xrechnung-ubl","xrechnung-cii","zugferd-en16931"]},"invoice":{"type":"object","description":"Invoice data as in POST /v1/invoices/generate: number, issue_date, currency, seller{name, vat_id, contact{name, phone, email}, address{street, zip, city, country}}, buyer{name, email, buyer_reference, address}, lines[{name, quantity, unit, unit_price, vat_rate}], payment{iban, terms_days}."},"idempotency_key":{"type":"string","maxLength":200,"description":"Optional. A retry with the same key and the same input within 24 h is billed once; the work is done again and returned again - nothing is stored, only a SHA-256 of the input (any size) is kept for 24 h. The same key with other input is IDEMPOTENCY_CONFLICT; after 3 retries or 1 h a key is IDEMPOTENCY_KEY_EXHAUSTED - use a new one."}},"additionalProperties":false,"required":["target","invoice"]}},{"name":"get_credit","title":"Credit and free allowance","description":"Show the account's prepaid credit (balance, amount reserved by running transcriptions, available), the free allowance left this month per product, prices and the current rate limit. Free; call it before large jobs or after a CREDIT_EXHAUSTED error. Top-ups happen in the dashboard (Guthaben), not via MCP.","inputSchema":{"type":"object","properties":{},"additionalProperties":false}}],"resources":[],"prompts":[]}