mcp-einvoicing-be đ§đȘ
English | Français | Nederlands
Introduction
mcp-einvoicing-be est un serveur MCP (Model Context Protocol) qui expose des outils pour la facturation electronique en Belgique. Il couvre lâensemble de lâecosysteme belge de facturation electronique : Peppol BIS Billing 3.0, UBL 2.1, et le reseau Mercurius pour la facturation du secteur public. Ce serveur fait partie de la famille mcp-einvoicing-* de serveurs specifiques a chaque pays, tous construits sur mcp-einvoicing-core, qui fournit le moteur de validation partage, les abstractions UBL et les utilitaires reseau Peppol.
Installation
Prérequis
- Python â„ 3.11
mcp-einvoicing-core(installé automatiquement en tant que dépendance)
Avec uv (recommandé)
uv add mcp-einvoicing-beAvec pip
pip install mcp-einvoicing-beDepuis les sources
git clone https://github.com/cmendezs/mcp-einvoicing-be.gitcd mcp-einvoicing-beuv sync --all-extrasConfiguration
Variables dâenvironnement
| Variable | Description | Par défaut |
|---|---|---|
BCE_API_KEY |
ClĂ© API pour la base de donnĂ©es dâentreprises belge BCE/KBO | - |
PEPPOL_ENV |
Environnement Peppol : production ou test |
production |
PEPPOL_SML_URL |
Remplacer lâURL de recherche SML | (auto) |
EINVOICING_PEPPOL_CODELIST_DIR |
Répertoire local contenant votre propre copie des listes de codes eDEC OpenPeppol, requis par les outils de listes de codes (non fourni avec ce paquet ; voir le README de mcp-einvoicing-core) |
â |
EINVOICING_EN16931_CODELIST_DIR |
Répertoire local contenant votre propre copie des listes de codes sémantiques EN 16931 du CEF « Digital Building Blocks », requis par les outils de listes de codes EN 16931 (non fourni ; voir le README de mcp-einvoicing-core) |
â |
LOG_LEVEL |
Niveau de journalisation : DEBUG, INFO, WARNING, ERROR |
INFO |
Les outils de rapport EUSR/TSR et MLS nĂ©cessitent en plus lâextra [xslt2] (pip install "mcp-einvoicing-be[xslt2]") pour la validation Schematron.
Intégration Claude Desktop
Pour utiliser ce serveur avec Claude, ajoutez cette configuration dans votre fichier claude_desktop_config.json :
{ "mcpServers": { "einvoicing-be": { "command": "uvx", "args": ["mcp-einvoicing-be"], "env": { "BCE_API_KEY": "votre-cle-api-bce", "PEPPOL_ENV": "production" } } }}Pour une installation de développement locale :
{ "mcpServers": { "einvoicing-be": { "command": "uv", "args": ["run", "mcp-einvoicing-be"], "cwd": "/path/to/mcp-einvoicing-be" } }}Intégration Cursor
Cursor prend en charge les serveurs MCP en stdio. Ajoutez la configuration dans :
- Global (tous les projets) :
~/.cursor/mcp.json - Projet (ce dépÎt uniquement) :
.cursor/mcp.json
{ "mcpServers": { "einvoicing-be": { "command": "uvx", "args": ["mcp-einvoicing-be"], "env": { "BCE_API_KEY": "votre-cle-api-bce", "PEPPOL_ENV": "production" } } }}Rechargez la fenĂȘtre Cursor (Ctrl+Shift+P puis Reload Window) pour prendre en compte les changements.
Intégration Kiro
Kiro prend en charge les serveurs MCP via son fichier de configuration dédié. Deux niveaux sont disponibles :
- Global (tous les projets) :
~/.kiro/settings/mcp.json - Workspace (ce dépÎt uniquement) :
.kiro/settings/mcp.json
{ "mcpServers": { "einvoicing-be": { "command": "uvx", "args": ["mcp-einvoicing-be"], "env": { "BCE_API_KEY": "votre-cle-api-bce", "PEPPOL_ENV": "production" }, "disabled": false, "autoApprove": [] } }}Le fichier est rechargé automatiquement à la sauvegarde. Vous pouvez également ouvrir la configuration via la palette de commandes (Cmd+Shift+P / Ctrl+Shift+P) puis MCP.
Conseil sĂ©curitĂ© Kiro : plutĂŽt que dâĂ©crire les secrets en clair, utilisez la syntaxe
"BCE_API_KEY": "${BCE_API_KEY}", Kiro rĂ©sout les variables dâenvironnement shell au dĂ©marrage.
Outils disponibles
validate_invoice_be
Valide une facture XML UBL 2.1. Les profils peppol-bis-3/pint-eu executent une validation Schematron reelle sur les regles de base CEN EN 16931 (~50 regles structurelles/arithmetiques BR-*, via le Schematron de base fourni par mcp-einvoicing-core â voir CHANGELOG.md v0.8.0). Cela ne verifie pas les regles de la couche specifique Peppol (aucun droit de redistribution confirme aupres dâOpenPeppol) ; les resultats portent un avertissement explicite de portee en16931-base-only et ne doivent pas etre lus comme une conformite Peppol BIS3 complete. Le profil mercurius applique la couche specifique Mercurius (schema de point de terminaison, reference de bon de commande) mais ne verifie pas la conformite EN 16931/Peppol BIS 3.0 de base.
| Parametre | Type | Requis | Description |
|---|---|---|---|
xml |
string |
oui | Contenu XML UBL 2.1 brut |
profile |
string |
non | peppol-bis-3 (par defaut) ou mercurius |
Retourne un ValidationResult avec valid, errors et warnings (chacun portant lâidentifiant de la rĂšgle Ă©chouĂ©e et un message lisible).
generate_invoice_be
GénÚre un document XML de facture électronique belge UBL 2.1 valide à partir de données structurées.
| ParamĂštre | Type | Requis | Description |
|---|---|---|---|
invoice_data |
object |
oui | Champs de la facture (voir le schéma InvoiceInput ci-dessous) |
profile |
string |
non | peppol-bis-3 (par defaut) |
Lâobjet InvoiceInput prend en charge :
{ "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 }]}Retourne une chaĂźne XML UBL 2.1.
transform_to_ubl
Convertit une charge utile JSON de facture structurée en XML UBL 2.1 sans validation complÚte. Utile comme premiÚre étape avant la validation.
| ParamĂštre | Type | Requis | Description |
|---|---|---|---|
data |
object |
oui | DonnĂ©es de facture source (mĂȘme format que InvoiceInput) |
lookup_vat_be
Recherche un numĂ©ro dâentreprise belge (numĂ©ro de TVA) dans la base de donnĂ©es publique BCE/KBO.
| ParamĂštre | Type | Requis | Description |
|---|---|---|---|
vat_number |
string |
oui | Numéro de TVA/entreprise belge, par ex. BE0428759497 ou 0123456789 |
Retourne le nom de lâentreprise, lâadresse enregistrĂ©e, le statut juridique et les codes dâactivitĂ© NACE.
Outils du réseau Peppol
La recherche de participant Peppol, la recherche de point de service, un diagnostic DNS seul, lâenvoi AS4, la recherche dans lâannuaire Peppol et les outils de listes de codes eDEC OpenPeppol sont fournis par le plugin dâoutils Peppol partagĂ© du core (mcp_einvoicing_core.peppol.tools.register_peppol_tools), montĂ© dans server.py avec un adaptateur dâidentifiant spĂ©cifique Ă la Belgique : un numĂ©ro de TVA belge simple (par ex. 0428759497 ou BE0428759497) est normalisĂ© vers le schĂ©ma Peppol 0208:<chiffres> (numĂ©ro dâentreprise KBO/BCE) ; un identifiant dĂ©jĂ qualifiĂ© par schĂ©ma (par ex. 0208:0428759497) passe inchangĂ©.
peppol_send signe dĂ©sormais les messages sortants avec une vĂ©ritable signature wsse:Security depuis mcp-einvoicing-core v1.20.0 (auparavant calculĂ©e puis ignorĂ©e â voir CHANGELOG.md v0.10.0).
| Outil | Description |
|---|---|
peppol_lookup_participant |
VĂ©rifie si une entreprise est enregistrĂ©e sur le rĂ©seau Peppol ; retourne le statut dâenregistrement et les types de documents pris en charge |
peppol_get_service_endpoint |
RĂ©cupĂšre le point de terminaison AS4 pour le type de document dâun participant |
resolve_peppol_dns |
Diagnostic DNS seul (SML), indĂ©pendant de lâaccessibilitĂ© SMP |
peppol_send |
Transmet une facture UBL/CII via AS4 |
peppol_directory_search |
Recherche dans lâannuaire public Peppol par participant, nom, pays ou type de document |
list_participant_id_schemes, list_document_type_ids, list_process_ids, list_spis_use_case_ids |
Recherches dans les listes de codes eDEC OpenPeppol (nécessitent 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 |
Vérifications de listes de codes eDEC OpenPeppol et rapport de version |
Voir le README de mcp-einvoicing-core pour la documentation complĂšte des paramĂštres de ces outils.
Outils de rapport et de statut Peppol
AjoutĂ©s en v0.10.0 via trois plugins core optionnels, montĂ©s inconditionnellement dans server.py. Chacun renvoie une erreur claire Ă lâappel (pas Ă lâenregistrement) si son extra ou son rĂ©pertoire de donnĂ©es est manquant.
| Outil | Plugin | Description |
|---|---|---|
validate_eusr_report |
register_peppol_reporting_tools |
Valide un End User Statistics Report (XSD, puis Schematron). NĂ©cessite lâextra [xslt2]. |
validate_tsr_report |
register_peppol_reporting_tools |
Valide un Transaction Statistics Report (XSD, puis Schematron). NĂ©cessite lâextra [xslt2]. |
validate_mls_message |
register_peppol_mls_tools |
Valide un document Message Level Status (sous-ensemble UBL ApplicationResponse-2). NĂ©cessite lâextra [xslt2]. |
build_mls_message |
register_peppol_mls_tools |
Construit une rĂ©ponse MLS au niveau du document. NĂ©cessite lâextra [xslt2]. |
13 paires list_*/check_*, get_en16931_codelist_version |
register_en16931_codelist_tools |
Recherches/vérifications des listes de codes sémantiques EN 16931 (unités, catégories de TVA, etc.). Nécessitent EINVOICING_EN16931_CODELIST_DIR. |
Voir le README de mcp-einvoicing-core pour la documentation complĂšte des paramĂštres de ces outils.
parse_ubl_invoice_be
Analyse une facture XML UBL 2.1 (Peppol BIS 3.0) en un dictionnaire structure. Repond a lâobligation de reception obligatoire de lâArt. 13quater de lâAR no. 1.
| Parametre | Type | Requis | Description |
|---|---|---|---|
xml_content |
string |
oui | Contenu XML UBL 2.1 brut de la facture |
Retourne {"success": true, "invoice": {...}, "warnings": []} en cas de succes, ou {"success": false, "error": "..."} en cas dâechec.
get_invoice_types_be
Retourne la liste des types de documents de facture electronique belges pris en charge (facture, note de credit, note de debit) avec leurs valeurs customizationID et profileID UBL pour chaque profil.
Aucun parametre dâentree requis.
B2G via Mercurius
Mercurius est la plateforme belge de facturation electronique pour le secteur public federal. Elle fonctionne comme un recepteur du reseau Peppol, et non comme une API separee. Les factures B2G sont soumises via le reseau Peppol standard en utilisant lâidentifiant de participant de lâautorite dans le schema 0208 (numero dâentreprise KBO/BCE a 10 chiffres). Le Point dâAcces achemine automatiquement la facture vers Mercurius. Aucun point de soumission specifique a Mercurius ni cle API nâest requis.
Architecture
mcp-einvoicing-be/âââ src/â âââ mcp_einvoicing_be/â âââ __init__.pyâ âââ server.py # Point d'entrĂ©e du serveur MCP et enregistrement des outilsâ âââ 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 # RĂšgles et ID de personnalisation Peppol BIS Billing 3.0â â âââ ubl.py # Constantes de namespace UBL 2.1 et utilitaires XMLâ â âââ pint_be.py # PINT-BE placeholder (supprime en v0.4.0)â â âââ mercurius.py # Configuration rĂ©seau Mercurius et rĂšgles de coucheâ âââ utils/â âââ __init__.pyâ âââ helpers.py # Normalisation de numĂ©ro de TVA, formatage de dates, 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âââ LICENSERelation avec mcp-einvoicing-core
mcp-einvoicing-core fournit :
- Utilitaires partagĂ©s dâanalyse et de sĂ©rialisation XML UBL 2.1/2.3
- RÚgles de validation de base EN 16931 (syntaxe + sémantique)
- Client réseau Peppol (recherche SMP, résolution SML)
- ModĂšles de base Pydantic communs (
BaseInvoice,BaseParty,BaseValidationResult)
mcp-einvoicing-be ajoute la logique specifique a la Belgique :
- Validation des regles de couche Mercurius (basee sur XPath) pour la facturation B2G
- Integration de la base de donnees dâentreprises BCE/KBO
- Normalisation des numeros de TVA belges (format BTW/TVA) et validation des digits de controle OGM/VCS
- Analyse de factures UBL 2.1 pour la reception obligatoire (Art. 13quater)
- Valeurs
customizationIDetprofileIDspecifiques au coin belge de Peppol
Contribuer
Les contributions sont les bienvenues. Veuillez ouvrir un ticket (issue) pour discuter des changements significatifs avant de soumettre une pull request.
git clone https://github.com/cmendezs/mcp-einvoicing-be.gitcd mcp-einvoicing-beuv sync --all-extrasuv run pytestuv run ruff check src testsuv run mypy srcToutes les pull requests doivent :
- Passer lâensemble de la suite de tests (
pytest) - Passer le linting (
ruff check) - Passer la vérification de types (
mypy) - Inclure ou mettre à jour les tests pour tout comportement modifié
- Faire rĂ©fĂ©rence aux identifiants de rĂšgle concernĂ©s lors de la correction dâun problĂšme de validation
Consultez CONTRIBUTING.md pour les directives complĂštes.
Autres serveurs MCP de facturation électronique
| Pays | Serveur |
|---|---|
| đ Global | mcp-einvoicing-core |
| đ§đȘ Belgique | mcp-einvoicing-be |
| đ§đ· BrĂ©sil | mcp-nfe-br |
| đ«đ· France | mcp-facture-electronique-fr |
| đ©đȘ Allemagne | mcp-einvoicing-de |
| đźđč Italie | mcp-fattura-elettronica-it |
| đČđœ Mexique | mcp-cfdi-mx |
| đ”đ± Pologne | mcp-ksef-pl |
| đžđŹ Singapour | mcp-invoicenow-sg |
| đȘđž Espagne | mcp-facturacion-electronica-es |
| đŠđȘ Ămirats arabes unis | mcp-einvoicing-ae |
Licence
Ce projet est sous licence Apache 2.0. Consultez LICENSE pour plus de dĂ©tails. Pour lâhistorique complet des versions, voir CHANGELOG.md.