Peppol について
Peppol参加者を調べるMCPサーバーで、電子請求書の送信先確認が必要なシステム向けです。SML、SMP、Peppol Directoryから登録状況、対応文書タイプ、AS4エンドポイントを取得します。
主な機能
- 01参加者の登録状況確認
- 02対応文書タイプの一覧
- 03AS4配信エンドポイント取得
- 04企業名やIDでの検索
活用シーン
- 01企業が電子請求書を受信可能か確認
- 02請求書に対応する文書形式の特定
- 03配信に必要なAS4アドレスの確認
MCP 対応
Peppol参加者の検索、登録状況確認、エンドポイント取得をMCPツールとして提供します。ローカルのstdio MCPサーバーとしても実行できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://gateway.pipeworx.io/peppol/mcpclaude mcp add --transport http pipeworx-io-peppol https://gateway.pipeworx.io/peppol/mcp{"mcpServers":{"pipeworx-io-peppol":{"type":"http","url":"https://gateway.pipeworx.io/peppol/mcp"}}}Cursor で開く{"servers":{"pipeworx-io-peppol":{"type":"http","url":"https://gateway.pipeworx.io/peppol/mcp"}}}VS Code で開く{"mcpServers":{"pipeworx-io-peppol":{"type":"http","url":"https://gateway.pipeworx.io/peppol/mcp"}}}{"mcpServers":{"pipeworx-io-peppol":{"serverUrl":"https://gateway.pipeworx.io/peppol/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
@pipeworx/peppol
企業が Peppol の電子請求書ネットワークに登録されているかを確認し、受け付ける ドキュメントタイプを一覧表示して、送信者に必要な AS4 エンドポイントを取得します。 Peppol SML と SMP をリアルタイムでたどって確認でき、ネットワークへの加盟は不要です。
Pipeworx の一部です — AI エージェントを 1683 以上のライブデータソースに接続する MCP ゲートウェイです。
ツール
lookup_participant(participantId, scheme?, environment?)— 権威ある登録確認です。 SML(DNS/BDXL)を通じて参加者を SMP に解決し、ServiceGroup を読み取ります。 「この企業に電子請求書を送信できますか。また、どの形式に対応していますか?」に回答します。 SML レコードがない場合は、理由とdeterminateを添えてregistered: falseを返します。get_participant_endpoint(participantId, documentTypeId, documentTypeScheme?, scheme?, environment?)— 1 つのドキュメントタイプの AS4 配信情報です。トランスポートプロファイル、受信 エンドポイント URL、プロセス識別子、サービスの有効化/有効期限を返します。 「実際にどこへ配信すればよいですか。また、まだ有効ですか?」に回答します。search_participants(q, country?, limit?)— Peppol Directory を企業名、VAT 番号、 または組織番号で検索します。「この企業の Peppol 識別子は何ですか?」に回答します。 これは、ほか 2 つのツールに必要な入力です。
認証
キーは不要です。3 つの上流サービスはすべて公開されており、Peppol ネットワークへの 加盟、Access Point との契約、PKI 証明書は必要ありません。ネットワークのディスカバリー レイヤーは意図的に公開されています。これにより、任意の送信者が任意の受信者を見つけられます。
(ただし、非対称性にご注意ください。ディスカバリー情報の読み取りは公開されていますが、 AS4 経由での送信は公開されていません。ドキュメントを配信するには、認定済みの Access Point と Peppol 証明書が必要です。このパックが対応するのは読み取り側のみです。)
データソース
https://cloudflare-dns.com/dns-queryおよびhttps://dns.google/resolve— SML の NAPTR ルックアップです。Workers ランタイムには DNS リゾルバーがないため、 DNS-over-HTTPS を使用します。Cloudflare を最初に使用し、フォールバックとして Google を使います。- SML ゾーン
iso6523-actorid-upis.edelivery.tech.ec.europa.eu(本番環境)とiso6523-actorid-upis.acc.edelivery.tech.ec.europa.eu(パイロット環境)は、 欧州委員会が運用しています。参加者識別子を SMP のベース URL に対応付けます。 - NAPTR が指定するホスト上の各参加者の SMP(例:
https://smp.elma-smp.no、https://smp.horus-software.be)は、/{scheme}::{participantId}および/{scheme}::{participantId}/services/{docTypeId}を提供します。 https://directory.peppol.eu/search/1.0/json— Peppol Directory です。 OpenPEPPOL が運用する、ネットワーク参加者がオプトインして登録する企業情報の索引です。
触れる前に知っておくべきこと
あらゆる解説に書かれている MD5 ルックアップ方式は、もう使われていません。 Peppol のドキュメント(および大半のブログ記事)では、SML は
B-{md5(lowercased participant id)}.iso6523-actorid-upis.{zone} が CNAME に解決されると説明されています。しかし現在は、Peppol Directory に掲載されている参加者も含め、すべての参加者で NXDOMAIN になります。現在の方式は OASIS BDXL です。レコード名は小文字にした識別子の SHA-256 をパディングなしの base32で表したもので、レコードはサービスフィールドが Meta:SMP、正規表現フィールドに SMP URL を !.*!https://smp.example/! の形式で格納した NAPTR です。登録済みだと分かっている企業で NXDOMAIN が返る場合は、未登録の企業を調べているのではなく、MD5 方式を使っています。実際の dig よりドキュメントを信じると、1 時間は無駄になります。
ハッシュ化するのは識別子の値だけです。 SHA-256 への入力は 0192:989995278 であり、iso6523-actorid-upis::0192:989995278 ではありません。スキームのプレフィックスを含めると、気付かないまま NXDOMAIN になり、「未登録」とまったく同じように見えます。
2 つの DoH プロバイダーは、異なる形式の NAPTR RDATA を返します。 Cloudflare は文字列を引用符で囲みます(100 10 "U" "Meta:SMP" "!.*!https://x!" .)が、Google は引用符で囲みません(100 10 U Meta:SMP !.*!https://x! .)。どちらの形式も解析しないと、フォールバック処理が何も返さずに終わります。
SMP ごとに Accept の扱いが異なります。 smp.elma-smp.no(Spring ベース)は Accept: application/xml に対して 406 Not Acceptable を返しますが、smp.horus-software.be は応答します。どちらも text/xml は受け付けます。q 値リストを送信してください。そうしないと、このパックはある運営者の SMP では動作しても、別の運営者では 406 になります。ここでの 406 は、ヘッダーの問題ではなく、参加者に問題があるように見えてしまいます。
XML のプレフィックスは SMP の実装によって異なります。 同じ要素でも、ある運営者からは smp:ServiceGroup、別の運営者からは ns2:ServiceGroup として返ってきます。プレフィックスではなく、ローカル名で照合してください。
Directory に掲載されていないからといって、ネットワーク上にも存在しないとは限りません。 名刺はオプトイン方式なので、search_participants が何も返さなくても、その企業が電子インボイスを受信できないという意味ではありません。SML に対する lookup_participant が正式な回答を返します。Directory は、名前から識別子を探すための便利なインデックスです。
参加者識別子は {icd}:{value} で、ICD プレフィックスも識別子の一部です。 989995278 はノルウェーの組織番号ですが、0192:989995278 は Peppol の参加者識別子です。同じ企業が複数の ICD で登録されている場合があります(例:同じベルギーの法人に対する 0208 の企業番号と 9925 の VAT 番号)。これらはそれぞれ別個の登録であり、独自の文書タイプを持ちます。
クイックスタート
MCP クライアント(Claude Desktop、Cursor、Windsurf など)に追加します。
{
"mcpServers": {
"peppol": {
"url": "https://gateway.pipeworx.io/peppol/mcp"
}
}
}
このエンドポイントが実際に提供するもの
https://gateway.pipeworx.io/peppol/mcp の tools/list は、上の表にあるツールに加えて、共通の Pipeworx メタツール(ask_pipeworx、discover_tools、search_within、remember/recall など、ゲートウェイ全体で使えるツール一式)も返します。そのため、表示されるツール数はこの表より多くなります。現在、単一パックのエンドポイントには、そのパック独自のツールに加えて、共通ツールが約 30 個表示されます。接続時の initialize 応答に正確な範囲が記載されており、その日の状況を確認する正式な方法です。
これは意図的な設計であり、意図せず多重化しているわけではありません。メタツールを使うと、このパックの対象外の質問にも、カタログ全体を横断して振り分ける ask_pipeworx 経由で回答できるため、MCP サーバーを追加する必要がありません。現在、メタツールなしでパックのエンドポイントに接続する方法はありません。追加のスキーマによって増えるコンテキスト量が、振り分け機能の利点を上回る場合は、複数のパックエンドポイントではなく、フルゲートウェイに一度だけ接続してください。
または、Pipeworx のフルゲートウェイに接続すると、このパックだけではなく、すべてのパックのツールが一覧表示されます。
{
"mcpServers": {
"pipeworx": {
"url": "https://gateway.pipeworx.io/mcp"
}
}
}
どちらの URL も、同じゲートウェイと同じ 1683 以上のデータソースに接続します。違いは、どのパックのツールが直接一覧表示されるかだけです。どちらからでも、ask_pipeworx を使えばすべてのパックにアクセスできます。
MCP クライアントがありませんか? HTTP 経由で呼び出せます
curl -X POST https://gateway.pipeworx.io/v1/tools/lookup_participant \
-H 'Content-Type: application/json' \
-d '{"participantId":"0192:989995278"}'
最初の呼び出しにアカウントは不要です。任意のツールを確認するには、GET https://gateway.pipeworx.io/v1/tools/lookup_participant を実行します。ツールを探すには、{"query":"..."} を指定して POST https://gateway.pipeworx.io/v1/tools/search_packs を実行します。
スタンドアロン(ゲートウェイアカウント不要)
このパッケージはローカルの stdio MCP サーバーとしても実行できます。Pipeworx アカウントも、ゲートウェイへのラウンドトリップも不要です。
{
"mcpServers": {
"peppol": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-peppol"]
}
}
}
または、直接実行して起動を確認できます。
npx -y @pipeworx/mcp-peppol
stdin/stdout 経由で MCP を使用し、このパックのツールのみについて initialize/tools/list/tools/call に応答します。上記のゲートウェイ接続で追加される共通メタツールは含まれません。同じソース、同じツールで、ask_pipeworx によるルーティングはありません。
ask_pipeworx の使用
ツールを直接呼び出す代わりに、平易な英語で質問できます。これは上記のパックエンドポイントだけでなく、完全なゲートウェイでも機能します。
ask_pipeworx({ question: "your question about Peppol data" })
ゲートウェイが適切なツールを選び、引数を自動的に入力します。
詳細
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。