Mcp Ksef Pl

io.github.cmendezs由 GitHub 账号 cmendezs 发布v0.10.1更新于 Oct 24, 2026

Polish e-invoicing MCP: KSeF API v2, FA(3)/FA(2) XML, Peppol BIS 3.0, NIP/REGON validation.

已验证STDIO仅桌面金融商业与电商

概览

AI 生成的概览

面向波兰电子发票的本地 MCP 服务器,让助手生成、校验并提交 KSeF FA(3)/FA(2) 发票,并处理 Peppol BIS 3.0 文档。

可以做什么
生成并校验 KSeF 的 FA(3) 与 FA(2) XML 发票,并将 FA(2) XML 解析为结构化数据。向 KSeF 提交 FA(3) 发票、查询处理状态,并按日期范围和买卖方方向检索发票。通过校验和验证波兰 NIP 与 REGON 税号。生成并校验 Peppol BIS Billing 3.0 / EN 16931 的 UBL 发票。查询 Peppol 参与者、服务端点与 Peppol 目录,执行 DNS 诊断,通过 AS4 发送发票,并查询 OpenPeppol 与 EN 16931 代码表。校验 EUSR、TSR 与 MLS 报告文档并构建 MLS 响应。
适用场景
适合需要准备、检查或报送波兰 KSeF 电子发票,或处理 Peppol/EN 16931 发票与波兰税号的场景。最适合已具备 KSeF 与 Peppol 访问权限的开发者或财务团队。
运行要求
以 Python 包形式本地运行(pip 或 uvx)。需要 KSEF_NIP,以及另行通过 KSeF 挑战/签名/兑换流程取得的 KSEF_SESSION_TOKEN,该流程服务器无法自动完成;令牌约 2 小时后过期。KSEF_ENVIRONMENT 选择 test(默认)或 production。Peppol 代码表工具需要 EINVOICING_PEPPOL_CODELIST_DIR 与 EINVOICING_EN16931_CODELIST_DIR;EUSR/TSR/MLS 校验需要 xslt2 附加组件。需要访问 KSeF 与 Peppol 服务的网络。
安装前请注意
会话令牌是凭据,通过环境变量传入,应避免写入共享配置文件。向 KSeF 提交发票和通过 Peppol 发送都是真实的业务操作,会向税务机关和交易对方报送文件,且难以撤回。将 KSEF_ENVIRONMENT 设为 production 会指向正式系统。服务器本身不签署认证挑战,签名密钥不经过它。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Mcp Ksef Pl,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

mcp-ksef-pl 🇵🇱

English | Polski

[License] [PyPI version] [Python] [mcp-ksef-pl MCP server]

A Python MCP server providing tools for Polish electronic invoicing compliant with KSeF (FA(2)) and Peppol BIS Billing 3.0 / EN 16931. It enables AI agents (Claude, IDEs) to generate, validate, and submit invoices to the Krajowy System e-Faktur (KSeF), as well as validate Polish tax identifiers (NIP and REGON).


Introduction

This package is built on mcp-einvoicing-core, the shared base library for European e-invoicing MCP servers. It provides an OAuth2 HTTP client, token cache, data models, logging utilities, and an exception hierarchy.

mcp-einvoicing-core is installed automatically as a dependency, no additional step is required.

Installation

Via PyPI (recommended)

bash
pip install mcp-ksef-pl

Or without prior installation using uvx:

bash
uvx mcp-ksef-pl

From source

bash
git clone https://github.com/cmendezs/mcp-ksef-pl.gitcd mcp-ksef-pluv sync --all-extras

Configuration (environment variables)

VariableDefaultDescription
KSEF_ENVIRONMENTtestKSeF environment: production or test
KSEF_SESSION_TOKEN—KSeF session token (obtained through the challenge-response flow with MF)
KSEF_NIP—NIP of the entity submitting invoices
KSEF_TIMEOUT30HTTP request timeout in seconds
KSEF_VERIFY_MF_KEY_PINNINGfalseEnforce SPKI SHA-256 pinning on the MF encryption certificate. No-op until fingerprints are populated for the active environment, even when set to true
EINVOICING_PEPPOL_CODELIST_DIR—Local directory containing your own copy of the OpenPeppol eDEC Code Lists, required by the Peppol codelist tools (not bundled with this package; see mcp-einvoicing-core README)
EINVOICING_EN16931_CODELIST_DIR—Local directory containing your own copy of the CEF "Digital Building Blocks" EN 16931 semantic code lists, required by the EN 16931 codelist tools (not bundled; see mcp-einvoicing-core README)

