Docs · Agents IA
Utiliser FacturX API depuis un agent
Branchez FacturX API sur votre agent IA. Il transforme les données de facture de votre ERP en Factur-X PDF/A-3 EN16931, lit les règles en erreur, corrige le JSON et vérifie le fichier produit, sans code d’intégration.
1. Le serveur MCP officiel
FacturX API a son serveur MCP officiel, publié sur PyPI (facturx-mcp, version 0.1.2). Il donne à votre agent quatre outils : contrôler une facture, la convertir en Factur-X,
valider un fichier et retrouver les champs liés à une règle EN16931. Il fonctionne en stdio pour un client de bureau et en
streamable HTTP pour un agent hébergé.
Installer le serveur
pip install facturx-mcp # installe aussi le SDK facturx-api
export FACTURX_BASE_URL=https://api.facturxapi.com
export FACTURX_API_KEY=VOTRE_CLE_API Puis lancez-le en stdio, pour un client de bureau :
facturx-mcp ou en HTTP, pour un agent hébergé :
facturx-mcp --transport streamable-http --port 8765 # http://127.0.0.1:8765/mcp
Déclaration type d’un serveur stdio dans un client MCP (format mcpServers) :
{
"mcpServers": {
"facturx": {
"command": "facturx-mcp",
"env": {
"FACTURX_BASE_URL": "https://api.facturxapi.com",
"FACTURX_API_KEY": "VOTRE_CLE_API"
}
}
}
} Dans Claude Code
claude mcp add facturx --scope project -e FACTURX_BASE_URL=https://api.facturxapi.com -e FACTURX_API_KEY=VOTRE_CLE_API -- uvx facturx-mcp
Le nom facturx vient avant les options. Le serveur est enregistré pour le dossier du projet ; claude mcp list l’affiche alors « Pending approval ».
Dans Codex
codex mcp add facturx --env FACTURX_BASE_URL=https://api.facturxapi.com --env FACTURX_API_KEY=VOTRE_CLE_API -- uvx facturx-mcp
Ces deux commandes lancent le serveur avec uvx : il faut uv installé. Remplacez VOTRE_CLE_API par votre clé.
Essayé le 11/11/2026, avec la version 0.1.1 du serveur, dans Claude Code 2.1.322 et Codex CLI 0.167.0 avec l’outil facturx_explain_error. Les outils qui demandent une clé (facturx_dry_run, facturx_convert, facturx_validate) ont été essayés le 06/11/2026, avec la version 0.1.1, avec le client MCP officiel en Python. La version 0.1.2 n’a pas été essayée dans ces clients. Cursor : non essayé.
Notre serveur s’installe uniquement depuis PyPI. Le paquet npm qui porte le même nom (facturx-mcp sur npm)
n’est pas le nôtre.
Sans agent, les mêmes appels existent en SDK : pip install facturx-api (Python) et
npm install @facturxapi/sdk (Node.js), version 0.1.2. Sources :
github.com/facturxapi/sdk.
2. Obtenir une clé
Créez une clé Sandbox sur /api-key, sans carte bancaire. Le serveur lit deux variables d’environnement, une seule est obligatoire :
- FACTURX_API_KEY
- Votre clé API (en-tête
X-API-Key). - FACTURX_BASE_URL
- Facultative depuis la 0.1.2 : la production (
https://api.facturxapi.com) est l’hôte par défaut ; obligatoire en 0.1.1.
3. Les quatre outils exposés
Chaque description dit à l’agent quand appeler l’outil, ce qu’il renvoie et ce qu’il consomme. Le serveur indique aussi l’ordre : contrôle d’abord, conversion seulement quand le contrôle répond ready.
| Outil | Ce qu’il fait | Ce qu’il consomme |
|---|---|---|
facturx_dry_run (invoice, validation_target?, output?) | Contrôle le JSON de facture complet avant toute génération. Renvoie ready (vrai seulement quand generationReadiness.status vaut « ready »), le détail de ce qui bloque, request_id et idempotency_key. Ce qu’il consomme : Aucune facture décomptée. | Aucune facture décomptée. |
facturx_convert (invoice, out_dir, validation_target?, output?, idempotency_key?) | Génère factur-x.pdf (PDF/A-3 avec XML embarqué) et factur-x.xml dans out_dir. Renvoie chemins, tailles, SHA-256, la cible et son statut, et l’idempotency_key. Ce qu’il consomme : 1 facture du quota. Relancé avec la même idempotency_key après une coupure, l’appel n’est pas facturé deux fois. | 1 facture du quota. Relancé avec la même idempotency_key après une coupure, l’appel n’est pas facturé deux fois. |
facturx_validate (file_path, validation_target?) | Valide un Factur-X PDF ou un XML CII présent sur le disque. Renvoie valid, validationStatus, le profil, la cible et les dix premières erreurs. Ce qu’il consomme : 1 facture du quota par rapport rendu, que le fichier soit valide ou non. Un appel refusé (clé, format, quota atteint) ou interrompu par une erreur technique de notre côté n’est pas décompté. | 1 facture du quota par rapport rendu, que le fichier soit valide ou non. Un appel refusé (clé, format, quota atteint) ou interrompu par une erreur technique de notre côté n’est pas décompté. |
facturx_explain_error (code_or_rule) | Donne, pour une règle EN16931 ou des règles françaises (BR-CO-15…), un terme métier (BT-1…) ou un chemin JSON (totals.gross…), les champs concernés, BT, règle, XPath CII, exigence, lus dans le contrat d’intégration public. Ce qu’il consomme : Sans clé API. | Sans clé API. |
4. Une session d’agent, du JSON ERP au PDF vérifié
Les réponses des outils ci-dessous sont celles d’une session enregistrée le 6 novembre 2026 sur l’environnement de test (valeurs exactes, sorties abrégées).
-
Vous (demande d’exemple)
Voici l’export JSON de la facture X08-DEMO-001 de notre ERP. Produis le Factur-X EN16931 dans ./out et vérifie-le.
-
Agent → facturx_explain_error
{ "code_or_rule": "BR-CO-15" }→ 3 champs liés : totals.net (BT-109), totals.tax (BT-110), totals.gross (BT-112), lus dans GET /api/v1/integration-contract.
BR-CO-15 : total TTC = total HT + total TVA. L’agent contrôle ces trois montants de l’export avant d’appeler l’API.
-
Agent → facturx_dry_run
Extrait abrégé, non exécutable
{ "invoice": { …facture X08-DEMO-001… } }→ ready: true — generationReadiness « ready », 0 donnée bloquante.
-
Agent → facturx_convert
Extrait abrégé, non exécutable
{ "invoice": { … }, "out_dir": "out" }→ Cible en16931 vérifiée. out/factur-x.xml (4 584 octets, SHA-256 f332975e…e03c) et out/factur-x.pdf (20 624 octets).
-
Agent → facturx_validate
{ "file_path": "out/factur-x.pdf", "validation_target": "en16931" }→ valid: true — profil EN16931, 0 erreur.
-
Agent
Factur-X généré dans out/factur-x.pdf : profil EN16931, cible vérifiée, 0 erreur à la validation.
Quand l’export ERP contient une erreur
- Quand un appel échoue, l’agent reçoit l’erreur de l’API telle quelle : status, code, api_message, request_id et idempotency_key. Il n’a pas à deviner ce qui s’est passé.
- Pour une règle (BR-…) ou un terme (BT-…), facturx_explain_error lui donne le champ JSON à corriger, son BT et, quand le contrat le donne, son emplacement dans le XML CII.
- Il corrige le JSON, relance facturx_dry_run, et ne lance facturx_convert que lorsque ready vaut true.