Factur-X e-invoicing
Server Details
Generate, validate and read Factur-X / EN 16931 e-invoices (France, EU): PDF/A-3, CII, UBL 2.1.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
4 toolsembed_xmlEmbed Factur-X XML into a PDFARead-onlyIdempotentInspect
Combine a visual PDF you already have with a Factur-X (CII) XML into one PDF/A-3 Factur-X invoice.
Use when the PDF is produced by your own system and you only need the compliant hybrid file. Do not use
to create an invoice from data: call generate_invoice, which renders the PDF too. The XML is validated
first and rejected with rule ids if it fails. Nothing is stored. Returns a text summary plus the PDF/A-3
as a base64 embedded resource.
| Name | Required | Description | Default |
|---|---|---|---|
| xml | Yes | Factur-X / CII XML text for the same invoice; must pass the `check` rules or the tool fails | |
| check | No | Rule set the XML must pass before embedding: fr-ctc (default, France) or base (EN 16931 only) | fr-ctc |
| language | No | Document language written in the PDF metadata: fr or en | fr |
| pdf_base64 | Yes | Your existing visual invoice PDF (any PDF, will be converted to PDF/A-3), base64 encoded |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations: it discloses that XML is validated first and rejected with rule ids, that nothing is stored, and that the return value is a text summary plus a base64-embedded PDF/A-3. These behaviors are not obvious from annotations alone and are valuable for the agent. No contradiction with readOnlyHint or idempotentHint exists.
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 compact and front-loaded with the core operation, then immediately gives usage guidance, then covers validation, side effects, and return format in a few efficient sentences. Every sentence earns its place with no redundancy or fluff.
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 tool with four parameters, no output schema, and a meaningful validation step, the description covers everything an agent needs: what the tool does, when to use it, what happens on validation failure, whether state is persisted, and what the response contains. No critical operational context is missing.
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 the schema already documents all parameters clearly. The description adds some context by framing the relationship between pdf_base64 and xml as the same invoice, and confirms the output format, but it does not significantly enrich parameter-level meaning 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 clearly states the specific operation: combining an existing visual PDF with a Factur-X/CII XML into a PDF/A-3 hybrid invoice. It names the exact input and output artifacts and differentiates itself from generate_invoice, leaving no ambiguity about what the tool does.
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 explicitly says when to use this tool: when the PDF is already produced by the user's system and only the compliant hybrid file is needed. It also explicitly says what not to use it for and names the alternative generate_invoice, making the selection decision unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_invoiceExtract e-invoice dataARead-onlyIdempotentInspect
Read an e-invoice and return its business data as JSON: number, dates, seller, buyer, totals, VAT breakdown, lines.
Use to get the content of a received invoice (Factur-X PDF, CII or UBL XML) for bookkeeping, matching
or summaries. Does not judge compliance: call validate_invoice for that. Read-only, nothing stored.
Returns {profile, fields{...}} and, with include_xml, the XML text.
| Name | Required | Description | Default |
|---|---|---|---|
| xml | No | CII or UBL XML as plain text; alternative to document_base64, give exactly one | |
| include_xml | No | Also return the raw XML text (large); default false returns only the parsed fields | |
| document_base64 | No | Factur-X PDF (the embedded XML is read) or a CII/UBL XML file, base64 encoded |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds useful behavioral context: 'Read-only, nothing stored' and the caveat that compliance is not evaluated. It also clarifies output shape and the optional include_xml effect. No contradiction with annotations, though much of the safety profile is already carried by the 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?
Three tight sentences with no filler; the purpose and returned data are front-loaded, followed by usage guidance and the key caveat. Every sentence earns its place.
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 read-only extraction tool with a rich output schema and full parameter descriptions, the description covers formats, use cases, exclusion of compliance checking, storage behavior, and the include_xml option. Nothing an agent needs to invoke it correctly is missing.
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 the schema already documents all three parameters including the alternative-to relationship and the default of include_xml. The description reinforces accepted formats (Factur-X PDF, CII or UBL XML) and include_xml behavior but adds no meaning beyond what the schema already provides.
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 ('Read') and resource ('e-invoice'), and enumerates the returned business data (number, dates, seller, buyer, totals, VAT breakdown, lines). It also distinguishes itself from validate_invoice by explicitly stating it does not judge compliance, so an agent can tell it apart from siblings.
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?
It states when to use it ('get the content of a received invoice... for bookkeeping, matching or summaries') and points to the alternative for compliance ('Does not judge compliance: call validate_invoice for that'). This gives clear selection guidance against sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_invoiceGenerate Factur-X invoiceARead-onlyIdempotentInspect
Create a new, compliant e-invoice (Factur-X PDF/A-3, CII XML or UBL XML) from structured invoice data.
Use when you have the invoice content (parties, lines, dates) and need the document. Do not use when you
already have a visual PDF and a Factur-X XML to combine: call embed_xml. To check a document you did not
create here, call validate_invoice; to read one, call extract_invoice.
The result is validated (XSD + schematron for `check`) before it is returned; on failure the tool returns
an error listing the failing rule ids (e.g. BR-CO-10, BR-FR-01) so you can fix the input and retry.
Nothing is stored. Returns a text summary (number, totals, warnings) plus the document as an embedded
resource: base64 PDF for facturx-pdf, XML text for cii-xml / ubl-xml.
| Name | Required | Description | Default |
|---|---|---|---|
| check | No | Rule set the output must pass before it is returned: fr-ctc (default) = EN 16931 + French CTC rules (BR-FR-*), base = EN 16931 only (non-French sellers). | fr-ctc |
| output | No | facturx-pdf (default): PDF/A-3 with the visual invoice and the CII XML embedded, the format French platforms accept. cii-xml: the UN/CEFACT CII XML alone. ubl-xml: UBL 2.1 XML alone (Peppol-style). | facturx-pdf |
| invoice | Yes | Invoice data: seller, buyer, lines, dates, payment terms. Amounts are decimal strings ("1200.00"), dates ISO 8601. Totals and the VAT breakdown are computed. Full JSON Schema in the resource facturx://schema/invoice. | |
| profile | No | Factur-X conformance level written in the XML: en16931 (default, full EN 16931 semantic model), extended (adds optional business terms), extended-ctc-fr (French B2B mandate profile), basicwl (no lines) | en16931 |
| language | No | Language of the visual PDF: fr or en | fr |
| footer_text | No | Optional footer text on the PDF |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavior beyond the annotations: the output is validated (XSD + schematron) before being returned, failure yields error rule IDs (BR-CO-10, BR-FR-01), nothing is stored, and the return structure is summarized (text summary + embedded resource with format-specific encodings). This is significant context the annotations do not provide.
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 well-organized and front-loaded: the core purpose appears in the first sentence, followed by clear routing guidance, then behavioral details. Each sentence earns its place without redundancy. The formatting with line breaks and bullet-like structure improves scannability for an agent.
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 complex generation tool with nested schemas, the description covers the key decision points (output format, check profile, when to use siblings), the expected input semantics, the validation behavior, and the return shape. It does not need to document every nested field because the schema already does that at 100% coverage. The absence of an output schema is compensated by a clear summary of the return value.
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?
Although the schema has 100% coverage, the description adds crucial semantic meaning for the top-level parameters: it explains what 'check' rule sets mean (fr-ctc vs base), what each output format produces in practice, and clarifies that 'invoice' amounts are decimal strings and dates are ISO 8601. It also notes that totals and VAT breakdown are computed, which is not explicit in the schema's property descriptions alone.
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 ('Create'), a clear resource ('compliant e-invoice), and enumerates the exact output formats (Factur-X PDF/A-3, CII XML, UBL XML). It distinguishes the tool from its siblings by explicitly naming embed_xml, validate_invoice, and extract_invoice and stating what each is for.
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 gives explicit when-to-use ('Use when you have the invoice content...') and when-not-to-use ('Do not use when you already have a visual PDF and a Factur-X XML to combine: call embed_xml'). It also names the alternatives for validation and extraction, making routing unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_invoiceValidate e-invoiceARead-onlyIdempotentInspect
Check whether an existing e-invoice (Factur-X PDF, CII or UBL XML) is compliant, and report why not.
Use on any document you did not produce with generate_invoice (supplier invoices, files from another
system) or to re-check after a fix. Do not use to read the invoice content: call extract_invoice.
Runs XSD then the EN 16931 schematron (plus French rules for fr-ctc). Read-only, nothing stored.
Returns {valid, profile, findings[]} where each finding has the rule id (e.g. BR-CO-10), severity and
message; a non-compliant document is a normal result, not an error.
| Name | Required | Description | Default |
|---|---|---|---|
| xml | No | CII or UBL XML as plain text; alternative to document_base64, give exactly one | |
| check | No | fr-ctc (default): EN 16931 + French CTC rules (BR-FR-*). base: EN 16931 only. | fr-ctc |
| document_base64 | No | Factur-X PDF (the embedded XML is read) or a CII/UBL XML file, base64 encoded |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint false, and the description adds substantial behavioral detail: read-only, nothing stored, XSD then EN 16931 schematron, optional French CTC rules, and the important note that a non-compliant document is a normal result rather than an error.
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, front-loaded with the core purpose, and every sentence earns its place. Usage guidance, validation pipeline, and response shape are all covered in four tight sentences without redundancy.
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 rich annotations, full schema coverage, and presence of an output schema, the description covers all necessary context: what the tool validates, when to use it, what it runs, its read-only nature, and the shape of its result. Nothing critical is missing.
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 the input schema already documents the parameters thoroughly. The description restates the document formats and mentions the alternative input methods indirectly, but adds little parameter-level meaning beyond what the schema provides.
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 ('Check whether... is compliant, and report why not') and names the resource (existing e-invoice in Factur-X PDF, CII, or UBL XML). It clearly differentiates from extract_invoice (read content) and generate_invoice (producing documents).
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?
Explicit guidance is given: use on documents not produced by generate_invoice, or to re-check after a fix. It also states when not to use it ('Do not use to read the invoice content') and names the alternative tool. This leaves no ambiguity about selection.
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. Dates show when Glama detected each change.
4 tool updates
- Changed
embed_xml4 fields changed- changed
Input schema / properties / check / descriptionPrevious value: -"Rule set to enforce before embedding"New value: +"Rule set the XML must pass before embedding: fr-ctc (default, France) or base (EN 16931 only)" - changed
Input schema / properties / language / descriptionPrevious value: -"Document language metadata"New value: +"Document language written in the PDF metadata: fr or en" - changed
Input schema / properties / pdf_base64 / descriptionPrevious value: -"Your visual invoice PDF, base64 encoded"New value: +"Your existing visual invoice PDF (any PDF, will be converted to PDF/A-3), base64 encoded" - changed
Input schema / properties / xml / descriptionPrevious value: -"Factur-X / CII XML text (must pass EN 16931 rules)"New value: +"Factur-X / CII XML text for the same invoice; must pass the `check` rules or the tool fails"
- Changed
extract_invoice3 fields changed- changed
Input schema / properties / document_base64 / descriptionPrevious value: -"Factur-X PDF or XML file, base64 encoded"New value: +"Factur-X PDF (the embedded XML is read) or a CII/UBL XML file, base64 encoded" - changed
Input schema / properties / include_xml / descriptionPrevious value: -"Include the raw XML in the result"New value: +"Also return the raw XML text (large); default false returns only the parsed fields" - changed
Input schema / properties / xml / descriptionPrevious value: -"CII or UBL XML as text (alternative to document_base64)"New value: +"CII or UBL XML as plain text; alternative to document_base64, give exactly one"
- Changed
generate_invoice4 fields changed- changed
Input schema / properties / check / descriptionPrevious value: -"Schematron rule set: EN 16931 base or + French CTC rules"New value: +"Rule set the output must pass before it is returned: fr-ctc (default) = EN 16931 + French CTC rules (BR-FR-*), base = EN 16931 only (non-French sellers)." - added
Input schema / properties / invoice / descriptionAdded value: +"Invoice data: seller, buyer, lines, dates, payment terms. Amounts are decimal strings (\"1200.00\"), dates ISO 8601. Totals and the VAT breakdown are computed. Full JSON Schema in the resource facturx://schema/invoice." - changed
Input schema / properties / output / descriptionPrevious value: -"facturx-pdf (PDF/A-3 with XML, default), cii-xml or ubl-xml"New value: +"facturx-pdf (default): PDF/A-3 with the visual invoice and the CII XML embedded, the format French platforms accept. cii-xml: the UN/CEFACT CII XML alone. ubl-xml: UBL 2.1 XML alone (Peppol-style)." - changed
Input schema / properties / profile / descriptionPrevious value: -"EN 16931 conformance level: en16931 (default), extended, extended-ctc-fr, basicwl"New value: +"Factur-X conformance level written in the XML: en16931 (default, full EN 16931 semantic model), extended (adds optional business terms), extended-ctc-fr (French B2B mandate profile), basicwl (no lines)"
- Changed
validate_invoice3 fields changed- changed
Input schema / properties / check / descriptionPrevious value: -"EN 16931 base rules or + French CTC rules (default)"New value: +"fr-ctc (default): EN 16931 + French CTC rules (BR-FR-*). base: EN 16931 only." - changed
Input schema / properties / document_base64 / descriptionPrevious value: -"Factur-X PDF or XML file, base64 encoded"New value: +"Factur-X PDF (the embedded XML is read) or a CII/UBL XML file, base64 encoded" - changed
Input schema / properties / xml / descriptionPrevious value: -"CII or UBL XML as text (alternative to document_base64)"New value: +"CII or UBL XML as plain text; alternative to document_base64, give exactly one"
4 tool updates
- First observed
embed_xml - First observed
extract_invoice - First observed
generate_invoice - First observed
validate_invoice
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
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
Validate, generate & convert EU e-invoices (UBL, CII, XRechnung, Factur-X) — EN 16931 pre-validated.
Validate, extract, repair and generate French Factur-X / EN16931 invoices via AgentForge API
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.6542MIT
- AlicenseAqualityAmaintenanceModel 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.502Apache 2.0
- AlicenseAqualityCmaintenanceValidates electronic invoices (XRechnung, ZUGFeRD, Factur-X, Peppol BIS, etc.) against authority-pinned rules and explains failures.221MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to locally parse, validate, audit, explain, generate, and convert XRechnung and ZUGFeRD/Factur-X e-invoices using official rule sets, fully offline with no API keys required.Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool targets a distinct operation: embed_xml combines existing PDF and XML, extract_invoice reads invoice data, generate_invoice creates new invoices, and validate_invoice checks compliance. The descriptions explicitly cross-reference each other with 'do not use' guidance, eliminating ambiguity.
All tool names follow the same verb_noun pattern in snake_case: embed_xml, extract_invoice, generate_invoice, validate_invoice. The naming is predictable and consistent across the entire set.
Four tools cover the core e-invoicing operations without redundancy or bloat. The count is well-scoped for the server's purpose, fits within the typical 3-15 range, and each tool earns its place.
The set covers the full document lifecycle relevant to Factur-X: generate (create), extract (read), validate (check), and embed (combine). No obvious gaps exist; the server's stated stateless nature means additional CRUD operations are unnecessary.