The EUSR/TSR reporting and MLS tools additionally require the [xslt2] extra (pip install "mcp-ksef-pl[xslt2]") for Schematron validation.

Claude Desktop integration

Add the following configuration to your claude_desktop_config.json file:

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 integration

Cursor supports MCP servers via stdio. Add the configuration to:

  • Globally (all projects): ~/.cursor/mcp.json
  • Per project (this repository only): .cursor/mcp.json
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>"      }    }  }}

Reload the Cursor window (Ctrl+Shift+P → Reload Window) after saving changes.

Kiro integration

Kiro supports MCP servers through a dedicated configuration file:

  • Globally: ~/.kiro/settings/mcp.json
  • Workspace: .kiro/settings/mcp.json
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": []    }  }}

Security tip: instead of entering the token directly, use the syntax "KSEF_SESSION_TOKEN": "${KSEF_SESSION_TOKEN}", as Kiro resolves shell environment variables at startup.

Available tools

FA(3) / FA(2) invoice handling

ToolDescription
generate_fa3_invoiceGenerates a KSeF-compliant FA(3) XML invoice (required for KSeF API v2 submissions)
generate_fa2_invoiceGenerates a KSeF-compliant FA(2) XML invoice (legacy format, read-only use)
validate_fa3_invoiceValidates FA(3) XML: XSD validation and FA(3)-specific business rules
validate_fa2_invoiceValidates FA(2) XML: XSD validation (if the schema is available) and business rules
parse_fa2_invoiceParses FA(2) XML into a structured dictionary

The official FA(2) and FA(3) XSD schemas ship inside the package (src/mcp_ksef_pl/schemas/) and are loaded automatically via importlib.resources — no manual download or configuration is required. validate_fa2_invoice and validate_fa3_invoice run full XSD validation out of the box for every installation.

KSeF lifecycle

ToolDescription
submit_invoice_to_ksefSubmits an FA(3) invoice to the KSeF platform and returns a reference number
get_ksef_invoice_statusRetrieves the processing status of an invoice by its reference number
search_ksef_invoicesSearches invoices in KSeF by date range and direction (seller/buyer)

Identifier validation

ToolDescription
validate_polish_nipValidates a NIP (10-digit tax identification number) using a checksum algorithm
validate_polish_regonValidates a REGON (9- or 14-digit registry number) using a checksum algorithm

Peppol / EN 16931

ToolDescription
generate_peppol_invoiceGenerates a UBL 2.1 invoice compliant with Peppol BIS Billing 3.0 / EN 16931
validate_peppol_invoiceValidates a UBL 2.1 Peppol invoice against the CEN EN 16931 base Schematron rules (en16931-base-only scope — does not check the Peppol-specific overlay)

Peppol network tools

