mcp-einvoicing-be
This server provides tools for Belgian electronic invoicing, covering validation, generation, transformation, and lookup operations.
Validate Belgian E-Invoices (
validate_invoice_be): Validate a UBL 2.1 XML invoice against Belgian business rules (EN 16931) with a choice of profile overlays — Peppol BIS Billing 3.0, PINT-BE, or Mercurius — returning structured per-rule errors and warnings.Validate Against PINT-BE Rules (
validate_pint_be): Validate an invoice specifically against PINT-BE rules published by the National Bank of Belgium (NBB), which adds Belgian-specific mandatory elements on top of EN 16931.Generate Belgian E-Invoice XML (
generate_invoice_be): Generate a fully compliant UBL 2.1 Belgian e-invoice XML from structured data, applying the correctcustomizationIDandprofileIDfor Peppol BIS 3.0 or PINT-BE profiles.Transform JSON to UBL XML (
transform_to_ubl): Convert a structured JSON invoice payload to UBL 2.1 XML without validation — useful as a conversion step before separate validation or platform submission.Look Up Belgian VAT/Enterprise Numbers (
lookup_vat_be): Query the BCE/KBO public database for a Belgian enterprise number to retrieve legal name, address, legal form, status, and NACE activity codes.Check Peppol Participant Registration (
check_peppol_participant_be): Verify whether a Belgian company is registered as a Peppol participant via SMP/SML, returning registration status, supported document types, and the SMP access point URL.List Supported Invoice Document Types (
get_invoice_types_be): Retrieve supported Belgian e-invoice document types (invoice, credit note, debit note) with their UBLcustomizationIDandprofileIDvalues for each profile.
mcp-einvoicing-be 🇧🇪
English | Francais | Nederlands
Introduction
mcp-einvoicing-be is an MCP (Model Context Protocol) server that exposes tools for Belgian electronic invoicing. It covers the full Belgian e-invoicing ecosystem: Peppol BIS Billing 3.0, UBL 2.1, and the Mercurius network for public-sector invoicing. The server is part of the mcp-einvoicing-* family of country-specific servers, all built on top of mcp-einvoicing-core, which provides the shared validation engine, UBL abstractions, and Peppol network utilities.
Related MCP server: mcp-facture-electronique-fr
Installation
Requirements
Python ≥ 3.11
mcp-einvoicing-core(installed automatically as a dependency)
Using uv (recommended)
uv add mcp-einvoicing-beUsing pip
pip install mcp-einvoicing-beFrom source
git clone https://github.com/cmendezs/mcp-einvoicing-be.git
cd mcp-einvoicing-be
uv sync --all-extrasConfiguration
Environment variables
Variable | Description | Default |
| API key for the Belgian BCE/KBO enterprise database | — |
| Peppol environment: |
|
| Override the SML lookup URL | (auto) |
| Local directory containing your own copy of the OpenPeppol eDEC Code Lists, required by the codelist tools (not bundled with this package; see | — |
| 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 | — |
| Logging level: |
|
The EUSR/TSR reporting and MLS tools additionally require the [xslt2] extra (pip install "mcp-einvoicing-be[xslt2]") for Schematron validation.
Claude Desktop integration
To use this server with Claude, add this configuration to your claude_desktop_config.json file:
{
"mcpServers": {
"einvoicing-be": {
"command": "uvx",
"args": ["mcp-einvoicing-be"],
"env": {
"BCE_API_KEY": "your-bce-api-key",
"PEPPOL_ENV": "production"
}
}
}
}For a local development install:
{
"mcpServers": {
"einvoicing-be": {
"command": "uv",
"args": ["run", "mcp-einvoicing-be"],
"cwd": "/path/to/mcp-einvoicing-be"
}
}
}Cursor integration
Cursor supports MCP servers via stdio. Add the configuration in:
Global (all projects):
~/.cursor/mcp.jsonProject (this repository only):
.cursor/mcp.json
{
"mcpServers": {
"einvoicing-be": {
"command": "uvx",
"args": ["mcp-einvoicing-be"],
"env": {
"BCE_API_KEY": "your-bce-api-key",
"PEPPOL_ENV": "production"
}
}
}
}Reload the Cursor window (Ctrl+Shift+P then Reload Window) to apply the changes.
Kiro integration
Kiro supports MCP servers via its dedicated configuration file. Two levels are available:
Global (all projects):
~/.kiro/settings/mcp.jsonWorkspace (this repository only):
.kiro/settings/mcp.json
{
"mcpServers": {
"einvoicing-be": {
"command": "uvx",
"args": ["mcp-einvoicing-be"],
"env": {
"BCE_API_KEY": "your-bce-api-key",
"PEPPOL_ENV": "production"
},
"disabled": false,
"autoApprove": []
}
}
}The file is automatically reloaded on save. You can also open the config via the command palette (Cmd+Shift+P / Ctrl+Shift+P) then MCP.
Kiro security tip: rather than writing secrets in plain text, use the syntax
"BCE_API_KEY": "${BCE_API_KEY}", Kiro resolves shell environment variables at startup.
Available tools
validate_invoice_be
Validates a UBL 2.1 XML invoice. The peppol-bis-3/pint-eu profiles run real Schematron validation against the CEN EN 16931 base rules (~50 BR-* structural/arithmetic rules, via mcp-einvoicing-core's bundled base Schematron — see CHANGELOG.md v0.8.0). This does not check the Peppol-specific overlay rules (no confirmed OpenPeppol redistribution rights); results carry an explicit en16931-base-only scope warning and should not be read as full Peppol BIS3 conformance. The mercurius profile runs the Mercurius-specific overlay (endpoint scheme, PO reference) but does not check base EN 16931/Peppol BIS 3.0 compliance.
Parameter | Type | Required | Description |
|
| yes | Raw UBL 2.1 XML content |
|
| no |
|
Returns a ValidationResult with valid, errors, and warnings (each carrying the failed rule ID and a human-readable message).
generate_invoice_be
Generates a valid UBL 2.1 Belgian e-invoice XML document from structured data.
Parameter | Type | Required | Description |
|
| yes | Invoice fields (see |
|
| no |
|
The InvoiceInput object supports:
{
"invoice_number": "INV-2024-001",
"issue_date": "2024-01-15",
"due_date": "2024-02-14",
"currency_code": "EUR",
"supplier": { "name": "...", "vat_number": "BE0428759497", "address": {...} },
"customer": { "name": "...", "vat_number": "BE0403170701", "address": {...} },
"lines": [{ "description": "...", "quantity": 1, "unit_price": 100.00, "vat_rate": 21.0 }]
}Returns a UBL 2.1 XML string.
transform_to_ubl
Converts a structured JSON invoice payload to UBL 2.1 XML without full validation. Useful as a first step before validation.
Parameter | Type | Required | Description |
|
| yes | Source invoice data (same shape as |
lookup_vat_be
Looks up a Belgian enterprise number (VAT number) against the BCE/KBO public database.
Parameter | Type | Required | Description |
|
| yes | Belgian VAT/enterprise number, e.g. |
Returns enterprise name, registered address, legal status, and NACE activity codes.
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 BE-specific identifier adapter: a bare Belgian VAT number (e.g. 0428759497 or BE0428759497) is normalized to the 0208:<digits> Peppol scheme (KBO/BCE enterprise number); an already scheme-qualified identifier (e.g. 0208:0428759497) passes through unchanged.
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.10.0).
Tool | Description |
| Check whether a business is registered on the Peppol network; returns registration status and supported document types |
| Fetch the AS4 endpoint for a participant's document type |
| DNS-only (SML) diagnostic, independent of SMP reachability |
| Transmit a UBL/CII invoice via AS4 |
| Search the public Peppol Directory by participant, name, country, or document type |
| OpenPeppol eDEC codelist lookups (require |
| OpenPeppol 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.10.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.
Tool | Plugin | Description |
|
| Validate an End User Statistics Report (XSD, then Schematron). Requires the |
|
| Validate a Transaction Statistics Report (XSD, then Schematron). Requires the |
|
| Validate a Message Level Status document (UBL |
|
| Build a document-level MLS response. Requires the |
13 |
| EN 16931 semantic code list lookups/checks (units, VAT categories, etc.). Require |
See the mcp-einvoicing-core README for full parameter documentation on these tools.
parse_ubl_invoice_be
Parses a UBL 2.1 XML invoice (Peppol BIS 3.0) into a structured dict. Satisfies the mandatory reception capability required by Art. 13quater of Royal Decree no. 1.
Parameter | Type | Required | Description |
|
| yes | Raw UBL 2.1 XML invoice content |
Returns {"success": true, "invoice": {...}, "warnings": []} on success, or {"success": false, "error": "..."} on parse failure.
get_invoice_types_be
Returns the list of supported Belgian e-invoice document types (invoice, credit note, debit note) with their UBL customizationID and profileID values for each profile.
No input parameters required.
B2G via Mercurius
Mercurius is the Belgian federal public-sector e-invoicing platform. It operates as a Peppol network receiver, not a separate API. B2G invoices are submitted through the standard Peppol network using the authority's participant ID in the 0208 scheme (KBO/BCE 10-digit enterprise number). The Access Point routes the invoice to Mercurius automatically. No Mercurius-specific submission endpoint or API key is required.
Architecture
mcp-einvoicing-be/
├── src/
│ └── mcp_einvoicing_be/
│ ├── __init__.py
│ ├── server.py # MCP server entry point & tool registration
│ ├── tools/
│ │ ├── __init__.py
│ │ ├── validation.py # validate_invoice_be
│ │ ├── generation.py # generate_invoice_be
│ │ ├── transformation.py # transform_to_ubl
│ │ ├── parsing.py # parse_ubl_invoice_be
│ │ └── lookup.py # lookup_vat_be, get_invoice_types_be
│ ├── models/
│ │ ├── __init__.py
│ │ ├── invoice.py # InvoiceInput, InvoiceLine, ValidationResult
│ │ └── party.py # Supplier, Customer, Address
│ ├── standards/
│ │ ├── __init__.py
│ │ ├── peppol_bis_3.py # Peppol BIS Billing 3.0 rules & customization IDs
│ │ ├── ubl.py # UBL 2.1 namespace constants & XML helpers
│ │ ├── pint_be.py # PINT-BE placeholder (removed in v0.4.0)
│ │ └── mercurius.py # Mercurius network config & overlay rules
│ └── utils/
│ ├── __init__.py
│ └── helpers.py # VAT number normalization, date formatting, etc.
├── tests/
│ ├── __init__.py
│ ├── conftest.py
│ ├── test_tools/
│ │ ├── __init__.py
│ │ ├── test_validation.py
│ │ ├── test_generation.py
│ │ └── test_transformation.py
│ └── fixtures/
│ ├── invoice_valid_peppol.xml
│ ├── invoice_valid_pint_be.xml
│ └── invoice_invalid.xml
├── .github/
│ └── workflows/
│ ├── ci.yml
│ └── publish.yml
├── pyproject.toml
├── CHANGELOG.md
├── CONTRIBUTING.md
└── LICENSERelationship to mcp-einvoicing-core
mcp-einvoicing-core provides:
Shared UBL 2.1/2.3 XML parsing and serialization utilities
EN 16931 base validation rules (syntax + semantic)
Peppol network client (SMP lookup, SML resolution)
Common Pydantic base models (
BaseInvoice,BaseParty,BaseValidationResult)
mcp-einvoicing-be adds Belgium-specific logic on top:
Mercurius network overlay rule validation (XPath-based) for B2G invoicing
BCE/KBO enterprise database integration
Belgian VAT number normalization (BTW/TVA format) and OGM/VCS check-digit validation
UBL 2.1 invoice parsing for mandatory reception (Art. 13quater)
customizationIDandprofileIDvalues specific to the Belgian Peppol corner
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.
A Peppol access point is required, but any accredited access point speaks the same AS4 profile, so switching providers is a configuration change, not a code change.
Contributing
Contributions are welcome. Please open an issue to discuss significant changes before submitting a pull request.
git clone https://github.com/cmendezs/mcp-einvoicing-be.git
cd mcp-einvoicing-be
uv sync --all-extras
uv run pytest
uv run ruff check src tests
uv run mypy srcAll pull requests must:
Pass the full test suite (
pytest)Pass linting (
ruff check)Pass type checking (
mypy)Include or update tests for any changed behaviour
Reference the relevant rule ID(s) when fixing a validation issue
See CONTRIBUTING.md for full guidelines.
Other e-invoicing MCP servers
Country | Server |
🌍 Global | |
🇧🇪 Belgium | |
🇧🇷 Brazil | |
🇫🇷 France | |
🇩🇪 Germany | |
🇮🇳 India | |
🇮🇹 Italy | |
🇲🇽 Mexico | |
🇵🇱 Poland | |
🇸🇬 Singapore | |
🇪🇸 Spain | |
🇦🇪 United Arab Emirates |
License
This project is licensed under the Apache 2.0 — see LICENSE for details. For the full version history, see CHANGELOG.md.
Available Tools
50 toolsbuild_mls_messageA
Build a document-level MLS response and return it base64-encoded.
For per-line responses, build the document directly with
mcp_einvoicing_core.peppol.mls.build_mls.
Inputs: mls_id (required), issue_date (required), sender_value (required), response_code (required), +7 more. Returns: object
check_allowance_reason_codeA
Check whether code is a recognized allowance reason code.
Inputs: code (required). Returns: object
check_charge_reason_codeB
Check whether code is a recognized charge reason code.
Inputs: code (required). Returns: object
check_country_codeA
Check whether code is a recognized ISO 3166-1 alpha-2 country code.
Inputs: code (required). Returns: object
check_currency_codeA
Check whether code is a recognized ISO 4217 currency code.
Inputs: code (required). Returns: object
check_document_name_codeA
Check whether code is a recognized UNCL1001 document name code.
Inputs: code (required). Returns: object
check_document_type_id_in_codelistB
Check whether a (scheme, value) pair is a recognized Peppol document type identifier.
Requires EINVOICING_PEPPOL_CODELIST_DIR (see list_participant_id_schemes).
Searches all entries regardless of state, so a historical (deprecated
or removed) document type is still reported as found.
Inputs: value (required), scheme (required). Returns: object
check_eas_codeA
Check whether code is a recognized Electronic Address Scheme code.
Inputs: code (required). Returns: object
check_icd_codeC
Check whether code is a recognized ISO 6523 ICD code.
Inputs: code (required). Returns: object
check_item_type_codeB
Check whether code is a recognized item type identification code.
Inputs: code (required). Returns: object
check_mime_codeA
Check whether code is a recognized MIME type for embedded attachments.
Inputs: code (required). Returns: object
check_participant_id_scheme_in_codelistA
Check whether a 4-digit ISO 6523 ICD code (e.g. "0208") is a recognized Peppol scheme.
Requires EINVOICING_PEPPOL_CODELIST_DIR (see list_participant_id_schemes).
Inputs: icd (required). Returns: object
check_payment_means_codeA
Check whether code is a recognized UNCL4461 payment means code.
Inputs: code (required). Returns: object
check_process_id_in_codelistB
Check whether a (scheme, value) pair is a recognized Peppol process identifier.
Requires EINVOICING_PEPPOL_CODELIST_DIR (see list_participant_id_schemes).
Inputs: value (required), scheme (required). Returns: object
check_reference_qualifier_codeA
Check whether code is a recognized UNCL1153 reference qualifier code.
Inputs: code (required). Returns: object
check_vat_category_codeA
Check whether code is a recognized UNCL5305 VAT category code.
Inputs: code (required). Returns: object
check_vatex_codeA
Check whether code is a recognized VATEX VAT exemption reason code.
Inputs: code (required). Returns: object
generate_invoice_beA
Generate a valid UBL 2.1 Belgian e-invoice XML document from structured data.
Applies the correct customizationID and profileID for the selected Belgian Peppol profile. The output XML is ready for submission to the Peppol network or the Mercurius platform.
Returns a dict with:
xml: the generated UBL 2.1 XML stringcustomization_id: the UBL customizationID applied (BT-24)profile_id: the UBL profileID applied (BT-23)
Inputs: invoice_data (required), profile. Returns: object
get_en16931_codelist_versionA
Report the CEF EN 16931 code-list release version(s) currently configured locally.
Inputs: no named parameters. Returns: object
get_invoice_types_beA
Return the supported Belgian e-invoice document types.
Includes invoice (380), credit note (381), and debit note (383) with their
UBL customizationID and profileID values for each supported profile
(Peppol BIS Billing 3.0).
Inputs: no named parameters. Returns: object
get_peppol_codelist_versionA
Report the OpenPeppol eDEC code list release version(s) currently configured locally.
Inputs: no named parameters. Returns: object
list_allowance_reason_codesA
List allowance reason codes from the CEF EN 16931 code list.
Inputs: no named parameters. Returns: object
list_charge_reason_codesA
List charge reason codes from the CEF EN 16931 code list.
Inputs: no named parameters. Returns: object
list_country_codesA
List ISO 3166-1 alpha-2 country codes from the CEF EN 16931 code list.
Inputs: no named parameters. Returns: object
list_currency_codesA
List ISO 4217 currency codes from the CEF EN 16931 code list.
Inputs: no named parameters. Returns: object
list_document_name_codesA
List UNCL1001 document name codes from the CEF EN 16931 code list.
Inputs: no named parameters. Returns: object
list_document_type_idsA
List Peppol document type identifiers from the OpenPeppol eDEC code list.
Requires EINVOICING_PEPPOL_CODELIST_DIR (see list_participant_id_schemes).
Inputs: active_only. Returns: object
list_eas_codesA
List Electronic Address Scheme (EAS) codes from the CEF EN 16931 code list.
Inputs: no named parameters. Returns: object
list_icd_codesA
List ISO 6523 ICD codes from the CEF EN 16931 code list.
Inputs: no named parameters. Returns: object
list_item_type_codesA
List item type identification codes from the CEF EN 16931 code list.
Inputs: no named parameters. Returns: object
list_mime_codesA
List recognized MIME types for embedded attachments.
Inputs: no named parameters. Returns: object
list_participant_id_schemesA
List Peppol participant identifier (ICD) schemes from the OpenPeppol eDEC code list.
Requires EINVOICING_PEPPOL_CODELIST_DIR to point at a local copy of
the eDEC "Participant Identifier Schemes" GeneriCode export (not
bundled with this package, no confirmed redistribution rights, see
mcp_einvoicing_core.peppol.codelists module docstring).
Inputs: active_only. Returns: object
list_payment_means_codesA
List UNCL4461 payment means codes from the CEF EN 16931 code list.
Inputs: no named parameters. Returns: object
list_process_idsA
List Peppol process identifiers from the OpenPeppol eDEC code list.
Requires EINVOICING_PEPPOL_CODELIST_DIR (see list_participant_id_schemes).
Inputs: active_only. Returns: object
list_reference_qualifier_codesA
List UNCL1153 reference qualifier codes from the CEF EN 16931 code list.
Inputs: no named parameters. Returns: object
list_spis_use_case_idsA
List Peppol SPIS use case identifiers from the OpenPeppol eDEC code list.
Requires EINVOICING_PEPPOL_CODELIST_DIR (see list_participant_id_schemes).
Inputs: active_only. Returns: object
list_vat_category_codesA
List UNCL5305 VAT category codes from the CEF EN 16931 code list.
Inputs: no named parameters. Returns: object
list_vatex_codesA
List VATEX (VAT exemption reason) codes from the CEF EN 16931 code list.
Inputs: no named parameters. Returns: object
lookup_vat_beA
Look up a Belgian enterprise number against the BCE/KBO public database.
Accepts the number with or without the 'BE' prefix and with or without dots/spaces. Returns the enterprise's legal name, registered address, legal form, status, and NACE activity codes.
Optionally set the BCE_API_KEY environment variable for authenticated
access to the full BCE dataset.
Inputs: vat_number (required). Returns: object
parse_ubl_invoice_beA
Parse a UBL 2.1 XML invoice into a structured dict.
Accepts a Peppol BIS Billing 3.0 or EU PINT v1.0.1 UBL 2.1 document and extracts the EN 16931 core field set (header, parties, lines, tax breakdown, totals) plus Belgian extensions (OGM/VCS reference, endpoint scheme info).
Returns {"success": true, "invoice": {...}, "be_extensions": {...}, "warnings": []}
on success, or {"success": false, "error": "..."} on parse failure.
Inputs: xml_content (required). Returns: object
peppol_directory_searchA
Search the Peppol Directory for registered participants.
Public, unauthenticated search (no relation to SMP lookup). At least one of q/participant/name/country/doctype must be supplied.
Inputs: q, name, country, doctype, +4 more. Returns: object
peppol_get_service_endpointA
Fetch the AS4 endpoint for a Peppol participant's document type.
Resolves the SMP hostname via DNS, then fetches service metadata for
document_type_id. If the SMP returns a redirect, the result's
redirect_url is set and endpoint_url is None; callers must not
follow more than one redirect hop (SMP 1.4.0 §3.2).
Inputs: identifier (required), environment, document_type_id. Returns: object
peppol_lookup_participantA
Check whether a business is registered on the Peppol network.
Performs a DNS-over-HTTPS U-NAPTR lookup followed by an SMP service-group request to determine registration status and the list of supported document type identifiers.
Inputs: identifier (required), environment. Returns: object
peppol_sendA
Send a UBL/CII invoice to a Peppol participant via AS4.
Looks up the recipient's AS4 endpoint (SMP), builds the ebMS3/AS4 envelope, and transmits it using the supplied signing credentials.
Inputs: sender_id (required), certificate_path (required), private_key_path (required), invoice_xml_base64 (required), +4 more. Returns: object
resolve_peppol_dnsA
Resolve the SMP hostname for a Peppol participant via DNS only.
Performs the raw U-NAPTR (SML) lookup without fetching the SMP service group, useful for diagnosing whether a participant is registered in the SML independently of SMP reachability.
Inputs: identifier (required), environment. Returns: object
transform_to_ublA
Convert a structured JSON invoice payload to UBL 2.1 XML.
Unlike generate_invoice_be, this tool does not run validation after
transformation. Intended as a conversion step when the caller will validate
separately or submit directly to a platform that performs its own validation.
Returns a dict with:
xml: the generated UBL 2.1 XML stringwarnings: list of non-fatal issues detected during transformation
Inputs: data (required). Returns: object
validate_eusr_reportA
Validate a Peppol End User Statistics Report (EUSR) document.
Runs XSD structural validation, then Schematron business rules
(requires the [xslt2] optional extra).
Inputs: report_xml_base64 (required). Returns: object
validate_invoice_beA
Validate a UBL 2.1 XML invoice against Belgian business rules.
For 'peppol-bis-3'/'pint-eu': checks the CEN EN16931 base rules (structural + arithmetic/totals, ~50 BR-* rules) via a compiled Schematron. Does NOT check the Peppol-specific overlay (profile ID registration, EndpointID scheme, narrowed code lists) — the result's metadata.scope is "en16931-base-only", and a warning is included. This is not a full Peppol BIS3 conformance check; a document that passes may still be rejected by a real Peppol Access Point (no confirmed OpenPeppol redistribution rights for the overlay rules). For 'mercurius': applies the Mercurius-specific overlay rules only (endpoint scheme, PO reference) — also not full EN16931/Peppol base compliance. Returns a structured result with per-rule error and warning messages.
Inputs: xml (required), profile. Returns: object
validate_mls_messageA
Validate a Peppol Message Level Status (MLS) document.
Runs the bundled MLS Schematron rules (requires the [xslt2]
optional extra). No bespoke MLS XSD exists — full UBL 2.1 XSD
validation is out of scope.
Inputs: mls_xml_base64 (required). Returns: object
validate_tsr_reportA
Validate a Peppol Transaction Statistics Report (TSR) document.
Runs XSD structural validation, then Schematron business rules
(requires the [xslt2] optional extra).
Inputs: report_xml_base64 (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 50 tools
The tool set has many code-list helpers (list_*/check_*), but each targets a specific code list and descriptions clearly distinguish them. Minor overlap exists between check_icd_code and check_participant_id_scheme_in_codelist, and among Peppol lookup/send tools, but explicit scope wording mitigates confusion.
Almost all tools use snake_case with a verb_noun or verb_noun_context pattern (validate_invoice_be, list_eas_codes, check_eas_code). Some inconsistency appears with domain prefixes (peppol_lookup_participant) and the _be suffix, but the overall convention is predictable.
50 tools is excessive for this domain; many are paired list/check code-list operations that could be consolidated or exposed as a single parameterized tool. The count sits at the rubric's extreme-mismatch threshold.
Core e-invoicing lifecycle is covered: generation, validation, parsing, transformation, code lists, VAT lookup, Peppol discovery, sending, and report validation. Gaps include no full Peppol overlay validation (explicitly out of scope) and no receive/inbox operations, but the surface is largely complete for creation and submission workflows.
Maintenance
Related MCP Connectors
Generate, validate and read EN 16931 and Peppol BIS 3.0 e-invoices, in UBL and CII.
Validate, generate, convert and extract EN 16931 e-invoices for businesses.
Validate, generate & convert EU e-invoices (UBL, CII, XRechnung, Factur-X) — EN 16931 pre-validated.
Create and validate XRechnung, ZUGFeRD and Peppol e-invoices (KoSIT); Peppol lookup, rule help.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for DACH e-invoicing. Create XRechnung (UBL) and ZUGFeRD 2.3 (Factur-X CII) invoices, validate against EN 16931 rules, extract data from XML, and convert between UBL, CII and JSON formats.661 npm2MIT
- AlicenseAqualityBmaintenanceModel Context Protocol (MCP) server for French Electronic Invoicing (NF XP Z12-013). Provide tools to validate, generate, and explore API specifications for PDP/OD interoperability.34Apache 2.0
- AlicenseAqualityBmaintenanceModel Context Protocol (MCP) server for German Electronic Invoicing (ZUGFeRD 2.x / XRechnung 3.x). Provides tools to validate, generate, parse, and convert invoices compliant with EN 16931 and KoSIT.5049 PyPI2Apache 2.0
- AlicenseAqualityBmaintenanceModel Context Protocol (MCP) server for Spanish Electronic Invoicing. Provides tools to generate, validate, and submit invoices across VERI\*FACTU, Facturae/FACe, SII, TicketBAI, and Crea y Crece B2B.2042 PyPI3Apache 2.0