factuagent
Provides read-only SQL querying and analytics over invoice data stored in DuckDB, including invoices, invoice lines, and detected issues.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@factuagentliste les factures à vérifier et explique les anomalies détectées"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FactuAgent — agent IA de traitement des factures fournisseurs
Lit les factures PDF (Factur-X ou PDF classiques), extrait les données, contrôle leur cohérence, repère les fraudes et les doublons, et met le tout à disposition d'un agent IA via un serveur MCP.
EN — FactuAgent is an AI agent for French supplier invoices: Factur-X/CII parsing, LLM-based extraction for unstructured PDFs, business-rule validation (SIREN, VAT, IBAN, totals), fraud and duplicate detection, a DuckDB analytics store, and an MCP server so any AI assistant can query invoices in natural language.
Pourquoi ce projet
Depuis le 1er septembre 2026, toutes les entreprises françaises doivent pouvoir recevoir des factures électroniques ; les grandes entreprises et ETI doivent aussi en émettre, les PME et TPE suivront au 1er septembre 2027. Pendant la transition, les services comptables reçoivent un mélange de Factur-X et de PDF « à l'ancienne ». En parallèle, la fraude au changement de RIB (un faux courrier qui « met à jour » l'IBAN d'un fournisseur) reste un risque majeur pour les PME.
FactuAgent traite les deux flux dans un même pipeline et ne laisse passer en paiement que ce qui est cohérent.
Related MCP server: manager-mcp
Ce que ça fait
Étape | Détail |
1. Lecture Factur-X | Si le PDF embarque un XML CII (EN 16931), il est lu directement : 100 % fiable, zéro coût d'IA |
2. Extraction IA | Sinon, Claude extrait les champs via tool use avec un schéma JSON strict (Pydantic) |
3. Repli par règles | Sans clé d'API, ou si l'IA échoue, des règles (regex) prennent le relais sur les mises en page connues |
4. Contrôles métier | Clé de Luhn du SIREN, clé du n° de TVA intracommunautaire, IBAN (mod 97), HT + TVA = TTC, somme des lignes, délai de paiement légal (60 jours) |
5. Détection d'anomalies | Doublons, changement d'IBAN fournisseur, montant aberrant par rapport à l'historique |
6. Stockage analytique | DuckDB : |
7. Agent & MCP | Serveur MCP (7 outils) utilisable depuis Claude Desktop / Claude Code, plus un agent intégré en Python |
flowchart LR
A[PDF reçu] --> B{XML Factur-X<br/>embarqué ?}
B -- oui --> C[Parseur CII]
B -- non --> D[Texte pdfplumber]
D --> E{Clé API ?}
E -- oui --> F[Claude · tool use<br/>schéma Pydantic]
E -- non / échec --> G[Règles regex]
C & F & G --> H[Contrôles métier<br/>SIREN · TVA · IBAN · totaux]
H --> I[Anomalies<br/>doublon · IBAN changé · montant aberrant]
I --> J[(DuckDB)]
J --> K[Serveur MCP]
J --> L[CLI]
K --> M[Claude Desktop / Code<br/>ou agent intégré]Résultats
Évaluation sur 41 factures de démonstration générées (3 mises en page, 10 Factur-X, 7 anomalies injectées), en mode sans LLM :
Indicateur | Résultat |
Précision par champ — Factur-X | 100 % |
Précision par champ — mises en page tableau connues (règles) | 100 % |
Précision par champ — factures rédigées en texte libre (règles) | 0 % → envoyées en revue humaine |
Anomalies injectées détectées (rappel) | 7 / 7 |
Fausses alertes | 1 (montant aberrant, en simple avertissement) |
Lecture honnête de ces chiffres : les règles sont écrites pour les mises en page connues, leur 100 % ne dit
rien des factures réelles. Les factures rédigées en texte libre montrent leur limite, c'est exactement le
cas que l'extraction par LLM couvre (python eval/evaluate.py --llm). Rien n'est jamais validé à
l'aveugle : ce qui n'est pas extrait part en revue.
Rapport détaillé : eval/report.md.
Démarrage rapide
pip install -r requirements.txt
# 1. Générer le jeu de démo (41 PDF + vérité terrain)
python scripts/generate_invoices.py --out data/invoices
# 2. Traiter la boîte de réception
python -m factuagent.cli process data/invoices
# ✗ 034_classic.pdf [rules ] IBAN_CHANGED
# ✗ 041_doublon_021_classic_facturx.pdf [facturx] DUPLICATE
# 41 factures : 31 OK, 2 à vérifier, 8 à revoir
# 3. File de contrôle et synthèse fournisseurs
python -m factuagent.cli review
python -m factuagent.cli suppliers
python -m factuagent.cli sql "SELECT seller_name, sum(total_ttc) FROM invoices GROUP BY 1"
# 4. Évaluation
python eval/evaluate.py # règles + Factur-X
python eval/evaluate.py --llm # avec Claude (ANTHROPIC_API_KEY requis)
# 5. Tests
pytest -qActiver l'extraction par IA
export ANTHROPIC_API_KEY=...
export FACTUAGENT_MODEL=claude-haiku-5-5 # modèle d'extraction (rapide, peu coûteux)Brancher le serveur MCP sur Claude Desktop
Dans la configuration MCP de Claude Desktop :
{
"mcpServers": {
"factuagent": {
"command": "python",
"args": ["-m", "factuagent.mcp_server"],
"cwd": "/chemin/vers/factuagent",
"env": { "FACTUAGENT_DB": "data/factuagent.duckdb", "FACTUAGENT_INBOX": "data/invoices" }
}
}
}Puis, dans la conversation : « Quelles factures dois-je bloquer avant le paiement de vendredi ? », « Combien avons-nous dépensé chez Nordica Cloud ce trimestre ? ».
Agent intégré (sans client MCP)
python -m factuagent.agent "Quels fournisseurs ont changé d'IBAN et pour quels montants ?"Outils exposés à l'agent
Outil | Rôle |
| Liste les PDF en attente |
| Traite un PDF : extraction, contrôles, anomalies |
| Filtre par statut ou fournisseur |
| En-tête, lignes et anomalies d'une facture |
| Factures à contrôler, les plus graves d'abord |
| Volumes, montants, IBAN distincts par fournisseur |
| SQL DuckDB en lecture seule pour l'analyse ad hoc |
Garde-fous. L'agent ne peut ni modifier ni supprimer de données : SQL limité à SELECT/WITH, sans
accès fichiers ni extensions, et lecture de PDF cantonnée à la boîte de réception (pas de traversée de
chemin). Les deux protections sont couvertes par les tests. L'agent signale, il ne valide jamais un paiement.
Structure
factuagent/
├── models.py # schéma Pydantic (inspiré EN 16931)
├── facturx.py # écriture / lecture XML CII, pièce jointe PDF
├── extractors.py # extraction par règles et par LLM (tool use)
├── validators.py # SIREN, TVA intracom, IBAN, cohérence des montants
├── pipeline.py # orchestration + détection d'anomalies
├── store.py # DuckDB
├── tools.py # outils métier partagés (MCP + agent)
├── mcp_server.py # serveur MCP (stdio)
├── agent.py # boucle agentique avec Claude
└── cli.py
scripts/generate_invoices.py # jeu de démo synthétique avec anomalies
eval/evaluate.py # précision par champ, rappel / précision des anomalies
tests/ # 21 tests (pytest)Limites et pistes
Factur-X : le XML CII est embarqué comme pièce jointe, sans la conformité PDF/A-3 complète (métadonnées XMP). Pour de la production, s'appuyer sur une bibliothèque certifiée et une plateforme agréée (PA).
PDF scannés : non gérés pour l'instant ; piste : OCR ou modèle vision avant l'extraction.
Données de démo synthétiques : SIREN et IBAN générés avec des clés valides mais fictifs.
Pistes : rapprochement automatique avec les bons de commande, export vers l'ERP, tableau de bord.
Stack
Python 3.11+ · Pydantic · pdfplumber · pypdf · lxml · DuckDB · Anthropic SDK (Claude, tool use) · MCP Python SDK · pytest · reportlab (jeu de démo)
Auteur : Fayçal Boubekri — AI & Data Engineer, Paris. Missions au forfait : agents IA, RAG, pipelines de données.
This server cannot be deployed
Maintenance
Related MCP Connectors
Documents 1.4.2: five focused MCP tools. analyze_receipt extracts caller-supplied receipt text or checks supported fields (0.25 USDC). match_invoice allocates invoice quantities against a purchase order, including split lines and remaining quantities (0.50 USDC). reconcile_purchase_documents is the free choice for discrepancies across supplied receipt, invoice and PO fields; missing documents remain needs_review and split links are flagged rather than allocated. Neither comparison requires the other. Consolidated example and status tools are free. Paid calls require buyer-authorized x402 on Base. Human review required; no image OCR, stored-analysis retrieval, delivery certification, payment approval or accounting writes. Service-specific cache and payment-metadata terms are disclosed through status. Runtime utilities: https://agents.getardaro.com/mcp/utilities . Legacy /mcp remains compatible. Guide: https://agents.getardaro.com/document-review
Read incoming supplier invoices through a remote MCP server and get structured data for accounting.
Malaysian SME accounting, e-Invoice and payroll for your AI. 64 tools; writes are approved drafts.
75 MCP tools: SEC financials, FRED economics, IRS 990, FDA, FX, UK Companies House.
Related MCP Servers
- AlicenseAqualityDmaintenanceExposes a ledger system (invoice queue, duplicate control, VAT register, contractor history, decision journal) as MCP tools for AI agents, enabling accurate invoice processing with deterministic validation.7MIT
- AlicenseBqualityAmaintenanceEnables AI assistants to query and manage self-hosted accounting data—invoices, balances, and books—through natural language, with read-only tools by default and optional scoped write operations.3036 PyPI1AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceEnables MCP clients to fetch live exchange and cryptocurrency prices, persist key-value JSON records, and perform invoice, shipping, and inventory business logic through seven tools.-
- AlicenseNot gradedqualityBmaintenanceEnables MCP-compatible agents such as Claude Desktop and Cursor to process invoices, list pending reviews, retrieve case details and risk signals, decide approvals or rejections, access masked vendor master data, and view AP dashboard metrics while resuming paused LangGraph workflows.MIT