Peppol participant lookup, service-endpoint lookup, a DNS-only diagnostic, AS4 send, Peppol Directory search, and the OpenPeppol eDEC codelist tools are provided by the shared core Peppol tool plugin (mcp_einvoicing_core.peppol.tools.register_peppol_tools), mounted in server.py with a Poland-specific identifier adapter: a bare NIP (e.g. 1234563218) is normalized to the 9945:<digits> Peppol scheme (PL:VAT, per the OpenPeppol eDEC Participant Identifier Schemes code list); an already scheme-qualified identifier (e.g. 9945:1234563218) passes through unchanged. Use these tools to check PEF (Poland's Peppol Access Point for public-procurement B2G invoicing) registration status ahead of generate_peppol_invoice.

peppol_send signs outbound messages with a real wsse:Security signature as of mcp-einvoicing-core v1.20.0 (previously computed and discarded — see CHANGELOG.md v0.8.0).

ToolDescription
peppol_lookup_participantCheck whether a business is registered on the Peppol network; returns registration status and supported document types
peppol_get_service_endpointFetch the AS4 endpoint for a participant's document type
resolve_peppol_dnsDNS-only (SML) diagnostic, independent of SMP reachability
peppol_sendTransmit a UBL/CII invoice via AS4
peppol_directory_searchSearch the public Peppol Directory by participant, name, country, or document type
list_participant_id_schemes, list_document_type_ids, list_process_ids, list_spis_use_case_idsOpenPeppol eDEC codelist lookups (require EINVOICING_PEPPOL_CODELIST_DIR)
check_document_type_id_in_codelist, check_process_id_in_codelist, check_participant_id_scheme_in_codelist, get_peppol_codelist_versionOpenPeppol eDEC codelist checks and version reporting

See the mcp-einvoicing-core README for full parameter documentation on these tools.

Peppol reporting and status tools

Added in v0.8.0 via three opt-in core plugins, mounted unconditionally in server.py. Each raises a clear error at call time (not at registration) if its extra or data directory is missing.

ToolPluginDescription
validate_eusr_reportregister_peppol_reporting_toolsValidate an End User Statistics Report (XSD, then Schematron). Requires the [xslt2] extra.
validate_tsr_reportregister_peppol_reporting_toolsValidate a Transaction Statistics Report (XSD, then Schematron). Requires the [xslt2] extra.
validate_mls_messageregister_peppol_mls_toolsValidate a Message Level Status document (UBL ApplicationResponse-2 subset). Requires the [xslt2] extra.
build_mls_messageregister_peppol_mls_toolsBuild a document-level MLS response. Requires the [xslt2] extra.
13 list_*/check_* pairs, get_en16931_codelist_versionregister_en16931_codelist_toolsEN 16931 semantic code list lookups/checks (units, VAT categories, etc.). Require EINVOICING_EN16931_CODELIST_DIR.

See the mcp-einvoicing-core README for full parameter documentation on these tools.

KSeF authentication

KSeF API v2 uses a multi-step challenge/redeem flow to issue an AccessToken. This MCP server accepts an already-obtained token and cannot automate the signing step (it requires a qualified electronic signature).

Step-by-step flow

  1. Account setup. Register at the KSeF portal: https://ksef.mf.gov.pl/. Select the target environment (test or production). The test environment is at https://ksef-test.mf.gov.pl/.

  2. Request a challenge. Call the KSeF API to obtain a challenge XML envelope:

    bash
    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"

    The response contains a challenge string and a timestamp.

  3. Sign the challenge. Build an <InitSessionTokenRequest> XML envelope containing the challenge, then sign it with your qualified e-signature. Accepted signing tools:

    • Qualified e-signature providers: KIR (Szafir), Certum, Sigillum
    • podpis.gov.pl (government signing portal)
    • Profil Zaufany (Trusted Profile): https://www.podatki.gov.pl/ksef/

    Example using xmlsec1 with a PKCS#12 certificate:

    bash
    # 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
  4. Submit the signed challenge. POST the signed XML to receive an authOperation reference:

    bash
    curl -s https://ksef-test.mf.gov.pl/auth/xades-signature \  -H "Content-Type: application/octet-stream" \  --data-binary @signed-challenge.xml
  5. Redeem the AccessToken. Exchange the authenticated operation for an AccessToken:

    bash
    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>"

    The response contains accessToken.token and accessToken.context.referenceNumber.

  6. Set the token. Export the token for this MCP server:

    bash
    export KSEF_SESSION_TOKEN="<the AccessToken from step 5>"

    The token is valid for approximately 2 hours from issuance (per MF documentation). After expiry, repeat steps 2-5.

References

Architecture

The server acts as an intelligent communication interface between the AI agent and the KSeF platform and the Peppol network:

text
[ ERP System / Application ] <--> [ MCP Server ] <--> [ KSeF (MF) / Peppol Network ]          ^                           |          |                           v   [ AI Agent (Claude) ] <--- (FA(2) / EN 16931)

Vendor neutrality

This server implements the standard itself: it builds, validates, and signs the document locally. It is not a client for a commercial invoicing platform, and your signing keys and credentials never leave your own infrastructure.

Invoices go directly to KSeF with your own authentication token; no intermediary is involved.

Tests

bash
# Run unit testsuv run pytest tests/ -v

Contributing

Contributions are welcome — see CONTRIBUTING.md for guidelines.

Other e-invoicing MCP servers

CountryServer
🌍 Globalmcp-einvoicing-core
🇧🇪 Belgiummcp-einvoicing-be
🇧🇷 Brazilmcp-nfe-br
🇫🇷 Francemcp-facture-electronique-fr
🇩🇪 Germanymcp-einvoicing-de
🇮🇳 Indiamcp-einvoicing-in
🇮🇹 Italymcp-fattura-elettronica-it
🇲🇽 Mexicomcp-cfdi-mx
🇵🇱 Polandmcp-ksef-pl
🇸🇬 Singaporemcp-invoicenow-sg
🇪🇸 Spainmcp-facturacion-electronica-es
🇦🇪 United Arab Emiratesmcp-einvoicing-ae

License

This project is distributed under the Apache 2.0 license. See the LICENSE file for details. For the full version history, see CHANGELOG.md.

来源:README.md,提交 c89cf73

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.10.1最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分