← Discover MCPs and Agents
J
MCPDeveloper toolsMCP Registry

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):

ToolWhat it does
check_peppol_readyChecks 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_participantAsks 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_ibanIBAN structure and check digits (ISO 13616 / ISO 7064). Never claims the account exists or who owns it.
check_vat_list_formatUp to 20 EU VAT numbers: empty, malformed, duplicate, or not covered by VIES. Local only — does not ask the VAT register.
check_payment_changeA supplier says their bank details changed: checks the new IBAN and says what to verify before updating the record.
file_to_data_inspectReads a CSV / XLSX / JSON file and proposes a column mapping.
file_to_data_transformApplies exactly the mapping you send and returns rows plus a per-row error report.
core_conditionCompares 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, then check_peppol_ready on a compliant invoice, then lookup_peppol_participant on the buyer. Run with python 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:0403170701
    
  • examples/python/free_tools.py — standard library only: initialize, tools/list, then verify_iban.
  • examples/csharp/Program.csHttpClient: initialize, then check_vat_list_format. Runs with dotnet run in a console project, or csc -r:System.Net.Http.dll Program.cs on .NET Framework 4.x.

Machine-readable pointers

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.