Skip to content

Quickstart

From nothing to a verified tool call with a signed receipt. No card, no application, no approval — 25 free accepted calls over 14 days, once for your workspace across every product.

Free to start

You are charged per accepted call. A failure, a refusal, a rate limit or an unavailable source costs €0,00 and never consumes a free call.

One connection, four steps

You do not create a key per server. One Jithox connection reaches every live tool and the free Labs tools; the credential is shown once on your account page and travels only as a bearer header.

  1. 1Endpoint

    POST https://jithox.com/api/agent-connection/v1/mcp — Streamable HTTP, JSON answers, MCP 2025-06-18. initialize and tools/list need no credential.

  2. 2Authenticate

    Authorization: Bearer <PASTE_YOUR_JITHOX_CONNECTION> — the connection credential from /mcp/account, or a ten-minute token from https://jithox.com/api/oauth/token (client_credentials: client_id = connection id, client_secret = the credential).

  3. 3Call

    tools/call with the tool name exactly as listed and an x-jithox-idempotency-key; only an accepted answer is charged, at the price the tool's description states.

  4. 4Receipt

    _meta.receipt (the server's signed receipt) and _meta.jithoxConnection.receiptReference in every accepted answer; your account page lists them.

The shortest working configuration for your client

Official endpoint, a safe placeholder, the minimum fields — and the exact status of each snippet. CERTIFIED means a real client completed a call on production; nothing is CERTIFIED yet.

CONFIG_READYLoaded by Claude Code against a local production build on 2026-09-06 (Connected). Not yet run on production with a real credential.

Run it once in a terminal where Claude Code is installed, with the credential from your account page in place of <PASTE_YOUR_JITHOX_CONNECTION>. Claude Desktop: Settings → Connectors → Add custom connector with the endpoint and the same Authorization header.

claude mcp add --transport http jithox https://jithox.com/api/agent-connection/v1/mcp --header "Authorization: Bearer <PASTE_YOUR_JITHOX_CONNECTION>"

Claude Desktop and Claude Code speak MCP over Streamable HTTP with OAuth.

The public terminal package is currently unavailable. Use the native client configuration above. How the Connect Kit works

One safe test

First list the tools (free, no credential), then one read-only accepted call with a public company VAT number. Replace the placeholder with your own credential; never paste a credential anywhere else.

curl -sS https://jithox.com/api/agent-connection/v1/mcp \
  -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
curl -sS https://jithox.com/api/agent-connection/v1/mcp \
  -H "Authorization: Bearer <PASTE_YOUR_JITHOX_CONNECTION>" \
  -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -H 'x-jithox-idempotency-key: first-call-1' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"validate_vat_number","arguments":{"vatNumber":"BE0403170701"}}}'

Every refusal names its way out

A stable code, a plain explanation, the safe next step, the human page, and a machine-readable action in error.data.recovery. The same words the funnel records.

