Skip to content

MCP Server

Let your AI assistant look up Peppol participants, validate invoices, plan your integration and send sandbox test invoices — through the same public API your code uses.

getpeppr hosts a Model Context Protocol server. Nothing to install: add the address to your assistant. Four tools work without an account; the three that act for your account ask you to sign in to getpeppr the first time you use one.

Sandbox only. The MCP server never sends in production. Test invoices go to the Peppol test receiver, and a production key (sk_live_…) is refused: keep it out of your assistant's configuration.

Connect your assistant

Claude Code

Terminal
claude mcp add --transport http getpeppr https://api.getpeppr.dev/mcp

The public tools work at once. When you first call an account tool, run /mcp in Claude Code and sign in to getpeppr.

Codex

Terminal
codex mcp add getpeppr --url https://api.getpeppr.dev/mcp

Run codex mcp login getpeppr to sign in before using the account tools.

Cursor

.cursor/mcp.json
{
  "mcpServers": {
    "getpeppr": { "url": "https://api.getpeppr.dev/mcp/auth" }
  }
}

Cursor uses a second address, https://api.getpeppr.dev/mcp/auth, which asks you to sign in when you connect: Cursor does not open a sign-in page when a tool asks for one later.

Signing in uses your getpeppr account (no API key to copy). You choose the organisation the assistant acts for. No account yet? Create a free sandbox account. You can also pass a sandbox API key as a bearer token instead of signing in.

Tools

ToolAccountWhat it does
lookup_participant
Look up a Peppol participant
NoWhether an identifier is registered on the production Peppol network, with which provider, and what the directory says about it.
validate_invoice
Validate an invoice
NoA UBL document against the official Peppol rulebooks, or an SDK-shaped JSON invoice against the SDK's rules. Says whether the document conforms — never whether getpeppr would send it.
plan_integration
Plan a getpeppr integration
NoThe steps for your case (your own company, or a platform sending for customers) and your countries, with the docs to read.
search_docs
Search the getpeppr documentation
NoUp to five pages of these docs, each with a short prose excerpt; the page itself holds the code.
create_test_customer
Create a sandbox test customer
Yes — writes (sandbox)Platform accounts: a sandbox customer company (sub-tenant legal entity), through POST /v1/legal-entities. The same arguments again return the same company and its current status.
send_test_invoice
Send a sandbox test invoice
Yes — writes (sandbox)A sandbox invoice to the Peppol test receiver 9925:BE0314595348, through POST /v1/invoices. Lines without tax fields get your account's sandbox tax profile; while that profile is unchanged, the same arguments again return the same document, never a second one.
get_document_status
Get a document's status
Yes — readsThe status of one of your documents, the category of a failed delivery, and its event timeline (types and times only).

Limits

  • Writes are sandbox only. send_test_invoice sends only to 9925:BE0314595348; any other receiver is refused.
  • No reception test. The MCP server sends and reads; receiving invoices is tested with webhooks.
  • Public tools are rate limited, per network address and per minute: 20 lookups, 10 validations, 30 plans and 30 searches; lookups are also capped at 30 a minute across all callers, and at most 20 public calls run at once. Over a limit, the tool answers mcp.rate_limited.
  • Validation size: a UBL document up to 1 MiB, a JSON invoice up to 500 lines. A JSON validation does not run the national rules some countries apply when you send; the answer names them.
  • Account tools are rate limited per account: 30 test invoices an hour, 10 test customers a day and 30 status reads a minute. Over a limit, the tool answers mcp.rate_limited.
  • Every account tool goes through the public API with a key of your organisation, so its errors and history are the API's. The MCP agent key has its own request budget, so an assistant never uses up the quota of your production integration.
  • Temporarily off: getpeppr can turn the MCP tools off without notice to protect the service; they then answer mcp.temporarily_disabled. The API itself is not affected.

What your assistant is told

When it connects, your assistant receives the journey to a first delivered test invoice, so it can lead you through it:

  1. plan_integration gives the steps and code for your case; search_docs finds the pages to read.
  2. validate_invoice and lookup_participant need no account.
  3. You create a free account and register your own company; the account tools then ask you to sign in.
  4. send_test_invoice delivers to the test receiver 9925:BE0314595348. Platform accounts first create a test customer and send as it.
  5. get_document_status follows the document until it is delivered or failed.
  6. Going live (an sk_live_ key, real receivers, webhooks) happens in the console and in your code, never through the MCP server.

Every tool result carries a code from the result catalogue and a sentence saying what to do next; a refusal by the API also carries the API's reason and, when the API names one, the rule that failed.

The MCP agent key

When you connect by signing in, getpeppr acts for your organisation with a sandbox API key named MCP agent — sandbox, listed on the console's API keys page. Any member of the organisation can use it through their assistant. It cannot archive a customer company or request an attestation, and it cannot exist in production.

  • Turn it off: an organisation admin can switch off AI assistants (MCP) on the API keys page, or revoke the key, which does the same; a member cannot. Connected assistants stop acting for the organisation at once.
  • Roles follow your organisation: when you sign in, creating a test customer needs the admin role. A role change or a removed member takes effect within a minute.