If you're building systems that need to work with Polish electronic invoicing, this connects your AI agent directly to the KSeF (Krajowy System e-Faktur) platform and Peppol network. It handles FA(2) and FA(3) XML generation, validation against Ministry of Finance schemas, NIP and REGON tax identifier verification with checksum algorithms, and the full KSeF submission cycle including status polling and invoice search. It also generates Peppol BIS 3.0 compliant UBL invoices for cross-border transactions. Authentication requires obtaining a KSeF session token externally since the server can't automate the qualified signature flow, but once configured it gives Claude the ability to generate, validate, submit, and query invoices through the official government API.
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).
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.
The server acts as an intelligent communication interface between the AI agent and the KSeF platform and the Peppol network:
[ ERP System / Application ] <--> [ MCP Server ] <--> [ KSeF (MF) / Peppol Network ]
^ |
| v
[ AI Agent (Claude) ] <--- (FA(2) / EN 16931)
| Tool | Description |
|---|---|
generate_fa2_invoice | Generates a KSeF-compliant FA(2) XML invoice from input data |
validate_fa2_invoice | Validates FA(2) XML: XSD validation (if the schema is available) and business rules |
parse_fa2_invoice | Parses FA(2) XML into a structured dictionary |
| Tool | Description |
|---|---|
submit_invoice_to_ksef | Submits an FA(2) invoice to the KSeF platform and returns a reference number |
get_ksef_invoice_status | Retrieves the processing status of an invoice by its reference number |
search_ksef_invoices | Searches invoices in KSeF by date range and direction (seller/buyer) |
| Tool | Description |
|---|---|
validate_polish_nip | Validates a NIP (10-digit tax identification number) using a checksum algorithm |
validate_polish_regon | Validates a REGON (9- or 14-digit registry number) using a checksum algorithm |
| Tool | Description |
|---|---|
generate_peppol_invoice | Generates a UBL 2.1 invoice compliant with Peppol BIS Billing 3.0 / EN 16931 |
pip install mcp-ksef-pl
Or without prior installation using uvx:
uvx mcp-ksef-pl
git clone https://github.com/cmendezs/mcp-ksef-pl.git
cd mcp-ksef-pl
uv sync --all-extras
| Variable | Default | Description |
|---|---|---|
KSEF_ENVIRONMENT | test | KSeF environment: production, test, or demo |
KSEF_SESSION_TOKEN | — | KSeF session token (obtained through the challenge-response flow with MF) |
KSEF_NIP | — | NIP of the entity submitting invoices |
KSEF_TIMEOUT | 30 | HTTP request timeout in seconds |
KSeF requires signed XML (challenge-response) to obtain a session token. Signing
requires a qualified electronic signature or credentials from the MF portal and cannot
be automated by this MCP server. The session token must be obtained outside the server
and passed via KSEF_SESSION_TOKEN or the session_token parameter of the
submit_invoice_to_ksef tool.
Technical documentation for KSeF: https://www.podatki.gov.pl/ksef/dokumentacja-techniczna-ksef/
Add the following configuration to your claude_desktop_config.json file:
{
"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 supports MCP servers via stdio. Add the configuration to:
~/.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>"
}
}
}
}
Reload the Cursor window (Ctrl+Shift+P → Reload Window) after saving changes.
Kiro supports MCP servers through a dedicated configuration file:
~/.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": []
}
}
}
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.
Full XSD validation requires the official schema from the Ministry of Finance.
Without it, validate_fa2_invoice only executes business rules.
FA_VAT_v1-0E.xsd file in the src/mcp_ksef_pl/schemas/ directoryThe file is excluded from the repository (.gitignore), it must be downloaded manually.
Helper script: scripts/download_schemas.sh
# Run unit tests
uv run pytest tests/ -v
| Country | Server |
|---|---|
| 🌍 Global | mcp-einvoicing-core |
| 🇧🇪 Belgium | mcp-einvoicing-be |
| 🇧🇷 Brazil | mcp-nfe-br |
| 🇫🇷 France | mcp-facture-electronique-fr |
| 🇩🇪 Germany | mcp-einvoicing-de |
| 🇮🇹 Italy | mcp-fattura-elettronica-it |
| 🇵🇱 Poland | mcp-ksef-pl |
| 🇪🇸 Spain | mcp-facturacion-electronica-es |
This project is distributed under the Apache 2.0 license. See the LICENSE file for details.
Project maintained by cmendezs. For questions about the KSeF or Peppol implementation, open an Issue.
KSEF_SESSION_TOKENKSeF 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).
com.mcparmory/google-sheets
domdomegg/google-sheets-mcp
henilcalagiya/google-sheets-mcp
cct15/war-dashboard-data
moooonad/mcp-google-sheets-full
io.github.br0ski777/csv-to-json