Jithox EU business checks
EU business checks: VAT/VIES, IBAN, Peppol, KBO lookup. 16 of 19 tools need no token.
Links
README
From the repo.
Jithox MCP — free EU e-invoice, Peppol, VAT and IBAN checks for AI agents
Jithox runs a remote MCP server with read-only checks for e-invoices and payments: Peppol BIS Billing 3.0 rule validation, Peppol participant (receiver) lookup, EU VAT number format and VIES coverage, IBAN structure, supplier bank-detail changes, and turning a CSV/XLSX file into clean data.
It is for developers and AI agents that prepare an e-invoice or a payment and want a check before something is sent, submitted to Peppol, or paid.
This repository holds examples and a registry manifest only. It contains no server code. The server itself is hosted by Jithox.
Connect
https://jithox.com/api/mcp
Transport: Streamable HTTP (POST, JSON-RPC 2.0). No auth needed for the free
tools below.
{
"mcpServers": {
"jithox": { "url": "https://jithox.com/api/mcp" }
}
}
Claude Desktop
Open Settings → Developer → Edit Config, and add the block above to
claude_desktop_config.json (macOS:
~/Library/Application Support/Claude/claude_desktop_config.json; Windows:
%APPDATA%\Claude\claude_desktop_config.json). Restart Claude Desktop. No
OAuth prompt appears — this endpoint needs no login for the free tools.
What works without an account
The endpoint lists 19 tools. 8 of them are free and need no token and no account (checked 2026-09-23, curl against production, each with a valid payload — earlier counts of "7 of 18" were stale):
| Tool | What it does |
|---|---|
check_peppol_ready | Checks an invoice against 21 published Peppol BIS Billing 3.0 rules and names each failing rule with a fix. Not the official validator. |
lookup_peppol_participant | Asks the live Peppol registers whether a given customer (by enterprise/VAT number) can receive an e-invoice today, and which document types their access point accepts. |
verify_iban | IBAN structure and check digits (ISO 13616 / ISO 7064). Never claims the account exists or who owns it. |
check_vat_list_format | Up to 20 EU VAT numbers: empty, malformed, duplicate, or not covered by VIES. Local only — does not ask the VAT register. |
check_payment_change | A supplier says their bank details changed: checks the new IBAN and says what to verify before updating the record. |
file_to_data_inspect | Reads a CSV / XLSX / JSON file and proposes a column mapping. |
file_to_data_transform | Applies exactly the mapping you send and returns rows plus a per-row error report. |
core_condition | Compares two values and returns a true/false branch. |
The other 11 tools need a Jithox bearer token and cost credits per accepted
call, among them format_peppol_invoice (generate the UBL/Peppol XML, 5
credits), kbo_company_search and check_vat_list (live VIES lookup),
review_invoice (full invoice review, 8 credits) and analyze_kbo_financials.
Called without a token they return a payment_required error that names the
token URL — nothing runs and nothing is charged.
Limits: 30 requests per minute per IP on this endpoint; above that you get
HTTP 429 with Retry-After. Every answer carries a doesNotProve field or a
stated limit — read it before you act on a result.
Three calls, all run against production on 2026-09-23
Output is shown as returned; … marks where it was shortened for this page.
1. Will Peppol accept this invoice?
curl -s https://jithox.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_peppol_ready","arguments":{"invoiceNumber":"INV-2026-0001","issueDate":"2026-09-23","currency":"EUR","buyerReference":"PO-4471","totalWithoutVat":1000,"totalVat":210,"totalWithVat":1210,"lines":[{"description":"Consulting hours","quantity":10,"unitPrice":100,"vatPercent":21}],"supplier":{"name":"Seller BV","countryCode":"BE","endpointId":"0403170701","endpointScheme":"0208"},"customer":{"name":"Buyer NV","countryCode":"BE","endpointId":"0400378485","endpointScheme":"0208"}}}}'
The tool result (result.content[0].text), unwrapped:
{
"kind": "peppol_ready_check",
"data": {
"verdict": "ready",
"failed": [],
"passed": [ … 21 rules, e.g. BR-02, PEPPOL-EN16931-R010, PEPPOL-EN16931-R003 … ],
"notChecked": [],
"summary": "Nothing is wrong among the 21 rules this check covers.",
"rulesChecked": 21,
"doesNotProve": "This checks 21 of the published Peppol BIS Billing 3.0 rules … a clean result here means nothing among these rules is wrong, not that the network will accept the document."
}
}
Change issueDate to "23/09/2026" or drop buyerReference and the same
call returns "verdict": "will_be_rejected" with the specific rule that
failed (e.g. PEPPOL-EN16931-F001, PEPPOL-EN16931-R003) — checked
2026-09-22.
2. Can this customer actually receive it over Peppol?
curl -s https://jithox.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"lookup_peppol_participant","arguments":{"identifier":"0403170701"}}}'
{
"kind": "peppol_participant_lookup",
"data": {
"participantId": "0208:0403170701",
"reachable": "yes",
"documentTypes": [
{ "profile": "Peppol BIS Billing 3.0", "document": "Invoice", "raw": "…" }
…
]
}
}
This asks the live Peppol directory about a THIRD PARTY. It is never a promise the invoice will arrive, be accepted or be paid — every answer says so.
3. Clean a list of EU VAT numbers before invoicing
curl -s https://jithox.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"check_vat_list_format","arguments":{"rows":[{"reference":"acme","vatId":"BE0400378485"},{"vatId":"NL 8558.76.323.B01"},{"vatId":"BE0400378486"},{"vatId":"GB123456789"}]}}}'
{
"kind": "vat_list_check",
"data": {
"ok": true,
"rows": [
{ "index": 0, "reference": "acme", "normalized": "BE0400378485", "local": "well_formed", "register": "not_run", … },
{ "index": 1, "normalized": "NL855876323B01", "local": "well_formed", "register": "not_run", … },
{ "index": 2, "normalized": "BE0400378486", "local": "malformed", "register": "not_run",
"detail": "The last two digits of a Belgian number are a check on the first eight, and here they do not match — usually a typing error. The register was not asked." },
{ "index": 3, "normalized": "GB123456789", "local": "not_covered", "register": "not_run",
"detail": "Great Britain left the EU register (VIES) in 2021, so this number cannot be checked here." }
],
"totals": { "rows": 4, "wellFormed": 2, "malformed": 1, "notCovered": 1, "duplicate": 0, … },
…
}
}
well_formed is not registered: this tool never asks the VAT register (that
is check_vat_list, a paid tool).
Examples in code
examples/python/peppol_ready.py— standard library only:initialize, thencheck_peppol_readyon a compliant invoice, thenlookup_peppol_participanton the buyer. Run withpython examples/python/peppol_ready.py. Real output against production, 2026-09-23:server: jithox-engine verdict: ready - Nothing is wrong among the 21 rules this check covers. reachable: yes participant: 0208:0403170701examples/python/free_tools.py— standard library only:initialize,tools/list, thenverify_iban.examples/csharp/Program.cs—HttpClient:initialize, thencheck_vat_list_format. Runs withdotnet runin a console project, orcsc -r:System.Net.Http.dll Program.cson .NET Framework 4.x.
Machine-readable pointers
- https://jithox.com/llms.txt
- https://jithox.com/.well-known/mcp.json
server.jsonin this repository, following the official MCP registry schema (2025-12-11). The server is also published in the official MCP registry ascom.jithox/jithox(registry.modelcontextprotocol.io/v0/servers?search=com.jithox/jithox).
What this server does not do
Nothing on this endpoint sends an invoice, submits it to Peppol, posts, pays or delivers anything. Results are technical checks, not legal or tax advice.
License
The examples and files in this repository are MIT-licensed (see LICENSE). The Jithox service itself is not open source.
Config for your environment
Use the endpoint URL below in your config. No API key — you connect directly.
Tool
OS
Config file: ~/.cursor/mcp.json
{
"mcpServers": {
"mcp-server": {
"url": "https://jithox.com/api/mcp"
}
}
}Paste into mcpServers in the config file. Restart Cursor after saving.
If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.