facturx-mcp
Provides tools for generating, validating, and parsing Factur-X compliant XML documents to ensure adherence to EN 16931 electronic invoicing standards.
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., "@facturx-mcpGenerate a Factur-X invoice for 10 hours of dev at 150€/h for ACME SAS"
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.
facturx-mcp
Serveur MCP pour la facturation électronique Factur-X — générez, validez et soumettez des factures conformes à la norme EN 16931 et à la réforme française B2B 2026 directement depuis Claude.
Installation
npm install -g facturx-mcpRelated MCP server: einvoice-mcp
Configuration Claude Desktop
Ajoutez dans ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) ou %APPDATA%\Claude\claude_desktop_config.json (Windows) :
{
"mcpServers": {
"facturx": {
"command": "facturx-mcp",
"env": {
"FACTURX_LICENSE_KEY": "FTRX-..."
}
}
}
}Sans clé de licence, le mode gratuit est actif (10 générations/jour).
Outils disponibles
Outil | Plan | Description |
| Gratuit (10/j) | Générer un XML Factur-X valide (EN 16931) |
| Gratuit | Valider les données avant génération |
| Gratuit | Parser un XML Factur-X existant |
| Gratuit | Calculer HT / TVA / TTC |
| Pro | Créer un PDF avec XML embarqué |
| Pro | Extraire le XML depuis un PDF |
| Pro | Soumettre sur Chorus Pro (B2G) |
| Pro | Statut d'une facture CPP |
| Pro | Lister les factures Chorus Pro |
Tarifs
Gratuit — 10 générations/jour, outils Factur-X de base
Pro — 9.99 €/mois — Outils illimités + Chorus Pro → Acheter maintenant
Enterprise — 49.99 €/mois — Multi-comptes Chorus Pro + support prioritaire
Variables d'environnement
Variable | Obligatoire | Description |
| Non | Clé de licence Pro (format |
| Pro | Client ID PISTE (Chorus Pro) |
| Pro | Client Secret PISTE |
| Pro | Login compte technique Chorus Pro |
| Pro | Mot de passe compte technique |
| Non |
|
Exemple
Génère une facture pour ma prestation du mois :
- Vendeur : ACME SAS, TVA FR12345678901, 10 rue de la Paix 75001 Paris
- Acheteur : CLIENT SA, 5 av. des Champs 69001 Lyon
- 10h de développement à 150€/h HT, TVA 20%
- Paiement à 30 jours, IBAN FR76...Claude utilise automatiquement facturx_generate et retourne le XML Factur-X prêt à l'emploi.
Conformité
Norme EN 16931 (directive européenne 2014/55/UE)
Compatible Factur-X profils : MINIMUM, BASIC, EN_16931, EXTENDED
Compatible ZUGFeRD 2.x (Allemagne)
Prêt pour la réforme française e-facturation B2B (septembre 2026)
Intégration Chorus Pro (facturation B2G)
Licence
MIT — © 2026 facturx-mcp
Available Tools
9 toolschorus_get_statusA
Récupère le statut de traitement d'une facture soumise sur Chorus Pro (identifiant CPP retourné lors du dépôt). Statuts possibles : DEPOSEE, EN_COURS_TRAITEMENT, VALIDEE, REJETEE.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | Identifiant facture Chorus Pro (identifiantFactureCPP) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It indicates a read-only retrieval ('récupère') and enumerates possible statuses, but does not disclose behavior for unknown/invalid IDs, error conditions, or the exact return structure. This is adequate for a simple lookup but leaves notable gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence covers purpose, parameter provenance, and expected status values. There is no redundant information and it is front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description is largely complete: it tells the agent what identifier to supply and what statuses to expect. However, it does not specify the output format or error behavior, which would make it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already defines invoiceId with high coverage, but the description adds useful operational meaning by explaining that the value is the CPP identifier returned at submission time. This links the parameter to a prior workflow step, going beyond the schema's static label.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear action ('Récupère le statut de traitement d'une facture...'), names the specific resource (Chorus Pro invoice), and identifies the origin of the invoice identifier ('identifiant CPP retourné lors du dépôt'). The list of possible statuses further clarifies the domain. It is clearly distinct from siblings like chorus_submit (submission) and chorus_list_invoices (listing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use after an invoice has been submitted, when the caller holds the CPP identifier returned at deposit time. This gives a clear operational context but does not explicitly mention when to prefer chorus_list_invoices or exclude alternative tools, so it falls just short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chorus_list_invoicesB
Liste les factures présentes sur Chorus Pro avec filtres optionnels par date, statut et pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Numéro de page (défaut: 1) | |
| statut | No | Filtre statut : DEPOSEE, EN_COURS_TRAITEMENT, VALIDEE, REJETEE, SUSPENDUE | |
| dateFin | No | Date de dépôt fin (YYYY-MM-DD) | |
| dateDebut | No | Date de dépôt début (YYYY-MM-DD) | |
| nbParPage | No | Nombre de résultats par page (défaut: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only says 'Liste les factures' without mentioning return format, pagination behavior, default values, or whether the operation is read-only. This is a significant gap for a tool with no other behavioral metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with no redundant information. It concisely conveys the main action and available filters, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters, no output schema, and no annotations. The description only covers the basic listing intent and filter options, but omits critical context such as return structure, result limits, error cases, or any operational details an agent would need to correctly invoke and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all parameters. The description mentions filters by date, status, and pagination, which maps to the existing parameters, but adds no extra semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Liste') and specifies the resource ('les factures présentes sur Chorus Pro'), making the core purpose clear. While it doesn't explicitly name sibling tools, the action is distinct from chorus_submit or chorus_get_status, so an agent can reasonably infer the tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool: to list invoices with optional date, status, and pagination filters. It does not provide explicit exclusions or alternative tool references, but the context is clear enough for an agent to select this tool for listing operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chorus_submitA
Soumet une facture Factur-X sur la plateforme Chorus Pro (obligatoire pour facturer l'État français). Requiert les variables d'environnement CHORUS_CLIENT_ID, CHORUS_CLIENT_SECRET, CHORUS_LOGIN, CHORUS_PASSWORD.
| Name | Required | Description | Default |
|---|---|---|---|
| syntax | No | Syntaxe du flux (défaut: EN16931) | EN16931 |
| filename | Yes | Nom du fichier (ex: facture-2024-001.xml) | |
| xmlContent | Yes | Contenu XML de la facture |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the disclosure burden. It explicitly mentions required environment variables for authentication, which is useful behavioral context. It does not disclose side effects, success/failure behavior, or response characteristics, so the transparency is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences covering action, purpose, and prerequisites. It front-loads the core action and integrates the mandatory context without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a submission tool with no output schema, the description explains the purpose and authentication needs but omits what happens after submission, such as returned status or how to track via sibling tools. It provides partial but not complete operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented. The description adds no extra parameter meaning beyond the schema, matching the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Soumet une facture Factur-X') and a clear target platform ('Chorus Pro'). It distinguishes this tool from siblings like facturx_generate and facturx_validate by focusing on submission as the unique operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this tool is mandatory for billing the French state, indicating when it should be used. However, it does not mention when not to use it or name alternatives, so it falls short of full directional guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
facturx_compute_totalsA
Calcule les totaux d'une facture (HT par ligne, sous-total HT, TVA ventilée par taux, TTC, montant à payer). Utile pour vérifier les montants avant génération.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | Yes | ||
| currency | Yes | Code devise (ex: EUR) | EUR |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden itself, and it does disclose the computed outputs (HT per line, subtotal, TVA by rate, TTC, amount payable), implying a pure calculation operation. However, it does not state whether the tool recomputes line totals or trusts the supplied totalAmount, nor does it describe error handling or idempotency, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose first and the usage context second; every word earns its place. The output list is compactly parenthesized and the verification use case is front-loaded, making the description easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately complex (nested lines array, two required parameters) with no output schema and no annotations, and the description helpfully lists the expected output components. But it omits the return shape, how inconsistencies between quantity/unitPrice and totalAmount are handled, and what input prerequisites exist, leaving gaps an agent would need to resolve before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is about 50%, so the description should compensate for undocumented parameters, but it adds no real input semantics beyond 'd'une facture.' It never explains that lines must be invoice lines with consistent quantity, unitPrice, and totalAmount, nor the role of currency; the lines container itself, quantity, and unitPrice remain undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Calcule' with a precise resource ('les totaux d'une facture') and enumerates the exact outputs: per-line HT, subtotal HT, TVA by rate, TTC, and amount payable. This makes it clearly distinct from the sibling tools (generate, validate, parse, create_pdf) without opening any schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence, 'Utile pour vérifier les montants avant génération,' explicitly identifies when to use the tool (before generation, for verification) and implicitly distinguishes it from facturx_generate and facturx_validate. It does not name alternatives explicitly or provide exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
facturx_create_pdfA
Crée un PDF avec le XML Factur-X embarqué en pièce jointe (format requis par la norme). Optionnellement, peut intégrer le XML dans un PDF existant. Sauvegarde le résultat sur disque.
| Name | Required | Description | Default |
|---|---|---|---|
| outputPath | Yes | Chemin de sortie du PDF (ex: /tmp/facture.pdf) | |
| xmlContent | Yes | Contenu XML Factur-X | |
| sourcePdfPath | No | Optionnel : chemin d'un PDF existant à enrichir avec le XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It does disclose the primary side effect: 'Sauvegarde le résultat sur disque' (saves to disk), which is the key mutating action. However, it does not clarify whether an existing output file is overwritten, whether the output directory must exist, or what happens on failure (e.g., invalid XML). These are secondary but useful details for a mutation tool without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient: two sentences, no filler, with the main action placed at the start. It conveys the essential behavior and the optional variant without redundancy. It is slightly verbose in phrasing but remains well-structured and readable. A 4 rather than 5 because it could be tightened (e.g., 'peut intégrer le XML dans un PDF existant' could be shortened, though clarity is not compromised).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity is low (three parameters, no output schema, no nested objects), the description is sufficiently complete: it names the artifact type, the embedding mechanism, the optional existing-PDF path, and the disk write. Missing details (overwrite, error handling) are minor and would be expected in a summary, but they are not critical for a straightforward file-generation tool. The output format is implied (a PDF), even without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, as all three parameters have descriptions. The description adds minimal new semantic value over the schema: it clarifies the optional parameter's purpose (embed XML in an existing PDF) and reinforces that the output is a PDF file. Because the schema already defines every parameter, the baseline of 3 applies; the description does not fill a coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies a verb/action ('Crée un PDF'), the resource (a PDF with embedded Factur-X XML), and optional transformation (embed XML in an existing PDF). It distinguishes itself from sibling tools: it creates PDFs, whereas siblings like facturx_parse/extract read them, facturx_generate produces XML, and chorus_* handle submission. No ambiguity remains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the core use case (create a PDF with embedded Factur-X XML) and mentions the optional integration into an existing PDF, which implicitly communicates when one might choose this variant. However, it gives no explicit guidance on when not to use this tool, nor does it reference alternatives such as facturx_generate or how this tool fits in the generation/validation workflow. Usage is clear but not explicitly contrasted against siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
facturx_extract_from_pdfA
Extrait le XML Factur-X embarqué dans un PDF. Retourne le contenu XML.
| Name | Required | Description | Default |
|---|---|---|---|
| pdfPath | Yes | Chemin vers le fichier PDF Factur-X |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden. It does disclose the core behavior (extraction and return of XML), but it omits any detail about read-only nature, error behavior, or prerequisites. Since extracting is implicitly non-destructive, the description provides minimal adequate transparency, though not rich context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence that front-loads the main action and states the return value. No unnecessary words or filler. Every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with one parameter and no output schema, the description is almost complete. It tells the agent what to provide (PDF path) and what to expect (XML content). Minor omissions like error handling or format validity are not critical for a straightforward extraction tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for pdfPath. The tool description adds no further meaning or examples beyond the schema's 'Chemin vers le fichier PDF Factur-X'. Baseline of 3 is appropriate as the schema already handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (extract), the resource (XML embedded in a PDF), and the result (returns XML content). It distinguishes itself from siblings like facturx_parse or facturx_validate by specifying the extraction of embedded XML from a PDF specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives. There are related tools like facturx_parse or facturx_validate, but the description does not mention any conditions, exclusions, or comparisons. For a tool with many siblings, this is a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
facturx_generateA
Génère un fichier XML Factur-X valide (norme EN 16931 / UE) à partir des données de facturation. Calcule automatiquement les totaux HT, TVA et TTC. Retourne le XML et un résumé des montants.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date d'émission (YYYY-MM-DD) | |
| buyer | Yes | ||
| lines | Yes | ||
| notes | No | Notes libres sur la facture | |
| number | Yes | Numéro de facture unique | |
| seller | Yes | ||
| dueDate | No | Date d'échéance (YYYY-MM-DD) | |
| payment | No | ||
| profile | No | Profil Factur-X | EN_16931 |
| buyerRef | No | Référence interne acheteur | |
| currency | Yes | Code devise ISO 4217 | EUR |
| typeCode | No | 380=facture, 381=avoir, 389=auto-facturation | 380 |
| contractRef | No | Référence contrat | |
| deliveryDate | No | Date de livraison (YYYY-MM-DD) | |
| purchaseOrderRef | No | Référence bon de commande |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It clearly states and returns 'le XML et un résumé des montants', and mentions automatic calculation of HT/TVA/TTC totals. This goes beyond the elementary mention of what the tool does and gives useful behavior information — it does not hide the fact that it computes totals and returns a summary. Remaining unresolved traits such as error handling or read/write side effects are not disclosed, but for a generation tool this seems adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, properly structured sentence (in French) that states the action, the object, the norm, the automatic calculations, and the return value. It’s concise and front‑loaded with the core purpose and output. Not a single redundant word, though it could be split into two sentences for readability; the density is worthwhile.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool’s complexity (15 parameters, 6 required, nested objects, no output schema) the description is lightweight: it mentions the return value (XML + summary) but lacks a clear statement about validation against EN 16931/UE, error cases, or how input fields map to output. However, the input schema already carries 73% of the description, and the tool’s responsibility is clear enough. This is a minimum viable description for a generator, but not a thorough guide for a complex, norm‑driven tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 73%, and nested objects are well-documented there (e.g., countryCode, vatRate, vatCategory). The description adds no explicit parameter‑level guidance beyond implying the tool will compute totals. Given the high schema coverage, a score of 3 is fair — The description doesn’t contradict or enrich the schema, but it also doesn't need to carry much since the schema is rich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('génère'), a precise resource ('fichier XML Factur-X'), and a scope (EN 16931/UE standard). It clearly distinguishes this tool from siblings like facturx_validate, facturx_parse, and facturx_create_pdf by focusing on XML generation, so an agent can easily select it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (to produce a legal/invoice XML) and mentions it comprises total computation, which hints at when to use it over facturx_compute_totals. However, it does not explicitly discuss when not to use this tool (e.g., if only totals are needed, facturx_compute_totals might be a better fit) nor mention other siblings that generate PDFs. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
facturx_parseA
Parse un fichier XML Factur-X et extrait toutes les données de facturation sous forme JSON structuré. Compatible avec les profils MINIMUM, BASIC, EN 16931 et EXTENDED.
| Name | Required | Description | Default |
|---|---|---|---|
| xmlContent | Yes | Contenu XML Factur-X à parser |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the primary behavior (parse, extract to JSON) and scope (profiles), but does not mention error handling on invalid XML, read-only nature, limits, or output structure. It is adequate but lacks richer behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste: the first sentence states the core function and output, the second adds compatibility scope. It is well-structured and front-loaded with the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is a slight ambiguity: the description says 'fichier XML' (XML file) while the schema parameter is 'xmlContent' (string content), which could confuse an agent about whether to provide a file path or content. Additionally, no output schema exists, and the description does not clarify what happens on invalid input or the exact JSON structure. These gaps make it incomplete for a fully informed call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (xmlContent is described as 'Contenu XML Factur-X à parser'), so the schema already documents the parameter. The description adds no additional parameter semantics beyond what the schema provides, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('parse'), a precise resource (Factur-X XML file), and the output (structured JSON), which distinguishes it from sibling tools like facturx_generate (generation) and facturx_extract_from_pdf (PDF extraction). The compatibility with specific profiles adds clarity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the tool is for parsing XML content, which provides context for when to use it. However, it does not explicitly mention alternatives or conditions for not using this tool, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
facturx_validateA
Valide les données d'une facture avant génération : vérifie les champs obligatoires, les formats (dates, codes pays, TVA), la cohérence des montants lignes. Retourne les erreurs bloquantes et les avertissements.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date d'émission (YYYY-MM-DD) | |
| buyer | Yes | ||
| lines | Yes | ||
| notes | No | Notes libres sur la facture | |
| number | Yes | Numéro de facture unique | |
| seller | Yes | ||
| dueDate | No | Date d'échéance (YYYY-MM-DD) | |
| payment | No | ||
| profile | No | Profil Factur-X | EN_16931 |
| buyerRef | No | Référence interne acheteur | |
| currency | Yes | Code devise ISO 4217 | EUR |
| typeCode | No | 380=facture, 381=avoir, 389=auto-facturation | 380 |
| contractRef | No | Référence contrat | |
| deliveryDate | No | Date de livraison (YYYY-MM-DD) | |
| purchaseOrderRef | No | Référence bon de commande |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries behavioral disclosure. It clearly indicates the operation is non-mutating (checks, returns) and explains the result categories: blocking errors and warnings. It does not explicitly state the absence of side effects, but the verbs and return description implicitly convey a read-only validation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the main verb and object, then expands with specific validation checks and the output type. Every clause adds value; there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex (15 parameters, nested objects, no output schema) and the description states the broad purpose and result types but does not detail the structure of returned errors/warnings or explain how an agent should interpret them. This leaves a clear gap for consuming the validation result, though it is minimally adequate for deciding whether to call the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers 73% of parameters with descriptions (dates, country codes, VAT, line amounts), and the description's summary restates these same categories without adding parameter-level details. With high schema coverage, the baseline of 3 applies; the description does not compensate for the remaining undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a validator ('Valide les données d'une facture'), specifies what it checks (required fields, formats, line amount consistency), and states its output (errors/warnings). It situates the action 'avant génération', giving pipeline context, but does not explicitly name or differentiate any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'avant génération' is a clear temporal/usage condition, telling the agent to invoke this before creating an invoice. It does not explicitly mention alternatives or excluded cases, but this context is sufficient for choosing the tool among siblings that generate, parse, or compute totals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v1.0.3- First observed
chorus_get_status - First observed
chorus_list_invoices - First observed
chorus_submit - First observed
facturx_compute_totals - First observed
facturx_create_pdf - First observed
facturx_extract_from_pdf - First observed
facturx_generate - First observed
facturx_parse - First observed
facturx_validate
TDQS
Scored across 9 tools
Each tool has a clearly distinct purpose: generation, validation, parsing, totals computation, PDF creation, XML extraction, and separate Chorus Pro operations for submission, status, and listing. The overlap between compute_totals and generate is minimal because generate also creates the full XML document.
All tool names follow a consistent pattern using the domain prefixes 'facturx_' and 'chorus_' followed by a verb (generate, validate, parse, compute_totals, create_pdf, extract_from_pdf, submit, get_status, list_invoices). The naming is uniform with snake_case and action-first ordering, making it predictable.
With 9 tools, the server is well-scoped for the Factur-X lifecycle and Chorus Pro integration. Each tool serves a distinct step in the workflow without being overwhelming or redundant.
The toolset covers the main workflow from data validation, generation, PDF creation, XML extraction, to Chorus Pro submission and tracking. A minor gap is the lack of a dedicated tool to fetch a single facture detail from Chorus Pro beyond the list, but the existing surface is sufficient for core e-invoicing tasks.
Maintenance
Related MCP Connectors
Create, validate, convert & extract compliant e-invoices (UBL, Factur-X, ZUGFeRD, XRechnung)
Generate & validate EN 16931 e-invoices (Factur-X, ZUGFeRD, XRechnung); verification certificates
Generate, validate and read Factur-X / EN 16931 e-invoices (France, EU): PDF/A-3, CII, UBL 2.1.
Brazilian fiscal MCP server - issue NF-e, NFC-e, NFS-e, CT-e, MDF-e and DC-e via SEFAZ.
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.622 npm2MIT
- AlicenseAqualityDmaintenanceMCP server for German e-invoice compliance (XRechnung 3.0 & ZUGFeRD 2.x) enabling AI agents to validate, generate, parse, and check compliance of electronic invoices per EN 16931.61MIT

polydoc-mcpofficial
AlicenseNot gradedqualityDmaintenanceMCP server that converts HTML or URLs to PDF, captures screenshots, and generates EU-compliant e-invoices (Factur-X/ZUGFeRD).22 npmMIT- AlicenseAqualityDmaintenanceMCP server for Italian electronic invoicing via the Invoicetronic API, enabling management of invoices through SDI with 20 tools for sending, receiving, exporting, and more.18MIT