{"name":"net.inkvoice/inkvoice","slug":"inkvoice","title":"InkVoice — XRechnung & E-Invoicing","description":"Create and validate XRechnung (EN 16931), check Leitweg-IDs, calculate German VAT.","url":"https://mcp.market/server/inkvoice","rating":null,"grade":"C","score":67,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":null,"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://inkvoice.net/mcp","version":"1.0.1","remotes":[{"type":"streamable-http","url":"https://api.inkvoice.net/mcp","headers":[{"description":"Optional. A personal access token from InkVoice Settings, as 'Bearer inkv_...'. Without it the four anonymous e-invoicing tools are available; with it, your clients and invoices as well.","isSecret":true,"name":"Authorization"}]}],"packages":[],"tools":[{"name":"calculate_vat","description":"Converts between net, tax and gross for a given VAT rate, in either direction.\n\nGive an amount and say whether it is net or gross, and you get all three figures back\nrounded to the cent. Germany's rates are 19 % (standard) and 7 % (reduced), but any\nrate from 0 to 100 is accepted, so this also works for an Austrian or French invoice.\n\nRounding is half-away-from-zero, the convention invoices and tax authorities use, and\nthe three returned figures always reconcile: net plus tax equals gross exactly, with\nno cent left over from rounding each separately.\n\nWhat this does NOT do: it does not decide which rate applies to a supply, handle more\nthan one rate at a time, or know anything about reverse charge, intra-community supply\nor the Kleinunternehmer rules. It is arithmetic, not tax advice.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"amount":{"description":"The amount to convert, in the invoice currency. Must not be negative.","type":"number"},"rate":{"description":"VAT rate as a percentage, not a fraction: 19 means 19 %, not 1900 %.","type":"number"},"basis":{"description":"Whether `amount` is the net figure (add tax to it) or the gross figure (take tax out of it).","type":"string","enum":["Net","Gross"]}},"required":["amount","rate","basis"]}},{"name":"check_leitweg_id","description":"Checks a German Leitweg-ID — the routing identifier that goes in BT-10 of an\nXRechnung to a public authority. An invoice to a German public body with a wrong or\nmissing Leitweg-ID is rejected, so this is worth checking before building a document.\n\nIt verifies the structure (Grobadressierung of 2 to 12 digits, an optional\nFeinadressierung of up to 30 alphanumerics, then two check digits) and recomputes the\nISO/IEC 7064 MOD 97-10 check digit, the same procedure an IBAN uses. When the check\ndigits are wrong it returns the ones the address parts actually imply, so the value\ncan be corrected rather than merely rejected. It also names the Bundesland the leading\ntwo digits point at, or Bund for the federation.\n\nOne real limit: the check digit is computed over the address parts with the hyphens\nremoved, which is what KoSIT specifies, so it CANNOT detect a hyphen in the wrong\nplace. '04011000-1234512345-06' and '040110001-234512345-06' both pass. That is the\nspecification's behaviour, not a defect here.\n\nWhat this does NOT do: it does not confirm that the ID belongs to a real authority or\nthat they are reachable. It checks the number, not the recipient — there is no\ndirectory lookup.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"leitwegId":{"description":"The Leitweg-ID, e.g. '04011000-1234512345-06'. Surrounding whitespace is ignored.","type":"string"}},"required":["leitwegId"]}},{"name":"create_xrechnung","description":"Builds a German XRechnung 3.x electronic invoice (EN 16931, CII syntax) from invoice\ndetails and returns the XML as text. This is the format German public-sector buyers\nare legally required to receive, and that many private B2B buyers now ask for.\n\nThe EN 16931 business rules are checked before anything is built, and a rejected call\ncomes back naming the rules that failed and the business term (BT-xx) each concerns.\nThe ones worth getting right up front: tax category S requires a rate above 0 %,\ncategories Z, E and AE require exactly 0 %, E and AE additionally require a stated\nexemption reason (BT-120), and both parties need an email address because XRechnung\nmakes the electronic address (BT-34, BT-49) mandatory. For a public-sector buyer, put\ntheir Leitweg-ID in buyerReference (BT-10) — check_leitweg_id will verify it first.\n\nWhat this does NOT do:\n- It does not validate against the KoSIT Prüftool. It applies our reading of EN 16931,\n  which is not the same thing as the Schematron suite a receiving portal runs. Use\n  validate_einvoice for a second look, and the official validator before a deadline.\n- It does not produce ZUGFeRD or Factur-X. There is no PDF and no embedded XML — this\n  is a bare XML file.\n- It handles ONE tax rate and one tax category for the whole invoice. A document\n  mixing 19 % and 7 % lines is not expressible here.\n- It does not send the invoice anywhere, and there is no Peppol.\n\nNothing is stored: no account, no invoice record, no retained personal data.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"invoice":{"description":"The invoice to turn into an XRechnung document.","type":"object","properties":{"number":{"type":"string"},"issueDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"currency":{"type":"string"},"taxRate":{"type":"number"},"taxCategoryCode":{"type":"string"},"seller":{"type":"object","properties":{"name":{"type":"string"},"contactName":{"type":["string","null"],"default":null},"phone":{"type":["string","null"],"default":null},"email":{"type":["string","null"],"default":null},"addressLine":{"type":["string","null"],"default":null},"postalCode":{"type":["string","null"],"default":null},"city":{"type":["string","null"],"default":null},"country":{"type":["string","null"],"default":null},"taxNumber":{"type":["string","null"],"default":null}},"required":["name"]},"buyer":{"type":"object","properties":{"name":{"type":"string"},"contactName":{"type":["string","null"],"default":null},"phone":{"type":["string","null"],"default":null},"email":{"type":["string","null"],"default":null},"addressLine":{"type":["string","null"],"default":null},"postalCode":{"type":["string","null"],"default":null},"city":{"type":["string","null"],"default":null},"country":{"type":["string","null"],"default":null},"taxNumber":{"type":["string","null"],"default":null}},"required":["name"]},"lines":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"quantity":{"type":"number"},"unitPrice":{"type":"number"}},"required":["description","quantity","unitPrice"]}},"taxExemptionReason":{"type":["string","null"],"default":null},"reference":{"type":["string","null"],"default":null},"buyerReference":{"type":["string","null"],"default":null},"notes":{"type":["string","null"],"default":null},"bankName":{"type":["string","null"],"default":null},"iban":{"type":["string","null"],"default":null},"bic":{"type":["string","null"],"default":null}},"required":["number","issueDate","dueDate","currency","taxRate","taxCategoryCode","seller","buyer","lines"]}},"required":["invoice"]}},{"name":"validate_einvoice","description":"Reads an existing electronic invoice and reports what is wrong with it. Accepts\nXRechnung and ZUGFeRD XML in either EN 16931 syntax — CII (used by XRechnung and\nZUGFeRD) and UBL — and reports the syntax and profile it found along with the\ninvoice's key fields, so it also answers \"what is this file?\".\n\nIt checks the rules behind most real rejections: BT-10 buyer reference present, and\nits Leitweg-ID check digit when it looks like one; BT-34 and BT-49 electronic\naddresses present; tax category S not used at 0 %; BT-120 exemption reason present\nfor categories E and AE; line amounts summing to BT-106; net plus tax equalling the\nBT-112 gross; BT-115 amount due matching gross less prepaid; and the due date not\nfalling before the issue date.\n\nWhat this does NOT do:\n- It is NOT the KoSIT Prüftool and is not a substitute for it. It covers the rules\n  that account for most rejections, not the full EN 16931 Schematron suite. A file\n  that passes here can still be rejected by a Rechnungseingangsportal.\n- It does not check the XSD schema, so a structurally invalid document may parse here.\n- It reads XML only. A ZUGFeRD PDF must have its embedded XML extracted first — pass\n  the XML, not the PDF.\n\nNothing is stored: the document is parsed in memory and discarded.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"xml":{"description":"The full XML text of the invoice. For ZUGFeRD, the XML extracted from the PDF, not the PDF itself.","type":"string"}},"required":["xml"]}}],"scan":{"score":67,"grade":"C","scanned_at":"2026-09-19T09:58:00.246Z","report":{"scannerVersion":"0.1.3","scannedAt":"2026-09-19T09:58:00.197Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1792ms"]},"poisoning":{"score":15,"max":15,"notes":["4 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://api.inkvoice.net/mcp","reachable":true,"authRequired":false,"latencyMs":1792,"serverInfo":{"name":"inkvoice","version":"1.0.1"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://inkvoice.net/favicon.svg","source":"registry"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}