Peppol participant lookup (SML + SMP + Peppol Directory).
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
claude mcp add mcp-peppol -- npx -y @pipeworx/mcp-peppol{
"mcpServers": {
"mcp-peppol": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-peppol"]
}
}
}MCP Servers overview
# @pipeworx/peppol
Check whether a company is registered on the Peppol e-invoicing network, list
the document types it accepts, and get the AS4 endpoint a sender needs — walked
live through the Peppol SML and SMP, with no network membership required.
Part of [Pipeworx](https://pipeworx.io) — an MCP gateway connecting AI agents to 1573+ live data sources.
## Tools
- `lookup_participant(participantId, scheme?, environment?)` — the authoritative
registration check. Resolves the participant through the SML (DNS/BDXL) to its
SMP and reads the ServiceGroup. Answers "can I send this company an e-invoice,
and in which formats?" Returns `registered: false` with a reason, plus
`determinate`, when there is no SML record.
- `get_participant_endpoint(participantId, documentTypeId, documentTypeScheme?, scheme?, environment?)`
— the AS4 delivery details for one document type: transport profile, receiving
endpoint URL, process identifier, and the service activation/expiration
window. Answers "where do I actually deliver this, and is it still live?"
- `search_participants(q, country?, limit?)` — searches the Peppol Directory by
company name, VAT number or organisation number. Answers "what is this
company's Peppol identifier?", which is the input the other two tools need.
## Auth
Keyless. All three upstreams are public and need no Peppol network membership,
no Access Point contract and no PKI certificate. Reading the network's discovery
layer is deliberately open — it is what lets any sender find any receiver.
(Note the asymmetry: *reading* discovery is open, *sending* over AS4 is not.
Delivering a document needs an accredited Access Point and a Peppol certificate.
This pack covers the read half only.)
## Data sources
- `https://cloudflare-dns.com/dns-query` and `https://dns.google/resolve` — the
SML NAPTR lookup, over DNS-over-HTTPS because the Workers runtime has no DNS
resolver. Cloudflare first, Google as fallback.
- SML zone `iso6523-actorid-upis.edelivery.tech.ec.europa.eu` (production) and
`iso6523-actorid-upis.acc.edelivery.tech.ec.europa.eu` (pilot), operated by the
European Commission — maps a participant identifier to its SMP base URL.
- Per-participant SMPs, whichever host the NAPTR names (e.g.
`https://smp.elma-smp.no`, `https://smp.horus-software.be`) — serve
`/{scheme}::{participantId}` and `/{scheme}::{participantId}/services/{docTypeId}`.
- `https://directory.peppol.eu/search/1.0/json` — the Peppol Directory, the
network's opt-in business-card index, operated by OpenPEPPOL.
### Things worth knowing before you touch this
**The MD5 lookup scheme every write-up describes is dead.** Most Peppol
documentation (and most blog posts) describe the SML as
`B-{md5(lowercased participant id)}.iso6523-actorid-upis.{zone}` resolving to a
CNAME. That NXDOMAINs today for every participant, including ones you can see
listed in the Peppol Directory. The live scheme is OASIS BDXL: the record name is
the **unpadded base32 of SHA-256** over the lowercased identifier, and the record
is a **NAPTR** whose service field is `Meta:SMP` and whose regexp field carries
the SMP URL as `!.*!https://smp.example/!`. Getting NXDOMAIN on a company you
know is registered means you are on the MD5 path, not looking at an unregistered
company — that costs an hour if you trust the docs over a live dig.
**Hash the identifier value only.** The input to SHA-256 is `0192:989995278`,
never `iso6523-actorid-upis::0192:989995278`. Including the scheme prefix
NXDOMAINs silently, which looks exactly like "not registered".
**The two DoH providers return NAPTR RDATA in different shapes.** Cloudflare
quotes the character-strings (`100 10 "U" "Meta:SMP" "!.*!https://x!" .`), Google
does not (`100 10 U Meta:SMP !.*!https://x! .`). Parse both or the fallback path
silently returns nothing.
**SMPs disagree about `Accept`.** `smp.elma-smp.no` (Spring-based) answers
**406 Not Acceptable** to `Accept: application/xml`, while
`smp.horus-software.be` serves it. Both accept `text/xml`. Send a q-list, or the
pack works against one operator's SMP and 406s against another's — and a 406 here
reads like the participant is broken rather than like our header is.
**XML prefixes vary by SMP implementation.** The same elements come back as
`smp:ServiceGroup` from one operator and `ns2:ServiceGroup` from another. Match on
local name, never on prefix.
**Absence from the Directory is not absence from the network.** Business cards
are opt-in, so `search_participants` returning nothing does not mean a company
cannot receive e-invoices. `lookup_participant` against the SML is the
authoritative answer; the Directory is a convenience index for turning names into
identifiers.
**The participant identifier is `{icd}:{value}`, and the ICD prefix is part of
it.** `989995278` is a Norwegian org number; `0192:989995278` is a Peppol
participant. The same company can appear under several ICDs (e.g. `0208` company
number and `9925` VAT for the same Belgian entity), each a separate registration
with its own document types.
## Quick Start
Add to your MCP client (Claude Desktop, Cursor, Windsurf, etc.):
```json
{
"mcpServers": {
"peppol": {
"url": "https://gateway.pipeworx.io/peppol/mcp"
}
}
}
```
### What this endpoint actually serves
`tools/list` at `https://gateway.pipeworx.io/peppol/mcp` returns the tools in the table
above **plus the shared Pipeworx meta-tools** — `ask_pipeworx`,
`discover_tools`, `search_within`, `remember`/`recall` and the rest of the
gateway-wide set. So the tool count you see is larger than this table: a
single-pack endpoint currently lists roughly 30 shared tools alongside the
pack's own. The connection's `initialize` response states its exact scope, and
is the authoritative answer for a given day.
This is deliberate, not multiplexing by accident. The meta-tools are what let a
scoped connection answer a question this pack does not cover — via
`ask_pipeworx`, which routes across the whole catalog — without you adding a
second MCP server. There is currently no way to mount a pack endpoint without
them; if the extra schemas cost you more context than the routing is worth,
connect to the full gateway once rather than to several pack endpoints.
Or connect to the full Pipeworx gateway to get every pack's tools listed
directly, instead of just this one's:
```json
{
"mcpServers": {
"pipeworx": {
"url": "https://gateway.pipeworx.io/mcp"
}
}
}
```
Both URLs reach the same gateway and the same 1573+ data sources. The
only difference is which pack's tools are listed **directly**; `ask_pipeworx`
reaches all of them from either one.
## Standalone (no gateway account)
This package also runs as a local stdio MCP server — no Pipeworx account, no
gateway round-trip:
```json
{
"mcpServers": {
"peppol": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-peppol"]
}
}
}
```
Or run it directly to confirm it starts:
```bash
npx -y @pipeworx/mcp-peppol
```
It speaks MCP over stdin/stdout and answers `initialize`/`tools/list`/`tools/call`
for **only** this pack's tools — none of the shared meta-tools the gateway
connection above adds. Same source, same tools, no ask_pipeworx routing.
## Using with ask_pipeworx
Instead of calling tools directly, you can ask questions in plain English —
this works on the pack endpoint above as well as on the full gateway:
```
ask_pipeworx({ question: "your question about Peppol data" })
```
The gateway picks the right tool and fills the arguments automatically.
## More
- [Docs and guides](https://pipeworx.io/docs)
- [pipeworx.io](https://pipeworx.io)
## License
MIT
What people ask about mcp-peppol
What is pipeworx-io/mcp-peppol?
+
pipeworx-io/mcp-peppol is mcp servers for the Claude AI ecosystem. Peppol participant lookup (SML + SMP + Peppol Directory). It has 0 GitHub stars and its last recorded update is dated 2026-09-14.
How do I install mcp-peppol?
+
You can install mcp-peppol by cloning the repository (https://github.com/pipeworx-io/mcp-peppol) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is pipeworx-io/mcp-peppol safe to use?
+
Our security agent has analyzed pipeworx-io/mcp-peppol and assigned a Trust Score of 95/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.
Who maintains pipeworx-io/mcp-peppol?
+
pipeworx-io/mcp-peppol is maintained by pipeworx-io. The last recorded GitHub activity is dated 2026-09-14, with 0 open issues.
Are there alternatives to mcp-peppol?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy mcp-peppol to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/pipeworx-io-mcp-peppol)<a href="https://claudewave.com/repo/pipeworx-io-mcp-peppol"><img src="https://claudewave.com/api/badge/pipeworx-io-mcp-peppol" alt="Featured on ClaudeWave: pipeworx-io/mcp-peppol" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ
The fastest path to AI-powered full stack observability, even for lean teams.