CodeJSON-RPCWhat happenedNext stepAction
parse_error-32700The body was not valid JSON.Send one JSON-RPC 2.0 object per POST. pagefix_request
invalid_request-32600The request is not a JSON-RPC 2.0 object, or it is a batch or too large.Send one object with jsonrpc, id, method and params, under 64 KB. pagefix_request
method_not_found-32601This gateway serves initialize, ping, tools/list and tools/call only.Use tools/list to see what exists, then tools/call. pagefix_request
invalid_params-32602The tool refused the arguments before running anything. Nothing was charged.Read data.issues, fix the arguments, and call again with a new idempotency key. pagefix_request
unauthorized-32001No valid Jithox connection credential was presented, or the connection is revoked or expired.Create a connection on the account page and send it as Authorization: Bearer. pagecreate_connection
not_entitled-32002The tool is not on sale right now, or the server refused the call for this workspace. Nothing was charged.Choose a live tool from tools/list, or ask the owner to check the workspace on the account page. pagechoose_another_tool
insufficient_scope-32003This connection does not carry the scope the tool needs.Ask the owner for a connection that carries it; the challenge header names the scope. pageask_owner
budget_exceeded-32004The per-call or daily budget of this connection would be exceeded. Nothing was charged.Ask the owner to raise the budget on the account page, or wait for the next UTC day. pageask_owner
rate_limited-32005Too many requests from this origin in one minute.Wait for the Retry-After window and try again. pageslow_down
replayed_request-32006This idempotency key was already used on this connection; the earlier outcome stands and nothing ran twice.Read data.earlier_outcome; to run again on purpose, use a new idempotency key. pagenew_idempotency_key
tool_not_found-32010No tool with this exact name exists on this gateway.Use the names from tools/list exactly as listed. pagechoose_another_tool
upstream_unavailable-32011The server that owns the tool did not answer. Nothing ran and nothing was charged.Try again in a moment with a new idempotency key. pageretry_later
store_unavailable-32012The connection store or the key vault is not answering, so budgets and keys cannot be checked. Nothing ran and nothing was charged.Try again shortly. pageretry_later
credential_unavailable-32013This connection holds no server key for the product yet.Open the account page: the connection can create one, or replace a key made by hand — never silently. pagecheck_connection

Prefer the guided route? The Setup Doctor asks which AI you use, hands you the same snippet and checks what you pasted. The steps below are the long way: one key per server, which still works.

The long way: one key per server

1Discover what exists and what it costs — no account

Two public documents, no key and no account. The first lists every server, its endpoint and its tools and says which are publicly available; the second is the only price that counts, per product and per tool, with the free allowance and the rules for what is charged.

curl -sS https://jithox.com/api/capabilities/v1

curl -sS https://jithox.com/api/pricing/v1

If you are an agent rather than a person, the agent context names every canonical document and what each is authoritative for, and SKILL.md is the same onboarding as an instruction file you can load.

2Create an account and a key

Sign up, verify your e-mail, then create an MCP credential from your dashboard. The credential is shown once — copy it immediately. If you lose it, rotate it; you never have to pay twice and your balance is untouched by a rotation.

One key per server, created on that server’s connect page and shown once:

3Point your MCP client at the endpoint

Each product is its own MCP server with its own OAuth resource, so a token minted for one is refused by another. That is deliberate: a credential cannot spend somewhere you did not intend.

ProductMCP endpoint
Jithox E-Invoicehttps://mcp.jithox.com/mcp
EU Import Preflighthttps://import.mcp.jithox.com/mcp
EU Energy Label Preflighthttps://energy.mcp.jithox.com/mcp
EU Counterparty Sanctions Preflighthttps://sanctions.mcp.jithox.com/mcp

Authentication is OAuth 2.1 with PKCE (S256, mandatory). Your client discovers the authorization server from /.well-known/oauth-protected-resource and registers itself — you paste your access key once on the consent screen, and the client keeps a refreshing connection. Discovery below needs none of that; a paid tool call does.

4List the tools — copy, paste, run (no key needed)

Discovery is open on every server: initialize and tools/listneed no token and cost nothing. These two commands run in a bare terminal exactly as written — swap the URL for another product’s endpoint from the table above to explore it instead.

curl -sS https://mcp.jithox.com/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"quickstart","version":"1"}}}'

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

initializereturns the server’s name and protocol version; tools/list returns the tools and their input schemas. Both answer with plain JSON — there is no session header to carry between requests.

5Make your first call — from an MCP client, or from a terminal

A tool call spends a free call or balance, so it needs your key. An MCP client exchanges it for an OAuth token on the consent screen; a terminal sends the key itself as a bearer token and needs no browser. Every client needs the same thing — the endpoint. In VS Code that is .vscode/mcp.json:

{
  "servers": {
    "jithox-einvoice": {
      "type": "http",
      "url": "https://mcp.jithox.com/mcp"
    }
  }
}

