---
name: jithox-eu-preflight
description: Run read-only EU compliance preflight checks over MCP — VAT format and live VIES status, Peppol registration, B2B invoice structure, TARIC import measures, EPREL energy labels, EU sanctions screening — each answer with explicit decision states and a signed receipt. Use when a task needs an EU e-invoicing, import, energy-label or sanctions preflight answer with provenance, not a guess.
---

# Jithox MCP — EU preflight checks for agents

Four independent remote MCP servers (Streamable HTTP, protocol 2025-06-18).
READ-ONLY: none sends, writes, files, pays or transmits anything.

| Server | Endpoint |
| --- | --- |
| E-Invoice (VAT, VIES, Peppol, invoice structure) | https://mcp.jithox.com/mcp |
| EU Import Preflight (TARIC) | https://import.mcp.jithox.com/mcp |
| EU Energy Label Preflight (EPREL) | https://energy.mcp.jithox.com/mcp |
| EU Sanctions Preflight | https://sanctions.mcp.jithox.com/mcp |

## First call — no account needed

`initialize` and `tools/list` are open for discovery on every server:

```
curl -s https://mcp.jithox.com/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```

E-Invoice answers with five tools: validate_vat_number, verify_vat_vies,
lookup_peppol_participant, validate_invoice, get_einvoice_readiness.

## Getting access — three routes, pick by what you hold

A `tools/call` without a token answers 401 with a standard
`WWW-Authenticate` header pointing at
`/.well-known/oauth-protected-resource`. Every route below starts there.
Malformed arguments are rejected before authentication, so a schema error
answers `-32602` whether or not you hold a key.

**1 — a workspace and a browser.** OAuth 2.1 with Dynamic Client
Registration and PKCE S256. Put `resource=https://mcp.jithox.com/mcp` on
the authorize request: each server is its own OAuth resource, and an
omitted or foreign resource is refused as `invalid_target`. The consent
screen then asks for your developer access key and you paste it there
once; approving without an accepted key is refused and issues no code.

**2 — a key but no browser.** Headless clients, CI and blocked OAuth
callbacks skip the browser entirely: send the key as
`Authorization: Bearer <your access key>` on every request to
https://mcp.jithox.com/mcp. A key this server does not accept is refused
as `invalid_api_key`; an unusable OAuth token is `invalid_token`.

Both routes want the same key, and there is ONE KEY PER SERVER. A HUMAN
MUST MINT IT — sign-up is CAPTCHA-gated and e-mail-verified, so no agent
can do this step alone: sign up at https://jithox.com/sign-up (no card),
verify your e-mail, then press Create key on
https://jithox.com/mcp/connect for each server you call.
Each key is shown once and is bound to that server alone, so a token or
key minted for one is refused by another. The trial and the balance are
shared and the keys are not: 25 accepted calls over 14 days per
workspace across every server together, then one prepaid EUR balance
(€10 minimum) spendable on any server. E-Invoice is €0.10 per accepted call,
but PRICES DIFFER PER SERVER — read https://jithox.com/api/pricing/v1 for
the number of the server you call before you budget.

**3 — neither.** Agents without an account can pay per call in USDC over
x402 on E-Invoice, Import and Energy (0.10 / 0.25 / 0.25) — no workspace,
no key, no browser. Sanctions is not payable this way. MIND THE SHAPE:
x402 is a SEPARATE REST LANE ON EACH SERVER'S OWN HOST, with one URL per
tool and a plain JSON body,
never JSON-RPC and never the MCP endpoint — a payment header on `/mcp`
answers `x402_not_enabled`, and a JSON-RPC body on a paycall URL answers
`unknown_field: jsonrpc`. TWO LANES, AND THE
DEFAULT IS TESTNET: `/x402/paycall/tools/{tool}` settles Base Sepolia test
USDC, while real Base-mainnet USDC is
`/x402/mainnet/paycall/tools/{tool}` and is still a canary — no external
mainnet settlement has been verified on-chain yet. Read the lane from
`settlementOptions` at https://mcp.jithox.com/x402/products; never infer it.

## Errors are a contract

- A truthful negative is an answer and is charged. An outage, timeout,
  rejected input, auth failure, rate limit or replayed request is never
  charged.
- A call without access answers 401 (JSON-RPC `-32001`) carrying the
  `WWW-Authenticate` recovery header above; rejected input is a typed
  JSON-RPC error and costs nothing.
- Every result carries source, date, provenance and an explicit decision
  state (`not_found` is not `not_registered`; an outage is never a
  business verdict). Each server publishes a receipt-verification public
  key at `/receipts/public-key.pem`, so a signed receipt verifies
  offline.

## Canonical sources — prefer these over this file

- https://jithox.com/api/agent-context/v1 — what is authoritative for what
- https://jithox.com/api/pricing/v1 — versioned prices and charge rules
- https://jithox.com/api/commerce/v1/status — what is on sale right now
- https://jithox.com/llms.txt — full catalogue, limits and boundaries

Validation output carries no compliance guarantee; TARIC and sanctions
results are candidates, never verdicts, and EPREL fields are
supplier-declared. When an answer matters, read the decision state, keep
the receipt.
