pop-mcp について
pop-mcpは、POPを使ってイタリアの電子請求書や複数の国際形式の請求書を作成・管理するMCPサーバーです。ホスト型HTTP接続とローカル実行に対応し、検証、送信、文書照会のツールを提供します。
主な機能
- 01FatturaPA、Peppol、KSeF請求書の作成
- 02ZUGFeRDとPDF請求書の生成
- 03請求書の送信とステータス確認
- 04SdI文書の検証
- 05イタリアの法定保存向け文書保管
活用シーン
- 01イタリア事業向けFatturaPA請求書の生成と送信
- 02PeppolまたはKSeF電子請求書の作成
- 03ブランド付きPDF請求書の作成とメール送信
MCP 対応
請求書の作成、送信、照会、検証、保存を行う11種類のツールをMCPクライアントに公開します。ホスト型HTTPエンドポイントへの接続と、ローカルstdioサーバーの実行に対応します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.popapi.io/mcpclaude mcp add --transport http popapidev-pop https://mcp.popapi.io/mcp{"mcpServers":{"popapidev-pop":{"type":"http","url":"https://mcp.popapi.io/mcp"}}}Cursor で開く{"servers":{"popapidev-pop":{"type":"http","url":"https://mcp.popapi.io/mcp"}}}VS Code で開く{"mcpServers":{"popapidev-pop":{"type":"http","url":"https://mcp.popapi.io/mcp"}}}{"mcpServers":{"popapidev-pop":{"serverUrl":"https://mcp.popapi.io/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://mcp.popapi.io/mcp認証が必要ツール
13| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| data | object | はい | 請求書データオブジェクト全体 |
| data.id | integer | はい | 請求書/注文 ID(数値) |
| data.pdf | object | いいえ | PDF 生成設定(create-pdf エンドポイントのみ) |
| data.pdf.head | object | はい | |
| data.pdf.head.billing | array | はい | 請求先住所の詳細 |
| data.pdf.head.shipping | array | いいえ | 配送先住所の詳細(任意) |
| data.pdf.head.store_info_address | string | はい | 店舗/会社の住所全体を表す文字列 |
| data.pdf.logo_url | string | いいえ | PDF に含める会社ロゴの URL |
| data.pdf.nature_rc | string | いいえ | リバースチャージの VAT 免税区分コード |
| data.pdf.total_tax | string | はい | 税額合計の文字列 |
| data.pdf.footer_text | string | いいえ | PDF のカスタムフッターテキスト |
| data.pdf.ref_norm_rc | string | いいえ | リバースチャージの法的根拠 |
| data.pdf.invoice_html | enum | はい | HTML 請求書を生成するかどうかtrue | false |
| data.pdf.email_invoice | object | いいえ | メール配信設定 |
| data.pdf.email_invoice.to | array | はい | 受信者のメールアドレス(最大 3 件) |
| data.pdf.email_invoice.from | string | いいえ | 返信先メールアドレス |
| data.pdf.doc_type_title | string | はい | PDF に表示するドキュメントのタイトル(例:'Invoice'、'Receipt'、'Credit Note') |
| data.pdf.ref_n5_normative | string | いいえ | N5(リバースチャージ)免税の法的根拠 |
| data.type | enum | はい | 書類の種類invoice | credit_note |
| data.vies | boolean | いいえ | この顧客に対して EU VIES 検証を実施したかどうか |
| data.nature | string | いいえ | VAT 免税区分コード(例:'N2.1'、'N3.1'、'N6.1')— VAT 税率が 0% の場合は必須 |
| data.version | enum | はい | 民間/企業向けは FPR12、公共行政機関向けは FPA12FPR12 | FPA12 |
| data.filename | string | はい | 拡張子を含まない出力ファイル名(例:'IT99900088876_00009') |
| data.sdi_type | string | はい | SDI 受信者コード — 7 文字(SDI コードを持たない個人は '0000000') |
| data.vat_kind | enum | いいえ | イタリアの VAT 種別:I=Imponibile、D=Deducibile、S=ScissioneI | D | S |
| data.overrides | object | いいえ | ロケールと印紙税設定の任意の上書き |
| data.overrides.language | string | いいえ | ロケールの上書き(例:'it'、'en'、'de'、'fr'、'es') |
| data.overrides.bollo_force_apply | boolean | いいえ | イタリアの請求書に仮想印紙税(bollo virtuale)を強制適用する |
| data.order_items | array | はい | 明細項目(商品、サービス、送料) |
| data.invoice_body | object | はい | |
| data.invoice_body.general_data | object | はい | |
| data.invoice_body.general_data.date | string | はい | 請求書の日付(形式:YYYY-MM-DD) |
| data.invoice_body.general_data.currency | string | いいえ | ISO 4217 通貨コード(デフォルト:'EUR') |
| data.invoice_body.general_data.doc_type | enum | はい | 請求書は TD01、クレジットノートは TD04TD01 | TD04 |
| data.invoice_body.general_data.invoice_number | string | はい | 完全な請求書番号(例:'WEB9/2025') |
| data.invoice_body.general_data.invoice_prefix | string | いいえ | 請求書番号のプレフィックス(例:'WEB') |
| data.invoice_body.general_data.invoice_suffix | string | いいえ | 請求書番号のサフィックス(例:'9/2025') |
| data.invoice_body.total_document_amount | string|number | はい | 税込みの請求書合計金額(例:'122.00') |
| data.payment_data | object | はい | |
| data.payment_data.iban | string | いいえ | IBAN — MP05(銀行振込)で必須 |
| data.payment_data.beneficiary | string | いいえ | 銀行口座の受取人名 — MP05(銀行振込)で必須 |
| data.payment_data.terms_payment | enum | はい | TP01=分割払い、TP02=全額払い、TP03=前払いTP01 | TP02 | TP03 |
| data.payment_data.payment_amount | string | はい | 支払金額(例:'122.00') |
| data.payment_data.payment_details | enum | はい | 支払方法:MP01=現金、MP02=小切手、MP05=銀行振込、MP08=クレジットカード、MP12=RIBA、MP16=口座振替、MP19=SEPA、MP21=SEPA Core、MP22=源泉徴収、MP23=PagoPAMP01 | MP02 | MP05 | MP08 | MP12 | MP15 | MP16 | MP19 | MP21 | MP22 | MP23 |
| data.payment_data.financial_institution | string | いいえ | 銀行名 — MP05(銀行振込)で必須 |
| data.customer_type | enum | はい | 顧客区分private | company | freelance | pa |
| data.ref_normative | string | いいえ | 付加価値税免税の法的根拠 |
| data.transfer_lender | object | はい | 仕入先/販売者の詳細 |
| data.transfer_lender.place | object | はい | |
| data.transfer_lender.place.city | string | はい | 市区町村 |
| data.transfer_lender.place.address | string | はい | 住所 |
| data.transfer_lender.place.zip_code | string | はい | 郵便番号 |
| data.transfer_lender.place.country_id | string | はい | ISO 国コード(例:'IT') |
| data.transfer_lender.place.province_id | string | いいえ | 州/県コード(例:ミラノの 'MI'、カターニアの 'CT') |
| data.transfer_lender.contact | object | はい | |
| data.transfer_lender.contact.email | string | はい | メールアドレス |
| data.transfer_lender.contact.phone | string | はい | 電話番号 |
| data.transfer_lender.personal_data | object | はい | |
| data.transfer_lender.personal_data.last_name | string | いいえ | 姓(個人/フリーランスの場合) |
| data.transfer_lender.personal_data.first_name | string | いいえ | 名(個人/フリーランスの場合) |
| data.transfer_lender.personal_data.tax_id_vat | object | はい | |
| data.transfer_lender.personal_data.company_name | string | いいえ | 会社名または事業名(個人でない場合は必須) |
| data.transmitter_data | object | はい | |
| data.transmitter_data.sdi_code | string | はい | SDI 宛先コード — 7 文字(個人の場合は '0000000') |
| data.transmitter_data.progressive | string | はい | 送信連番 ID(例:'00001') |
| data.transmitter_data.recipient_pec | string | いいえ | 配信用 PEC(認証済みメール)— SDI コードの代替 |
| data.transmitter_data.transmitter_id | object | はい | 送信者の納税者識別情報 |
| data.transmitter_data.transmitter_id.id_code | string | はい | 付加価値税番号または税 ID(例:イタリアの '12345678901') |
| data.transmitter_data.transmitter_id.country_id | string | はい | ISO 3166-1 alpha-2 国コード(例:'IT'、'DE'、'FR') |
| data.transmitter_data.transmitter_format | enum | はい | 民間/企業向けは FPR12、公共行政機関向けは FPA12FPR12 | FPA12 |
| data.transmitter_data.transmitter_contact | object | はい | |
| data.transmitter_data.transmitter_contact.email | string | はい | 送信者のメールアドレス |
| data.transmitter_data.transmitter_contact.phone | string | はい | 送信者の電話番号 |
| data.transferee_client | object | はい | 顧客/購入者の詳細 |
| data.transferee_client.place | object | はい | |
| data.transferee_client.place.city | string | はい | 市区町村 |
| data.transferee_client.place.address | string | はい | 住所 |
| data.transferee_client.place.zip_code | string | はい | 郵便番号 |
| data.transferee_client.place.country_id | string | はい | ISO 国コード |
| data.transferee_client.place.province_id | string | いいえ | 州/県コード(イタリア以外の住所では任意) |
| data.transferee_client.personal_data | object | はい | |
| data.transferee_client.personal_data.email | string | いいえ | 顧客のメールアドレス |
| data.transferee_client.personal_data.last_name | string | いいえ | 顧客の姓 |
| data.transferee_client.personal_data.first_name | string | いいえ | 顧客の名 |
| data.transferee_client.personal_data.tax_id_vat | object | はい | |
| data.transferee_client.personal_data.tax_id_code | string | いいえ | イタリアの税務コード(codice fiscale)— イタリアの個人の場合は必須 |
| data.transferee_client.personal_data.company_name | string | いいえ | 会社名 |
| data.purchase_order_data | object | いいえ | 発注書参照情報 |
| data.purchase_order_data.id | string | はい | 発注書 ID/番号 |
| data.purchase_order_data.date | string | はい | 発注日(YYYY-MM-DD 形式) |
| data.connected_invoice_data | array | いいえ | 参照する請求書(クレジットノートでは必須) |
| site_url | string | いいえ | サイト/ショップの URL |
| site_title | string | いいえ | サイト/ショップのタイトル |
| environment | string | いいえ | 対象環境(例:'sandbox') |
| integration | any | いいえ | 統合設定 — デフォルトの動作を上書きするか、webhook/Fatture in Cloud 経由で配信するために使用します。設定すると submit_to_sdi を上書きします。 |
| submit_to_sdi | boolean | いいえ | true の場合、請求書をイタリアの SdI(Sistema di Interscambio)に自動送信します。POP 統合で SdI を有効にする必要があります(Growth+ プラン)。 |
| plugin_version | string | いいえ | 呼び出し元アプリケーションのバージョン |
詳細
pop-mcp
POP 用の MCP(Model Context Protocol)サーバーです。LLM が AI アシスタントから直接、イタリアの電子請求書(FatturaPA/SdI)、Peppol、KSeF、ZUGFeRD/Factur-X、および PDF 請求書を生成、送信、管理できるようにします。
npm:
@getpopapi/pop-mcp· リモート:https://mcp.popapi.io/mcp
リモート MCP(HTTP)— 最も手軽な始め方
何もインストールしたくない場合は、ホスト型のマルチテナント MCP サーバーとして動作する pop-mcp をこちらで利用できます。
https://mcp.popapi.io/mcp
popapi.io にアクセスしてライセンスキーを取得し、その URL を、キーを Bearer トークンとして任意の MCP 対応クライアントに指定してください。ローカルへのインストールも、POP_API_KEY 環境変数も、ビルド手順も不要です。ほとんどの方には、pop-mcp を試す方法としてこちらをおすすめします。ご自身のマシンでプロセスを実行する Claude Desktop の設定が特に必要な場合にのみ、以下のローカル stdio セットアップを使用してください。
仕組み
このエンドポイントは、完全にステートレスな MCP 2026-07-28 に対応しています。initialize ハンドシェイクはなく、開始または追跡するセッションもありません。すべてのリクエストは自己完結しており、それぞれがプロトコルバージョンと機能を指定し、サーバーは個別に応答します。そのため、このエンドポイントはマルチテナントです。サーバー自身の環境から固定の POP_API_KEY を読み取ることはありません。すべてのリクエストには、Bearer トークンとしてご自身の POP ライセンスキーを含める必要があります。
Authorization: Bearer <your_license_key>
Authorization ヘッダーがない、または形式が正しくない場合、POP API を呼び出す前に error_code: "unauthorized_user" を含む 401 が返されます。形式は正しいものの無効なキーは、そのまま POP の API に渡され、POP が返すエラー(unauthorized_user、insufficient_level など)が表示されます。サーバー自体ではキーを再検証しません。
最新の MCP HTTP クライアントであれば接続できます。Claude(リモートコネクター)、OpenAI Responses API、n8n、MCP Inspector、カスタム統合などに対応しており、Claude Desktop だけに限定されません。請求書、ステータス、高度な機能、オンボーディングの各ツールをすべて利用できます。オンボーディングツールは呼び出しごとに独自の onboarding_token を使用し、Bearer キーは必要ありません。
curl を使った例
サーバーがサポートするプロトコルバージョンと機能を確認します(任意です。クライアントは tools/list または tools/call を直接呼び出し、バージョンネゴシエーションエラーをその場で処理することもできます)。
curl -X POST https://mcp.popapi.io/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_license_key_here" \
-H "MCP-Protocol-Version: 2026-07-28" \
-H "Mcp-Method: server/discover" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "server/discover",
"params": { "_meta": { "io.modelcontextprotocol/protocolVersion": "2026-07-28", "io.modelcontextprotocol/clientCapabilities": {} } }
}'
利用可能なツールの一覧を取得します。すべてのリクエストは自己完結しているため、_meta(プロトコルバージョンとクライアント機能)は最初の呼び出しだけでなく、毎回の呼び出しに含めます。
curl -X POST https://mcp.popapi.io/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_license_key_here" \
-H "MCP-Protocol-Version: 2026-07-28" \
-H "Mcp-Method: tools/list" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": { "_meta": { "io.modelcontextprotocol/protocolVersion": "2026-07-28", "io.modelcontextprotocol/clientCapabilities": {} } }
}'
ツールカタログはすべてのライセンスキーで共通です。そのため、tools/list と server/discover のレスポンスには、1 時間の公開キャッシュヒント(ttlMs: 3600000, cacheScope: "public")が含まれます。クライアントやゲートウェイは、テナントをまたいでこれらをキャッシュできます。
MCP-Protocol-VersionとMcp-Methodは、すべてのリクエストで必須です(SEP-2243 に準拠)。これらは本文の_meta.protocolVersionおよびmethodと完全に一致する必要があります。一致しない場合、サーバーは400と JSON-RPC エラー-32020(HeaderMismatch)を返します。tools/callリクエストでは、さらにparams.nameと一致するMcp-Nameヘッダーも必要です。
MCP Inspector を使った例
npx @modelcontextprotocol/inspector
https://mcp.popapi.io/mcp に接続するよう設定し、ヘッダーに
Authorization: Bearer <your_license_key> を指定してください。
このエンドポイントは Vercel サーバーレス関数(api/mcp.ts → src/mcpHandler.ts)として動作します。ローカルで実行するには、npx vercel dev を使います(事前に vercel link でプロジェクトをリンクする必要があります)。
POP とは?
POP は、電子インボイスの作成と送信を行うクラウドサービスで、以下をサポートしています。
- 🇮🇹 イタリアの電子インボイス(FatturaPA/SdI) — D.Lgs. 127/2015 に準拠
- 🇪🇺 Peppol — 欧州全域を対象とする国境を越えた B2B 請求(UBL 2.1)
- 📄 PDF インボイス — ブランド対応、メール送信付き
- ✅ 検証 — 納税者番号、VAT 番号、送信前の書類チェック
- 🗄️ 保存 — イタリアの法定アーカイブ(conservazione sostitutiva)
利用可能なツール(合計 11 個)
インボイスの作成
| ツール | エンドポイント | プラン |
|---|---|---|
pop_create_sdi_invoice | POST /create-xml | すべて |
pop_create_peppol_invoice | POST /create-ubl | すべて(送信には Basic 以上) |
pop_create_pdf_invoice | POST /create-pdf | すべて(メール送信には Basic 以上) |
pop_create_ksef_invoice | POST /create-ksef-xml | すべて(プロバイダーへの送信には KSeF の設定が必要) |
pop_create_zugferd_invoice | POST /create-zugferd | すべて |
pop_sync_zoho_document | POST /integration/zoho/sync | Zoho コネクターが必要 |
ステータスと取得
| ツール | エンドポイント | プラン |
|---|---|---|
pop_get_invoice_status | POST /sdi/document-notifications | すべて |
pop_get_peppol_document | POST /peppol/document-get | Basic 以上 |
pop_get_sdi_document | POST /sdi/document-get | Basic 以上 |
検証と高度な SdI 操作
| ツール | エンドポイント | プラン |
|---|---|---|
pop_verify_sdi_document | POST /sdi/document-verify | Basic 以上 |
pop_preserve_document | POST /sdi/document-preserve | Basic 以上 |
前提条件
- Node.js >= 20
- POP のライセンスキー
- SdI/Peppol への送信には、POP アカウントで有効なインテグレーションが必要です(Basic/Growth プラン)
認証
ライセンスキーの取得
POP を初めてご利用ですか? popapi.io にアクセスしてアカウントを作成し、ライセンスキーを取得してください。
API のみを利用するユーザーは、次の手順でアカウントを有効化し、license_key を取得できます。
- https://popapi.io/otp-login/ を開きます
- メールアドレスを入力します
- メールで届いたワンタイムパスワード(OTP)を受け取り、入力します
- 設定ウィザードを完了します
- https://popapi.io/ → Account > API を開きます
- デフォルトで生成された
license_keyをコピーします
キーの管理
- アカウントにはデフォルトの
license_keyが 1 つ含まれており、Account > API で確認できます - 同じページから、同じアカウントに紐づくキーを追加で生成できます
- すべての
license_keyは秘密の認証情報として扱ってください。ソース管理にコミットしないでください
推奨される最初の手順
license_keyを取得しますGET /account-profileでテストします- 実際のペイロードを使って、書類生成リクエストを 1 件送信します
- ローカルでの生成が正常に動作してから、任意の送信インテグレーションを追加します
インストール
npm から(推奨)
npm install -g @getpopapi/pop-mcp
ソースから
git clone https://github.com/getpopapi/pop-mcp
cd pop-mcp
npm install
npm run build
設定
POP のライセンスキーを環境変数として設定します。
export POP_API_KEY=your_license_key_here
任意 — ステージング環境を使用します。
export POP_ENVIRONMENT=staging
Claude Desktop の設定
claude_desktop_config.json に追加します。
npm からインストールした場合:
{
"mcpServers": {
"pop": {
"command": "pop-mcp",
"env": {
"POP_API_KEY": "your_license_key_here"
}
}
}
}
ソースから実行する場合:
{
"mcpServers": {
"pop": {
"command": "node",
"args": ["/path/to/pop-mcp/dist/cli.js"],
"env": {
"POP_API_KEY": "your_license_key_here"
}
}
}
}
設定ファイルの場所:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
ツールのリファレンス
license_key は POP_API_KEY から常に自動的に挿入されるため、手動で渡さないでください。
pop_create_sdi_invoice
イタリアの FatturaPA XML ドキュメントを生成します。オプションで SdI(Sistema di Interscambio)に送信できます。
MCP 入力:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
data | object | ✅ | 請求書データ一式(Invoice Data Structure を参照) |
submit_to_sdi | boolean | — | SdI に送信するには true を設定します。アクティブな SdI 連携を含む Basic+ プランが必要です。デフォルト:false |
integration | object | — | 連携設定を上書きします。設定されている場合、submit_to_sdi より優先されます。 |
environment | string | — | 対象環境(例:"sandbox") |
integration.use の連携オプション:
"sdi-via-pop"または"sdi"— POP SdI 経由で送信します"pop-to-webhook"— Webhook に配信します(idが必要です)"fatture-in-cloud"— Fatture in Cloud に配信します
送信される API ペイロード:
{
"license_key": "YOUR_LICENSE_KEY",
"user_agent": "pop-mcp",
"user_agent_version": "1.0.0",
"data": { "...invoice fields..." },
"integration": { "use": "sdi-via-pop", "action": "create" }
}
submit_to_sdiがfalseで、上書き設定も指定されていない場合、integrationは省略されます(XML のみを生成します)。
pop_create_peppol_invoice
Peppol UBL 2.1 ドキュメントを生成します。オプションで Peppol ネットワークに送信できます。
MCP 入力:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
data | object | ✅ | 請求書データ一式。customer_type は "company" または "freelance" である必要があります |
submit_to_peppol | boolean | — | Peppol ネットワークに送信するには true を設定します。Basic+ プランが必要です。デフォルト:false |
integration | object | — | 連携設定を上書きします |
environment | string | — | 対象環境 |
integration.use の連携オプション:
"peppol-via-pop"または"peppol"— POP Peppol 経由で送信します"pop-to-webhook"— Webhook に配信します(idが必要です)
Peppol 固有の VAT 免税ルール:
data.natureは VAT 免税コードです(VATEX-EU-G、VATEX-EU-IC、VATEX-EU-AE、VATEX-EU-Oなどの VATEX コード。これらは例であり、すべてのコードを網羅しているわけではありません)。自由形式の文字列として扱われます。POP API が検証し、平易な言葉でエラーを返します。- 免税コードはユーザーから取得します。モデルがコードを選択、推測(国、
vies、VAT 率など)または変更することはありません。コードがない場合はユーザーに確認します。API エラーはユーザーに表示され、別のコードで再試行されることはありません。 - コードが
VATEX-EU-ICの場合、API はdata.delivery_data.country(ISO 3166-1 alpha-2、国のみ。住所は指定しません)を必須とします。delivery_data.date(YYYY-MM-DD)は任意で、省略するとドキュメントの日付が使用されます。クレジットノートには、取り消し対象の請求書と同じdelivery_dataを指定します。
送信される API ペイロード:
{
"license_key": "YOUR_LICENSE_KEY",
"user_agent": "pop-mcp",
"user_agent_version": "1.0.0",
"data": { "...invoice fields...", "nature": "VATEX-EU-IC", "delivery_data": { "country": "FR" } },
"integration": { "use": "peppol-via-pop", "action": "create" }
}
pop_create_pdf_invoice
ブランド設定付きの PDF 請求書を生成します。オプションで最大 3 人の宛先にメールで送信できます。
MCP 入力:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
data | object | ✅ | 請求書データ。PDF 固有の設定として data.pdf を含める必要があります |
send_email | boolean | — | PDF をメールで送信するには true を設定します(data.pdf.email_invoice と Basic+ プランが必要です)。デフォルト:false |
environment | string | — | 対象環境 |
data.pdf のフィールド:
| フィールド | 説明 |
|---|---|
doc_type_title | ドキュメントに表示するタイトル(例:"Invoice"、"Receipt") |
logo_url | 会社のロゴ URL(HTTPS) |
head.store_info_address | ヘッダーに表示するサプライヤーの住所文字列 |
head.billing[] | 顧客の請求先住所の配列 |
head.shipping[] | 配送先住所の配列(任意) |
email_invoice.to | 宛先メールアドレス(最大 3 件) |
email_invoice.from | 返信先アドレス |
footer_text | カスタムフッターメッセージ |
total_tax | 文字列形式の税額合計 |
送信される API ペイロード:
{
"license_key": "YOUR_LICENSE_KEY",
"user_agent": "pop-mcp",
"user_agent_version": "1.0.0",
"data": {
"...invoice fields...",
"pdf": {
"doc_type_title": "Invoice",
"logo_url": "https://example.com/logo.png",
"head": { "store_info_address": "Via Roma 1, 00100 Roma IT", "billing": [] },
"total_tax": "22.00",
"email_invoice": { "to": ["[email protected]"] }
}
}
}
pop_create_ksef_invoice
ポーランドの KSeF FA(3) 請求書またはクレジットノートを生成します。設定済みの KSeF プロバイダー統合を通じて送信することもできます。
MCP の入力:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
data | object | ✅ | KSeF FA(3) の生成に使用する請求書データ一式 |
integration | object | — | KSeF プロバイダーへの送信設定(任意):{ use: "ksef" | "ksef-via-pop", action } |
environment | string | — | 対象環境(例:"sandbox") |
KSeF 固有のドメインルール:
- ポーランドのみ —
transfer_lender.personal_data.tax_id_vat.country_idは"PL"、id_codeは 10 桁の NIP である必要があります customer_typeは"company"または"freelance"である必要があります(個人は不可)- KSeF ではトップレベルの
natureが常に必須です(SdI/Peppol では VAT 率 0%の場合のみ必須です)。SdI と同じ nature コード(N1、N2.1、N2.2、N3.1、N3.2、N4など)を再利用して、KSeF の内部税務区分を導出します transmitter_dataは使用されません(SdI のみで使用される概念です)payment_data.payment_detailsで受け付けるのはMP01、MP02/MP03、MP05、MP08のみです。それ以外の支払方法コードは生成時に拒否されます- ベース XML の生成はすべてのプランで利用できます。プロバイダー経由の送信で
integration.use: "ksef"を使用するには、Basic 以上のプランが必要です。また、サプライヤーは POP ダッシュボードで KSeF の法人として登録済みである必要があります
送信される API ペイロード:
{
"license_key": "YOUR_LICENSE_KEY",
"user_agent": "pop-mcp",
"user_agent_version": "1.0.0",
"data": { "...invoice fields...", "nature": "N1" },
"integration": { "use": "ksef", "action": "create" }
}
ローカルで XML のみを生成する場合(プロバイダー経由の送信なし)、
integrationは完全に省略されます。
戻り値: ローカル生成の場合は未加工の FA(3) XML(application/xml)、プロバイダー統合経由で送信する場合は JSON(UUID を含む)です。
pop_create_zugferd_invoice
ZUGFeRD/Factur-X ドキュメントパッケージを生成します。パッケージには、表示用 PDF、EN16931 CII XML、および XML を埋め込んだハイブリッド PDF/A-3 が含まれます。
MCP の入力:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
data | object | ✅ | ZUGFeRD/Factur-X の生成に使用する請求書データ一式 |
environment | string | — | 対象環境(例:"sandbox") |
このツールには integration パラメーターがありません。ZUGFeRD の生成はローカルのみで、送信や配信の処理はありません。
送信される API ペイロード:
{
"license_key": "YOUR_LICENSE_KEY",
"user_agent": "pop-mcp",
"user_agent_version": "1.0.0",
"data": { "...invoice fields..." }
}
戻り値: 生成メタデータと、Base64 でエンコードされた 3 つの添付ファイルを含む JSON です。
{
"success": true,
"data": {
"valid": true,
"profile": "EN16931",
"attachments": {
"pdf": { "filename": "...", "mime": "application/pdf", "content_base64": "..." },
"xml": { "filename": "...", "mime": "application/xml", "content_base64": "..." },
"hybrid_pdf": { "filename": "...", "mime": "application/pdf", "content_base64": "..." }
},
"validation": { "...": "..." },
"errors": [],
"warnings": []
}
}
pop_get_invoice_status
送信済み請求書の SdI 処理ステータスと通知を取得します。
MCP の入力:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
uuid | string (UUID) | ✅ | submit_to_sdi=true の場合に pop_create_sdi_invoice が返す請求書 UUID |
response_format | "markdown" | "json" | — | 出力形式。デフォルト:"markdown" |
environment | string | — | 対象環境 |
送信される API ペイロード:
{
"license_key": "YOUR_LICENSE_KEY",
"integration": { "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
}
SdI 通知ステータス: pending · accepted · rejected · delivery
SdI の処理は非同期で、数分から数時間かかることがあります。通知がまだ返されない場合は、再試行してください。
pop_get_peppol_document
UUID を使用して、ネットワークから Peppol ドキュメントを取得します。
MCP の入力:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
uuid | string (UUID) | ✅ | pop_create_peppol_invoice が返す Peppol ドキュメント UUID |
zone | string (2 chars) | — | Peppol アクセスポイントの国コード(例:ベルギーの場合は "BE")。一部の地域では必須です。 |
response_format | "markdown" | "json" | — | 出力形式。デフォルト:"markdown" |
environment | string | — | 対象環境 |
送信される API ペイロード:
{
"license_key": "YOUR_LICENSE_KEY",
"integration": { "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "zone": "IT" }
}
zoneが指定されていない場合、ペイロードから省略されます。
pop_get_sdi_document
UUID を使用して、POP ストレージからアーカイブ済みの SdI(FatturaPA)文書を取得します。
MCP 入力:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
uuid | string (UUID) | ✅ | SdI 文書の UUID |
response_format | "markdown" | "json" | — | 出力形式。デフォルト:"markdown" |
environment | string | — | 対象環境 |
送信される API ペイロード:
{
"license_key": "YOUR_LICENSE_KEY",
"integration": { "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
}
要件:SdI 統合が有効な Basic+ プラン。
pop_verify_sdi_document
提出前に、SdI XML 文書が準拠しているか検証します。文書は提出されません。
MCP 入力:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
xml_base64 | string | ✅ | Base64 文字列としてエンコードされた SdI XML 文書 |
environment | string | — | 対象環境 |
送信される API ペイロード:
{
"license_key": "YOUR_LICENSE_KEY",
"skip_business_check": true,
"integration": { "xml": "<base64-encoded-xml-string>" }
}
実行される検証: XML スキーマへの準拠・税務コードの形式・VAT 番号の有効性・必須フィールドの存在・金額の整合性
要件:SdI 統合が有効で、事業者登録済みの Basic+ プラン。
pop_preserve_document
認定された長期デジタルストレージ(conservazione sostitutiva)に SdI 文書をアーカイブします。イタリアの法律では、請求書を10年間保存することが義務付けられています。
MCP 入力:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
uuid | string (UUID) | ✅ | アーカイブする SdI 文書の UUID |
environment | string | — | 対象環境 |
送信される API ペイロード:
{
"license_key": "YOUR_LICENSE_KEY",
"integration": { "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
}
重要:
pop_get_invoice_statusがステータスRC(Ricevuta di Consegna)またはMC(Mancata Consegna)を返す場合にのみ、このツールを呼び出してください。ステータスNS、EC、SE、DTの場合は呼び出さないでください。
要件:SdI 統合が有効な Basic+ プラン。
使用例
シンプルなイタリアの請求書を生成する(XML のみ)
AI アシスタントに次のように依頼します:
「Rossi SRL(VAT IT12345678901、ミラノ)宛てに、1000€ + 22% VAT の FatturaPA 請求書を作成してください。私の会社は Bianchi SRL(VAT IT98765432109、ローマ)です。支払方法は、IBAN IT60X0542811101000000123456 への銀行振込です。」
請求書を SdI に提出する
「コンサルティングサービスについて、顧客 Mario Rossi(税務コード RSSMRA80A01H501U、ローマ)宛てに、500€ + 22% VAT の請求書 #45 を作成して SdI に提出してください。」
提出後に請求書のステータスを確認する
「UUID abc123-def456-... の SdI 請求書のステータスは何ですか?」
メール送信付きで PDF を生成する
「注文 #123 の PDF 請求書を作成し、[email protected] にメールで送信してください。」
送信前に SdI 文書を検証する
「提出前に、UUID abc123-... の SdI 文書が要件に準拠しているか検証してください。」
プラン要件
| 機能 | Free | Basic/Growth | Pro |
|---|---|---|---|
| XML 生成(ローカル) | ✅ | ✅ | ✅ |
| PDF 生成 | ✅ | ✅ | ✅ |
| SdI への提出 | ❌ | ✅ | ✅ |
| Peppol への提出 | ❌ | ✅ | ✅ |
| PDF のメール送信 | ❌ | ✅ | ✅ |
| SdI 文書の検証 | ❌ | ✅ | ✅ |
| 文書の保存 | ❌ | ✅ | ✅ |
テスト
MCP Inspector(対話型)
npm run inspector
# or
npx @modelcontextprotocol/inspector dist/cli.js
クイックスモークテスト
POP_API_KEY=your_key node -e "
import('./dist/cli.js').catch(e => {
if (e.message.includes('stdin')) process.exit(0);
console.error(e); process.exit(1);
});
"
ツールスキーマの一覧表示をテストする
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | POP_API_KEY=test node dist/cli.js
開発
# Run with auto-reload
npm run dev
# Build
npm run build
# Clean build artifacts
npm run clean
請求書データ構造
請求書作成の data パラメーターは、FatturaPA の構造に従います:
data
├── id Invoice/order ID (numeric)
├── filename Output filename without extension (e.g. 'IT99900088876_00009')
├── type "invoice" | "credit_note"
├── version "FPR12" | "FPA12"
├── sdi_type 7-char SDI code ('0000000' for private individuals)
├── customer_type "private" | "company" | "freelance" | "pa"
├── nature VAT exemption code (required when rate is 0%, e.g. 'N2.1', 'N6.1')
├── transmitter_data
│ ├── transmitter_id { country_id, id_code }
│ ├── progressive Transmission progressive ID (e.g. '00001')
│ ├── transmitter_format "FPR12" | "FPA12"
│ ├── sdi_code 7-char code
│ ├── transmitter_contact { phone, email }
│ └── recipient_pec PEC email (alternative to sdi_code)
├── transfer_lender Supplier/seller
│ ├── personal_data { tax_id_vat: { country_id, id_code, tax_regime }, company_name }
│ ├── place { address, zip_code, city, province_id, country_id }
│ └── contact { phone, email }
├── transferee_client Customer/buyer
│ ├── personal_data { tax_id_vat, tax_id_code (fiscal code for IT private), company_name }
│ └── place { address, zip_code, city, province_id, country_id }
├── invoice_body
│ ├── general_data { doc_type (TD01|TD04), date (YYYY-MM-DD), invoice_number, currency }
│ └── total_document_amount
├── order_items[]
│ ├── description, quantity, unit
│ ├── unit_price, total_price
│ ├── rate VAT rate as string (e.g. '22.00')
│ ├── total_tax VAT amount (number)
│ └── item_type "product" | "shipping" | "fee"
├── payment_data
│ ├── terms_payment TP01 (instalment) | TP02 (full) | TP03 (advance)
│ ├── payment_details MP01 (Cash) | MP02 (Check) | MP05 (Bank Transfer) | MP08 (Credit Card) | ...
│ ├── payment_amount
│ ├── beneficiary Required for MP05 (bank transfer)
│ ├── financial_institution Required for MP05
│ └── iban Required for MP05
├── purchase_order_data (optional) { id, date }
├── delivery_data (optional, Peppol) { country, date? } — country required for VATEX-EU-IC
├── connected_invoice_data[] (required for credit notes) { id, date }
├── overrides (optional) { language, bollo_force_apply }
└── pdf (only for pop_create_pdf_invoice)
├── doc_type_title
├── logo_url
├── head { store_info_address, billing[], shipping[] }
├── total_tax
├── email_invoice { to[] (max 3), from }
└── footer_text
エラーリファレンス
| エラーコード | 意味 | 解決方法 |
|---|---|---|
unauthorized_user | ライセンスキーが無効です | POP_API_KEY を確認してください |
insufficient_level | プランのレベルが不足しています | POP プランをアップグレードしてください |
business_not_registered | 事業者プロフィールがありません | popapi.io で登録してください |
integration_inactive | SdI/Peppol が有効になっていません | popapi.io で有効にしてください |
pop_api_email_limit | メールの宛先が3件を超えています | 最大3件に減らしてください |
pop_api_email_not_allowed | プランでメールが許可されていません | Basic+ にアップグレードしてください |
関連プロジェクト
- n8n-nodes-pop — POP 用の n8n コミュニティノード
- POP — 公式ウェブサイト
- API Documentation — Postman のドキュメント
ライセンス
MIT © getpopapi
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。