Claude Desktop has no file for remote servers — open Settings → Connectors → Add custom connector and paste the same URL. Whatever the client, it discovers the authorization server, registers itself, and opens a consent screen where you paste your access key once. The connect page has the exact steps for VS Code, Cursor, Claude Desktop and any generic client.

A structural VAT check is the fastest way to see the whole path — decision, evidence and a signed receipt. Ask your client to run validate_vat_number on BE0403170701. From a terminal it is one JSON-RPC request carrying your key as a bearer token. In Bash or Zsh the key is read into $JITHOX_ACCESS_KEY silently, so it never lands in shell history:

# Bash/Zsh (read -rs is not POSIX sh). Paste the key when prompted; it is read silently and never lands in shell history.
read -rs JITHOX_ACCESS_KEY && export JITHOX_ACCESS_KEY

curl -sS https://mcp.jithox.com/mcp \
  -H "Authorization: Bearer $JITHOX_ACCESS_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"validate_vat_number","arguments":{"vatNumber":"BE0403170701"}}}'

# Clear the key from this shell when you are done:
unset JITHOX_ACCESS_KEY

The result carries a machine-readable decision state, the evidence behind it, and a _meta.receiptyou can verify offline against the server’s published public key. Without a key this exact call returns 401 and runs nothing; a key this server does not accept is refused as invalid_api_key. Neither is ever charged.

6Know what a call costs before you make it

Prices are server-side and per accepted call. Your client never sends an amount, and nothing a client says can change a price.

ProductPrice per accepted callTools
einvoice€0,105
eu-import-preflight€0,255
eu-energy-label-preflight€0,255
eu-sanctions-preflight€0,505

Every row here is read from the running price catalog at request time, so the products shown are exactly the ones on sale right now. If an official source is down, that product’s calls return a truthful unavailable and cost €0,00 — the price is what a call costs, not a promise the source is up this second.

7When the free calls run out

The server answers 402 payment_required with a typed payment_required object on the error: the product and tool, why (budget_exhausted or entitlement_required), the amount required in cents, your remaining free calls, and the pricing and checkout URLs to act on. chargeable is always false: it does not execute, does not charge, and does not upgrade you to anything. Add prepaid credit and repeat the same call.

  • One balance covers every product — spend it wherever you like.
  • Credit does not expire and there is no automatic top-up.
  • Tax is charged on top of credit and is never spendable.
  • A refund reverses credit; it never creates a negative balance.

8Keep the receipt, and verify it without asking us

Every accepted call answers with _meta.receipt: an Ed25519 signature over what was asked, what was answered and when. The public key is published separately from the receipt, so verifying one is a local computation — the receipt verification guide walks through it with the exact commands.

# The key that signs this server's receipts (every server publishes its own):
curl -sS https://mcp.jithox.com/receipts/public-key.pem

Your calls and every receipt they produced are also listed on your usage page.

Troubleshooting

You seeWhat it means
401No valid token. Re-run the OAuth flow; your client should do this for you.
403The token is valid but not for this resource or scope — check you are calling the product you authorized.
404 / 405Wrong URL or method. The endpoint answers POST at the paths above; a plain browser GET returning 405 is the server working, not an outage.
402 payment_requiredFree calls used up and the balance cannot cover this call. Add credit and retry the same request.
429 rate_limitedToo many calls too quickly. Honour the retry-after header; nothing was charged.
503 canary_disabledThe operator paused this server. Nothing was executed and nothing was charged.
unavailable / source_unavailableAn upstream official source did not answer. You get a truthful non-answer, never a guess, and it costs €0,00.
Credential rejected after rotationThe old credential is contained on purpose. Use the new one; your balance and free calls are unchanged.

Something not covered here? Contact — include the correlation id from the error body and we can trace the exact call.

These figures are read from the running price catalog at request time, so this page cannot promise a price the server does not charge.