mcp-ksef-pl について
mcp-ksef-plは、KSeFとPeppolに対応するポーランド電子インボイス用のPython MCPサーバーです。請求書の生成・検証・送信に加え、ポーランドの税務・登録番号を確認できます。
主な機能
- 01FA(3)・FA(2) XMLの生成と検証
- 02KSeF請求書の送信・状態確認・検索
- 03Peppol UBL請求書の生成と検証
- 04ポーランドのNIP・REGON確認
- 05Peppol参加者とエンドポイントの検索
活用シーン
- 01KSeF API v2向けFA(3)請求書の準備
- 02送信前の形式と業務ルールの確認
- 03ポーランド企業の税務・登録番号の検証
- 04Peppol参加者の検索と請求書の送信
MCP 対応
MCPサーバーは、請求書の生成・検証、KSeFの処理、識別番号確認、PeppolネットワークのツールをAIエージェントなどのMCPクライアントに公開します。KSeFへの送信には取得済みのセッショントークンが必要で、署名を伴う認証フローは自動化しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx mcp-ksef-plKSEF_SESSION_TOKENシークレットKSeF v2 AccessToken obtained via the challenge/redeem auth flow. Required for submit_invoice_to_ksef.KSEF_NIPNIP (Polish tax identifier, 10 digits) of the entity submitting invoices.KSEF_ENVIRONMENTTarget KSeF environment: 'production' or 'test' (default: test).KSEF_TIMEOUTHTTP request timeout in seconds (default: 30).ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
56掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| invoice | object | はい | KSeF FA(2)/FA(3) 提出用に拡張された EN 16931。 国内拡張: numer_ksef — KSeF 参照番号。プラットフォームによってクリアランス後に割り当てられます。 送信文書には含まれず、クリアランス応答から設定され、 追跡用にここに保存されます。 KSeF は EN 16931 GuidelineID URN を使用しないため、_allowed_profiles クラス変数は None のままです。profile フィールドには KSeF スキーマ識別子を設定するか、生成ツールの規約に従ってください。 |
| invoice.note | any | いいえ | 請求書の備考/理由(BT-22) |
| invoice.buyer | object | はい | 買い手/顧客(BG-7) |
| invoice.buyer.gln | any | いいえ | GS1 グローバル・ロケーション・ナンバー |
| invoice.buyer.nip | any | いいえ | ポーランドの NIP(10 桁) |
| invoice.buyer.name | string | はい | 法人名(BT-27/BT-44) |
| invoice.buyer.vat_id | any | いいえ | VAT 番号(BT-31/BT-48) |
| invoice.buyer.address | any | いいえ | |
| invoice.buyer.eu_vat_id | any | いいえ | ポーランド国外の売り手/買い手の EU VAT 番号 |
| invoice.buyer.contact_name | any | いいえ | 担当者名(BT-41/BT-56) |
| invoice.buyer.contact_email | any | いいえ | 連絡先メールアドレス(BT-43/BT-58) |
| invoice.buyer.contact_phone | any | いいえ | 連絡先電話番号(BT-42/BT-57) |
| invoice.buyer.eu_vat_country | any | いいえ | ポーランド国外の売り手/買い手の EU VAT 国コード |
| invoice.buyer.electronic_address | any | いいえ | Peppol/EAS 電子アドレス(BT-34/BT-49) |
| invoice.buyer.electronic_address_scheme | any | いいえ | EAS スキームコード。例:GLN の場合は '0088'(BT-34-SchemeID/BT-49-SchemeID) |
| invoice.seller | object | はい | 売り手/サプライヤー(BG-4) |
| invoice.seller.gln | any | いいえ | GS1 グローバル・ロケーション・ナンバー |
| invoice.seller.nip | any | いいえ | ポーランドの NIP(10 桁) |
| invoice.seller.name | string | はい | 法人名(BT-27/BT-44) |
| invoice.seller.vat_id | any | いいえ | VAT 番号(BT-31/BT-48) |
| invoice.seller.address | any | いいえ | |
| invoice.seller.eu_vat_id | any | いいえ | ポーランド国外の売り手/買い手の EU VAT 番号 |
| invoice.seller.contact_name | any | いいえ | 担当者名(BT-41/BT-56) |
| invoice.seller.contact_email | any | いいえ | 連絡先メールアドレス(BT-43/BT-58) |
| invoice.seller.contact_phone | any | いいえ | 連絡先電話番号(BT-42/BT-57) |
| invoice.seller.eu_vat_country | any | いいえ | ポーランド国外の売り手/買い手の EU VAT 国コード |
| invoice.seller.electronic_address | any | いいえ | Peppol/EAS 電子アドレス(BT-34/BT-49) |
| invoice.seller.electronic_address_scheme | any | いいえ | EAS スキームコード。例:GLN の場合は '0088'(BT-34-SchemeID/BT-49-SchemeID) |
| invoice.profile | string | はい | GuidelineID/プロファイル URN(BT-24)。各国のサブクラスで _allowed_profiles = frozenset({MyEnum.member.value, ...}) を設定し、型付き enum に制限してください。 |
| invoice.due_date | any | いいえ | 支払期日(BT-9) |
| invoice.tax_lines | array | いいえ | VAT 内訳行(BG-23)。EN 16931 では 1 行以上が必須です。 |
| invoice.tax_total | any | はい | VAT 合計額(BT-110) |
| invoice.amount_due | any | はい | 支払金額(BT-115) |
| invoice.line_items | array | いいえ | 請求書明細行(BG-25)。BASIC、EN_16931、EXTENDED、XRechnung プロファイルでは必須です。MINIMUM と BASIC WL にはありません。 |
| invoice.numer_ksef | any | いいえ | プラットフォームによるクリアランス後に割り当てられる KSeF 参照番号。形式:NIP(10) + 日付(8) + 連番(20) + チェックサム(2)。送信 XML には出力されず、ライフサイクルの追跡に使用されます。 |
| invoice.invoice_date | string | はい | 請求書発行日(BT-2) |
| invoice.charges_total | any | いいえ | 書類レベルの費用合計(BT-108) |
| invoice.currency_code | string | いいえ | ISO 4217 請求書通貨コード(BT-5) |
| invoice.delivery_date | any | いいえ | 実際の納品日(BT-72) |
| invoice.document_uuid | any | いいえ | グローバル一意の書類識別子。<cbc:ID> の直後にある兄弟要素として <cbc:UUID> で出力されます。正式な EN 16931 BT ではありませんが、複数の Peppol 管轄区域の CIUS プロファイルで必須です(例:PINT AE BTAE-07、PINT-SG BT-SG-003)。ほとんどの EN 16931 プロファイルでは不要なため、基本モデルでは任意です。この項目を必須とする国別サブクラスでは、必須として再宣言してください。 |
| invoice.payment_means | any | いいえ | 支払指示(BG-16) |
| invoice.payment_terms | any | いいえ | 支払条件の自由記述テキスト(BT-20) |
| invoice.invoice_number | string | はい | 請求書番号(BT-1) |
| invoice.prepaid_amount | any | いいえ | 前払金額(BT-113) |
| invoice.buyer_reference | any | いいえ | 買い手参照情報/ルーティング ID(BT-10)。XRechnung および公共部門の買い手では必須です。 |
| invoice.rounding_amount | any | いいえ | 丸め金額(BT-114) |
| invoice.allowances_total | any | いいえ | 書類レベルの値引き合計(BT-107) |
| invoice.business_process | any | いいえ | BT-23 ビジネスプロセスタイプ。UBL では <cbc:ProfileID>、CII では <ram:BusinessProcessSpecifiedDocumentContextParameter><ram:ID> として出力されます。BT-24(仕様識別子)を格納する `profile` とは異なります。 |
| invoice.invoice_type_code | string | いいえ | UNCL1001 書類タイプコード(BT-3)。380=請求書、381=クレジットノート |
| invoice.project_reference | any | いいえ | プロジェクト参照情報(BT-11) |
| invoice.allowances_charges | array | いいえ | 書類レベルの値引き(BG-20)および費用(BG-21) |
| invoice.billing_period_end | any | いいえ | 請求期間終了日(BT-74) |
| invoice.contract_reference | any | いいえ | 契約参照情報(BT-12) |
| invoice.billing_period_start | any | いいえ | 請求期間開始日(BT-73) |
| invoice.tax_exclusive_amount | any | はい | VAT抜きの請求書合計額(BT-109) |
| invoice.tax_inclusive_amount | any | はい | VAT込みの請求書合計額(BT-112) |
| invoice.preceding_invoice_date | any | いいえ | 先行請求書の発行日(BT-26) |
| invoice.sum_of_line_net_amounts | any | はい | 請求書明細の正味金額の合計(BT-106) |
| invoice.purchase_order_reference | any | いいえ | 発注書の参照番号(BT-13) |
| invoice.preceding_invoice_reference | any | いいえ | クレジットノートの先行請求書参照番号(BT-25) |
詳細
mcp-ksef-pl 🇵🇱
ポーランドの電子請求書に対応し、KSeF(FA(2))およびPeppol BIS Billing 3.0 / EN 16931に準拠したツールを提供する Python MCP サーバーです。AI エージェント(Claude、IDE)が、請求書の生成、検証、Krajowy System e-Faktur(KSeF)への送信、およびポーランドの納税者識別番号(NIP、REGON)の検証を行えるようにします。
はじめに
このパッケージは、欧州の電子請求書 MCP サーバー向け共有基盤ライブラリであるmcp-einvoicing-coreをベースに構築されています。OAuth2 HTTP クライアント、トークンキャッシュ、データモデル、ログユーティリティ、例外階層を提供します。
mcp-einvoicing-coreは依存関係として自動的にインストールされるため、追加の手順は不要です。
インストール
PyPI 経由(推奨)
pip install mcp-ksef-pl
事前にインストールせずにuvxを使うこともできます。
uvx mcp-ksef-pl
ソースから
git clone https://github.com/cmendezs/mcp-ksef-pl.git
cd mcp-ksef-pl
uv sync --all-extras
設定(環境変数)
| 変数 | デフォルト | 説明 |
|---|---|---|
KSEF_ENVIRONMENT | test | KSeF 環境:productionまたはtest |
KSEF_SESSION_TOKEN | — | KSeF セッショントークン(MF とのチャレンジ・レスポンスフローで取得) |
KSEF_NIP | — | 請求書を送信する事業体の NIP |
KSEF_TIMEOUT | 30 | HTTP リクエストのタイムアウト(秒) |
KSEF_VERIFY_MF_KEY_PINNING | false | MF 暗号化証明書に対する SPKI SHA-256 ピンニングを強制します。有効な環境のフィンガープリントが設定されるまでは、trueに設定しても何も行いません |
EINVOICING_PEPPOL_CODELIST_DIR | — | Peppol コードリストツールに必要な、OpenPeppol eDEC Code Lists の独自コピーを含むローカルディレクトリ(このパッケージには含まれていません。mcp-einvoicing-core README を参照) |
EINVOICING_EN16931_CODELIST_DIR | — | EN 16931 コードリストツールに必要な、CEF「Digital Building Blocks」EN 16931 セマンティックコードリストの独自コピーを含むローカルディレクトリ(同梱されていません。mcp-einvoicing-core README を参照) |
EUSR/TSR レポートツールおよび MLS ツールで Schematron 検証を行うには、[xslt2]エクストラ(pip install "mcp-ksef-pl[xslt2]")も必要です。
Claude Desktop との連携
claude_desktop_config.jsonファイルに次の設定を追加してください。
{
"mcpServers": {
"ksef-pl": {
"command": "uvx",
"args": ["mcp-ksef-pl"],
"env": {
"KSEF_ENVIRONMENT": "test",
"KSEF_SESSION_TOKEN": "<your-ksef-session-token>",
"KSEF_NIP": "<your-nip>"
}
}
}
}
Cursor との連携
Cursor は stdio 経由で MCP サーバーをサポートしています。次の場所に設定を追加してください。
- グローバル(すべてのプロジェクト):
~/.cursor/mcp.json - プロジェクトごと(このリポジトリのみ):
.cursor/mcp.json
{
"mcpServers": {
"ksef-pl": {
"command": "uvx",
"args": ["mcp-ksef-pl"],
"env": {
"KSEF_ENVIRONMENT": "test",
"KSEF_SESSION_TOKEN": "<your-ksef-session-token>",
"KSEF_NIP": "<your-nip>"
}
}
}
}
変更を保存した後、Cursor ウィンドウを再読み込みしてください(Ctrl+Shift+P → ウィンドウを再読み込み)。
Kiro との連携
Kiro は専用の設定ファイルを通じて MCP サーバーをサポートしています。
- グローバル:
~/.kiro/settings/mcp.json - ワークスペース:
.kiro/settings/mcp.json
{
"mcpServers": {
"ksef-pl": {
"command": "uvx",
"args": ["mcp-ksef-pl"],
"env": {
"KSEF_ENVIRONMENT": "test",
"KSEF_SESSION_TOKEN": "<your-ksef-session-token>",
"KSEF_NIP": "<your-nip>"
},
"disabled": false,
"autoApprove": []
}
}
}
セキュリティ上のヒント:トークンを直接入力する代わりに、
"KSEF_SESSION_TOKEN": "${KSEF_SESSION_TOKEN}"という構文を使用してください。Kiro は起動時にシェルの環境 変数を解決します。
利用可能なツール
FA(3) / FA(2) 請求書の処理
| ツール | 説明 |
|---|---|
generate_fa3_invoice | KSeF 準拠の FA(3) XML 請求書を生成します(KSeF API v2 への送信に必要です) |
generate_fa2_invoice | KSeF 準拠の FA(2) XML 請求書を生成します(旧形式、読み取り専用で使用) |
validate_fa3_invoice | FA(3) XML を検証します:XSD 検証および FA(3) 固有のビジネスルール |
validate_fa2_invoice | FA(2) XML を検証します:XSD 検証(スキーマが利用可能な場合)およびビジネスルール |
parse_fa2_invoice | FA(2) XML を構造化された辞書に解析します |
公式の FA(2) および FA(3) XSD スキーマはパッケージ内(src/mcp_ksef_pl/schemas/)に含まれており、
importlib.resources 経由で自動的に読み込まれます。手動でのダウンロードや設定は
不要です。validate_fa2_invoice と validate_fa3_invoice は、どのインストール環境でも、
最初から完全な XSD 検証を実行します。
KSeF のライフサイクル
| ツール | 説明 |
|---|---|
submit_invoice_to_ksef | FA(3) 請求書を KSeF プラットフォームに送信し、参照番号を返します |
get_ksef_invoice_status | 参照番号を使って請求書の処理状況を取得します |
search_ksef_invoices | 日付範囲と方向(販売者/購入者)を指定して、KSeF 内の請求書を検索します |
識別番号の検証
| ツール | 説明 |
|---|---|
validate_polish_nip | チェックサムアルゴリズムを使って、NIP(10 桁の納税者識別番号)を検証します |
validate_polish_regon | チェックサムアルゴリズムを使って、REGON(9 桁または 14 桁の登録番号)を検証します |
Peppol / EN 16931
| ツール | 説明 |
|---|---|
generate_peppol_invoice | Peppol BIS Billing 3.0 / EN 16931 に準拠した UBL 2.1 請求書を生成します |
validate_peppol_invoice | CEN EN 16931 基本 Schematron ルール(en16931-base-only スコープ。Peppol 固有のオーバーレイは検証しません)に照らして UBL 2.1 Peppol 請求書を検証します |
Peppol ネットワークツール
Peppol 参加者の検索、サービスエンドポイントの検索、DNS のみの診断、AS4 送信、Peppol Directory 検索、および OpenPeppol eDEC コードリストツールは、共有コア Peppol ツールプラグイン(mcp_einvoicing_core.peppol.tools.register_peppol_tools)によって提供されます。これらは、ポーランド固有の識別子アダプターとともに server.py でマウントされます。NIP のみ(例:1234563218)の識別子は 9945:<digits> Peppol スキーム(OpenPeppol eDEC 参加者識別子スキームのコードリストに基づく PL:VAT)に正規化され、すでにスキームが付与された識別子(例:9945:1234563218)はそのまま渡されます。generate_peppol_invoice を使う前に、これらのツールで PEF(公共調達の B2G 請求書向けポーランド Peppol アクセスポイント)の登録状況を確認してください。
peppol_send は、mcp-einvoicing-core v1.20.0 以降、実際の wsse:Security 署名を使って送信メッセージに署名します(以前は署名を計算していましたが、破棄していました。CHANGELOG.md v0.8.0 を参照)。
| ツール | 説明 |
|---|---|
peppol_lookup_participant | 事業者が Peppol ネットワークに登録されているか確認します。登録状況と対応するドキュメントタイプを返します |
peppol_get_service_endpoint | 参加者のドキュメントタイプに対応する AS4 エンドポイントを取得します |
resolve_peppol_dns | SMP への到達性とは独立した DNS のみ(SML)診断 |
peppol_send | AS4 経由で UBL/CII 請求書を送信します |
peppol_directory_search | 参加者、名称、国、またはドキュメントタイプで公開 Peppol Directory を検索します |
list_participant_id_schemes, list_document_type_ids, list_process_ids, list_spis_use_case_ids | OpenPeppol eDEC コードリストの検索(EINVOICING_PEPPOL_CODELIST_DIR が必要です) |
check_document_type_id_in_codelist, check_process_id_in_codelist, check_participant_id_scheme_in_codelist, get_peppol_codelist_version | OpenPeppol eDEC コードリストの確認とバージョン情報の取得 |
これらのツールのパラメーターに関する詳細は、mcp-einvoicing-core README を参照してください。
Peppol のレポートとステータス用ツール
v0.8.0 で、オプトイン方式のコアプラグイン 3 つを通じて追加され、server.py で無条件にマウントされます。追加機能またはデータディレクトリがない場合は、登録時ではなく呼び出し時に、明確なエラーが発生します。
| ツール | プラグイン | 説明 |
|---|---|---|
validate_eusr_report | register_peppol_reporting_tools | エンドユーザー統計レポート(XSD、次に Schematron)を検証します。[xslt2] 追加機能が必要です。 |
validate_tsr_report | register_peppol_reporting_tools | トランザクション統計レポート(XSD、次に Schematron)を検証します。[xslt2] 追加機能が必要です。 |
validate_mls_message | register_peppol_mls_tools | メッセージレベルステータス文書(UBL ApplicationResponse-2 のサブセット)を検証します。[xslt2] 追加機能が必要です。 |
build_mls_message | register_peppol_mls_tools | 文書レベルの MLS 応答を作成します。[xslt2] 追加機能が必要です。 |
list_*/check_* のペア 13 組、get_en16931_codelist_version | register_en16931_codelist_tools | EN 16931 の意味コードリストの検索/チェック(単位、VAT カテゴリなど)を行います。EINVOICING_EN16931_CODELIST_DIR が必要です。 |
これらのツールのパラメーターに関する詳細なドキュメントは、mcp-einvoicing-core の README をご覧ください。
KSeF 認証
KSeF API v2 では、AccessToken を発行するために、複数の手順からなるチャレンジ/引き換えフローを使用します。この MCP サーバーでは取得済みのトークンを受け付けますが、署名手順を自動化することはできません(認定電子署名が必要です)。
手順ごとのフロー
-
アカウントの設定。 KSeF ポータル(https://ksef.mf.gov.pl/)に登録します。対象の環境(テストまたは本番)を選択します。テスト環境は
https://ksef-test.mf.gov.pl/です。 -
チャレンジのリクエスト。 KSeF API を呼び出して、チャレンジを含む XML エンベロープを取得します。
curl -s https://ksef-test.mf.gov.pl/auth/challenge \ -H "Accept: application/json" \ -d '{"contextIdentifier": {"type": "onip", "identifier": "YOUR_NIP"}}' \ -H "Content-Type: application/json"応答には
challenge文字列とtimestampが含まれます。 -
チャレンジへの署名。 チャレンジを含む
<InitSessionTokenRequest>XML エンベロープを作成し、認定電子署名で署名します。以下の署名ツールが利用できます。- 認定電子署名プロバイダー:KIR(Szafir)、Certum、Sigillum
podpis.gov.pl(政府の署名ポータル)- Profil Zaufany(信頼プロファイル):https://www.podatki.gov.pl/ksef/
PKCS#12 証明書と
xmlsec1を使用する例:# Build the challenge XML (template at specs/przyklad-wyzwania.xml) xmlsec1 --sign --pkcs12 your-cert.p12 --pwd "password" \ --output signed-challenge.xml challenge-template.xml -
署名済みチャレンジの送信。 署名済み XML を POST して、
authOperation参照を受け取ります。curl -s https://ksef-test.mf.gov.pl/auth/xades-signature \ -H "Content-Type: application/octet-stream" \ --data-binary @signed-challenge.xml -
AccessToken の引き換え。 認証済みの操作を AccessToken と交換します。
curl -s https://ksef-test.mf.gov.pl/auth/token/redeem \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <referenceNumber-or-authOperation-token-from-step-4>"応答には
accessToken.tokenとaccessToken.context.referenceNumberが含まれます。 -
トークンの設定。 この MCP サーバー用にトークンをエクスポートします。
export KSEF_SESSION_TOKEN="<the AccessToken from step 5>"トークンの有効期間は、発行から約 2 時間です(MF のドキュメントによる)。有効期限が切れたら、手順 2~5 を繰り返します。
参考資料
- KSeF 技術ドキュメント:https://www.podatki.gov.pl/ksef/dokumentacja-techniczna-ksef/
- 認証仕様(CIRFMF):https://github.com/CIRFMF/ksef-docs/blob/main/uwierzytelnianie.md
- インタラクティブセッション仕様(CIRFMF):https://github.com/CIRFMF/ksef-docs/blob/main/sesja-interaktywna.md
- FA(3) 移行のお知らせ:
specs/ksef-v2-fa3-migration-announcement-20250630.pdf
アーキテクチャ
このサーバーは、AI エージェントと KSeF プラットフォームおよび Peppol ネットワーク間のインテリジェントな通信インターフェイスとして機能します。
[ ERP System / Application ] <--> [ MCP Server ] <--> [ KSeF (MF) / Peppol Network ]
^ |
| v
[ AI Agent (Claude) ] <--- (FA(2) / EN 16931)
ベンダー中立性
このサーバーは標準自体を実装しており、文書の作成、検証、署名をローカルで行います。商用の請求書プラットフォーム用クライアントではなく、署名キーや認証情報が自社のインフラストラクチャの外に出ることはありません。
請求書は仲介業者を介さず、自社の認証トークンを使って KSeF に直接送信されます。
テスト
# Run unit tests
uv run pytest tests/ -v
貢献
貢献を歓迎します。ガイドラインについては CONTRIBUTING.md をご覧ください。
その他の電子インボイス MCP サーバー
| 国 | サーバー |
|---|---|
| 🌍 グローバル | mcp-einvoicing-core |
| 🇧🇪 ベルギー | mcp-einvoicing-be |
| 🇧🇷 ブラジル | mcp-nfe-br |
| 🇫🇷 フランス | mcp-facture-electronique-fr |
| 🇩🇪 ドイツ | mcp-einvoicing-de |
| 🇮🇳 インド | mcp-einvoicing-in |
| 🇮🇹 イタリア | mcp-fattura-elettronica-it |
| 🇲🇽 メキシコ | mcp-cfdi-mx |
| 🇵🇱 ポーランド | mcp-ksef-pl |
| 🇸🇬 シンガポール | mcp-invoicenow-sg |
| 🇪🇸 スペイン | mcp-facturacion-electronica-es |
| 🇦🇪 アラブ首長国連邦 | mcp-einvoicing-ae |
ライセンス
このプロジェクトは Apache 2.0 ライセンスの下で配布されています。 詳細については LICENSE ファイルをご覧ください。完全なバージョン履歴については、CHANGELOG.md をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。