# getpeppr

> Peppol e-invoicing: look up participants, validate invoices, and send sandbox test invoices.

- name: dev.getpeppr/mcp
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 96/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/dev.getpeppr%2Fmcp
- tools: https://api.protogrid.dev/v1/servers/dev.getpeppr%2Fmcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "getpeppr": {
      "type": "http",
      "url": "https://api.getpeppr.dev/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-1d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 96/100 (new)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: 100 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- pass `auth.cimd`: Client ID Metadata Documents supported
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 7 of 7 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,024 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 1 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 7, about 2,024 tokens to load them all
- tool set hash: a06fb95cfccdfaaf8e27392dac1f01af
- tools last changed: 2026-10-20T16:55:50.806Z
- badge: [![protogrid quality](https://protogrid.dev/badge/dev.getpeppr/mcp.svg)](https://protogrid.dev/servers/dev.getpeppr/mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-20 `validate_invoice` changed (inputSchema)
- 2026-10-20 `validate_invoice` changed (description, inputSchema)
  - before: Validates a Peppol BIS Billing 3.0 UBL document against the Peppol rules, or a getpeppr invoice JSON against the SDK rules, and explains each violation. It does not check whether the invoice can be sent.
  - after: Validates a Peppol BIS Billing 3.0 UBL document against the Peppol rules, or a getpeppr invoice JSON against the SDK rules, and explains each violation. It does not check whether the invoice can be sent. Send sample or test invoices only, never a real invoice or real people's data.

Full history: https://api.protogrid.dev/v1/servers/dev.getpeppr%2Fmcp/changes

## Remotes

- https://api.getpeppr.dev/mcp (streamable-http, auth none, reachable true, uptime30d 1)
- https://api.getpeppr.dev/mcp/auth (streamable-http, auth oauth2, reachable true, uptime30d 1)

## Packages

_none_

## Tools (7)

- `create_test_customer`: Platform accounts only: creates a test customer (sub-tenant legal entity) in the getpeppr sandbox and returns its registration state. Up to 10 active test customers per account; identifier rules per country: https://getpeppr.dev/docs/platform/legal-entities/. Calling it again with the same arguments returns the same test customer with its current status, never a second one. Pass the returned legalEntity.id as sender.legalEntityId to send_test_invoice once its status allows sending. Requires the admin role and signing in to getpeppr.
- `get_document_status`: Returns the status and lifecycle events of a sandbox document sent from your getpeppr account; call it with the documentId send_test_invoice returned. submitted: getpeppr accepted it. delivered: the test receiver's access point received it, the goal of a sandbox test. failed: final, with a failureCategory. In application code, subscribe to webhooks instead of polling. Requires signing in to getpeppr.
- `lookup_participant`: Says whether a Peppol identifier (scheme:identifier) is registered to receive documents on the production Peppol network, and which ones. A sandbox test customer is never on it, and send_test_invoice only targets the test receiver 9925:BE0314595348 whatever this answers.
- `plan_integration`: Returns the integration steps, code snippets and documentation links for adding Peppol to an application, for a single sender or for a platform that sends on behalf of its customers.
- `search_docs`: Searches the prose of the public getpeppr documentation and returns up to 5 matching pages, each with its url and a short excerpt. Excerpts carry no code: open the returned url, or call plan_integration, for code.
- `send_test_invoice`: Sends an invoice in the getpeppr sandbox to the Belgian test receiver 9925:BE0314595348, for your own company or for one of your test customers. Never sends a real invoice. Lines without tax fields get your account's sandbox tax profile. While your sandbox tax profile is unchanged, calling it again with the same arguments returns the same document, never a second one. Returns a documentId to pass to get_document_status. Requires signing in to getpeppr.
- `validate_invoice`: Validates a Peppol BIS Billing 3.0 UBL document against the Peppol rules, or a getpeppr invoice JSON against the SDK rules, and explains each violation. It does not check whether the invoice can be sent. Send sample or test invoices only, never a real invoice or real people's data.
