MCP E-Invoicing Core
Base package for European e-invoicing MCP servers with shared models, XML utils, and OAuth2 client.
Ask AI about MCP E-Invoicing Core
Powered by Claude ยท Grounded in docs
I know everything about MCP E-Invoicing Core. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
mcp-einvoicing-core
Topics: mcp mcp-server e-invoicing electronic-invoicing european-invoicing python fastmcp peppol en16931 ubl fatturapa xp-z12-013 xml base-library
Base package for European electronic invoicing MCP servers.
Provides abstract base classes, shared Pydantic models, XML utilities, and an HTTP client
so country-specific packages (mcp-facture-electronique-fr, mcp-fattura-elettronica-it, โฆ)
share a common foundation without duplicating code.
What this package provides
| Module | Contents | Used by |
|---|---|---|
models.py | InvoiceParty, InvoiceLineItem, VATSummary, PaymentTerms, InvoiceDocument, DocumentValidationResult | IT (structured invoice generation), future BE/PL/DE/ES |
base_server.py | BaseDocumentGenerator, BaseDocumentValidator, BaseDocumentParser, BaseLifecycleManager, BasePartyValidator, EInvoicingMCPServer | All country adapters |
xml_utils.py | format_amount, format_quantity, validate_date_iso, validate_iban, xml_element, xml_optional, format_error, filter_empty_values | IT (extracted verbatim), future XML-based formats |
http_client.py | TokenCache, OAuthConfig, BaseEInvoicingClient (OAuth2 + no-auth) | FR (extracted verbatim), future API-based countries |
exceptions.py | EInvoicingError, ValidationError, PartyValidationError, XSDValidationError, DocumentGenerationError, AuthenticationError, PlatformError | All country adapters |
logging_utils.py | setup_logging, get_logger | All country adapters |
Installation
pip install mcp-einvoicing-core
This package has no country-specific dependencies. lxml (needed for XSD validation
in IT and future countries) is declared by each country package individually.
Architecture
mcp-einvoicing-core โ this package
โโโ BaseDocumentGenerator โ abstract: generate(InvoiceDocument) โ str
โโโ BaseDocumentValidator โ abstract: validate(xml) โ DocumentValidationResult
โโโ BaseDocumentParser โ abstract: parse(xml) โ dict
โโโ BaseLifecycleManager โ abstract: submit/search/get_status (async HTTP)
โโโ BasePartyValidator โ abstract: validate_seller/buyer/tax_id
โโโ BaseEInvoicingClient โ concrete: async HTTP + OAuth2/no-auth/token
โโโ InvoiceDocument (Pydantic) โ shared data model
โโโ EInvoicingMCPServer โ plugin registry wrapping FastMCP
mcp-facture-electronique-fr โ country adapter (FR)
โโโ PAConfig(OAuthConfig)
โโโ FlowClient(BaseEInvoicingClient) โ OAuth2, XP Z12-013 Annex A
โโโ DirectoryClient(BaseEInvoicingClient) โ OAuth2, XP Z12-013 Annex B
โโโ FrLifecycleManager(BaseLifecycleManager)
mcp-fattura-elettronica-it โ country adapter (IT)
โโโ ItalyPartyValidator(BasePartyValidator) โ Partita IVA modulo-10
โโโ FatturaGenerator(BaseDocumentGenerator) โ FatturaPA XML v1.6.1
โโโ FatturaValidator(BaseDocumentValidator) โ lxml XSD v1.6.1
โโโ FatturaParser(BaseDocumentParser) โ lxml xpath
Plugin registration pattern
Country packages register their tools on a shared or standalone FastMCP instance:
# Standalone (existing server.py โ no changes required)
from fastmcp import FastMCP
mcp = FastMCP(name="mcp-fattura-elettronica-it", instructions="โฆ")
register_header_tools(mcp)
register_body_tools(mcp)
register_global_tools(mcp)
# Multi-country (optional EInvoicingMCPServer)
from mcp_einvoicing_core import EInvoicingMCPServer
server = EInvoicingMCPServer(name="mcp-einvoicing-eu", instructions="โฆ")
server.register_plugin(register_header_tools, "it-header")
server.register_plugin(register_flow_tools, "fr-flow")
server.run()
Claude Desktop / Cursor / Kiro compatibility
Existing configurations for mcp-facture-electronique-fr and mcp-fattura-elettronica-it
require no changes: tool names, signatures, environment variables, and entry points
(server:main) are fully preserved.
Roadmap compatibility
| Country | Status | Standard | Transport | Inherits | Overrides | Known gaps |
|---|---|---|---|---|---|---|
| ๐ง๐ช BE | โ Done | Peppol BIS 3.0 | AS4 / Peppol | all base classes | generate() โ UBL 2.1, validate() โ Schematron EN16931 | None |
| ๐ซ๐ท FR | โ Done | XP Z12-013 | Hybrid / PPF hub | BaseEInvoicingClient, BaseLifecycleManager | submit_lifecycle_status, healthcheck | None |
| ๐ฉ๐ช DE | โ Done | ZUGFeRD / XRechnung | AS4 / Peppol | all base classes | generate() returns PDF bytes (base64) | generate() return type: str vs bytes ambiguity |
| ๐ฎ๐น IT | โ Done | FatturaPA v1.6.1 | Direct / SDI | BaseDocumentGenerator, BaseDocumentValidator, BaseDocumentParser, BasePartyValidator | all abstract methods | to_invoice_document() not yet implemented |
| ๐ต๐ฑ PL | โ Done | KSeF FA(2) | Direct API | BaseDocumentGenerator, BaseDocumentValidator, BaseLifecycleManager | KSeF session auth flow | MTLS auth mode not yet implemented |
| ๐ช๐ธ ES | ๐ In progress | FACeB2B / FacturaE | Direct API | all base classes | mTLS auth | MTLS auth mode not yet implemented |
| ๐ท๐ด RO | ๐ Backlog | RO-UBL (EN 16931) | Direct API / clearance | BaseDocumentGenerator, BaseLifecycleManager | ANAF clearance flow | BaseSchematronValidator variant needed |
| ๐ฌ๐ท GR | ๐ Backlog | myDATA XML | Direct API / reporting | BaseEInvoicingClient, BaseLifecycleManager | myDATA auth + reporting flow | myDATA API client not yet designed |
| ๐ณ๐ฑ๐ธ๐ช๐ฉ๐ฐ๐ณ๐ด Nordics/NL | ๐ Backlog | Peppol BIS 3.0 / UBL | AS4 / Peppol | all base classes | generate() โ UBL 2.1, validate() โ Schematron | Reuses BE AS4 transport layer |
| ๐ต๐น PT | ๐ Backlog | CIUS-PT + QR Code | Signature / direct | BaseDocumentGenerator, BaseDocumentValidator | Qualified signature + QR injection | Qualified signature integration not designed |
Architectural notes
Transport interface
As the adapter count grows, a TransportInterface abstraction in core will prevent duplication across countries that share the same transport layer:
| Transport | Countries |
|---|---|
| Direct API (clearance / reporting) | FR, RO, GR, HU |
| AS4 / Peppol network | BE, DE, Nordics/NL |
| Hybrid / hub | FR (PPF/PDP dual path) |
Germany: 80% reuse from FR
Germany's mandate (active since Jan 2025 for B2B receiving) heavily favors ZUGFeRD/Factur-X โ the same PDF-embedded XML model as the French Factur-X profile. The mcp-facture-electronique-fr XML generation and validation logic can be reused with minimal changes, making DE the lowest-effort next adapter after BE.
ViDA / DRR (2030)
By July 2030, all national systems must align with the EU Digital Reporting Requirement for cross-border transactions. Using EN 16931 as the internal InvoiceDocument data model in this core package already future-proofs the project: country adapters translate EN 16931 โ local format, not the other way around.
License
Apache 2.0 โ see LICENSE.
