{
  "markdown": "# mcp-einvoicing-ae 🇦🇪\n\n[English](README.md) | [العربية](README.ar.md)\n\n<!-- mcp-name: io.github.cmendezs/mcp-einvoicing-ae -->\n\n[![PyPI version](https://badge.fury.io/py/mcp-einvoicing-ae.svg)](https://badge.fury.io/py/mcp-einvoicing-ae)\n[![Python](https://img.shields.io/pypi/pyversions/mcp-einvoicing-ae.svg)](https://pypi.org/project/mcp-einvoicing-ae/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![mcp-einvoicing-ae MCP server](https://glama.ai/mcp/servers/cmendezs/mcp-einvoicing-ae/badges/score.svg)](https://glama.ai/mcp/servers/cmendezs/mcp-einvoicing-ae)\n\n---\n\n## Introduction\n\n`mcp-einvoicing-ae` is an [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server\nthat exposes tools for United Arab Emirates electronic invoicing. It is part of the\n`mcp-einvoicing-*` family of country-specific servers, all built on\n[`mcp-einvoicing-core`](https://github.com/cmendezs/mcp-einvoicing-core), which provides the\nshared validation engine, EN 16931 abstractions, and Peppol network utilities.\n\nGenerated PINT AE invoices are structurally conformant: `cbc:UUID`, `cbc:ProfileExecutionID`,\nper-line `cac:ItemPriceExtension`, and `trade_license_number` are all emitted, and round-trip\nback through `parse_invoice_ae`. The 5.00% standard VAT rate is enforced by a model validator,\nand a Peppol participant-lookup tool is exposed. `validate_invoice_ae` checks core's shared CEN\nEN16931 base Schematron only, not the PINT AE jurisdiction overlay; `validate_tdd_ae` currently\nreports \"unavailable\" — see [Supported standards](#supported-standards) and\n[Available tools](#available-tools) below.\n\nThe UAE Peppol Authority's PINT AE (billing) specialization is at **Status: Final**, version\n1.0.4 (2026-06-02); the Peppol AE Tax Data Document (TDD) is at Status: Final, version 1.0.4\n(2026-07-23). Full citations: [`specs/README.md`](specs/README.md) and the monorepo's\n[`context-library/countries/ae.md`](https://github.com/cmendezs/mcp-einvoicing/blob/main/context-library/countries/ae.md).\n\n## Supported standards\n\n- **PINT AE (billing)** — UBL 2.1, `CustomizationID: urn:peppol:pint:billing-1@ae-1`,\n  `ProfileID: urn:peppol:bis:billing`. Version 1.0.4 (2026-06-02).\n- **PINT AE (self-billing)** — `CustomizationID: urn:peppol:pint:selfbilling-1@ae-1`,\n  `ProfileID: urn:peppol:bis:selfbilling`.\n- **Peppol AE TDD** (Tax Data Document) — the 5th-corner reporting document sent to the FTA; its\n  own XML namespace (`urn:peppol:schema:taxdata:1.0`), not a UBL invoice. Version 1.0.4\n  (2026-07-23).\n\nThe UAE programme is a decentralized Peppol **5-corner** model routed through Accredited Service\nProviders, adding a tax-authority reporting leg (the TDD above) beyond the 4-corner exchange used\nelsewhere in this family. The invoice-tree pathway is confirmed `EN16931Invoice` (PINT AE is a\nUBL 2.1 CIUS of EN 16931-1:2017) — no JSON binding was found in the supplied specifications.\n\n`AEInvoice` serializes via `mcp_einvoicing_ae.wire_formats.AEUBLSerializer`, which layers the\nAE-specific elements (`cbc:ProfileExecutionID`, `PartyLegalEntity/CompanyID` with\n`schemeAgencyID=\"TL\"` for `trade_license_number`) on top of core's `EN16931UBLSerializer` — the\nlatter now emits `cbc:UUID` (from `document_uuid`) and per-line `cac:ItemPriceExtension` natively\n(`mcp-einvoicing-core` v1.25.0), since `profile`/`business_process` already hold the real Peppol\nURNs. `AEParty.vat_id` carries the 15-digit TRN, format-validated via\n`TaxIdentifier.validate_ae_trn()` (core v1.22.0); the Peppol participant ID (TIN) is auto-derived\nas its first 10 digits. `AETaxDataDocument` models the TDD's mandatory fields but is not a UBL\ninvoice and is not built on `AEInvoice`. `parse_invoice_ae` re-extracts the AE-specific elements\nfrom the raw XML and re-validates the result as `AEInvoice`, so parsing re-applies the same TRN\nand tax-rate checks a fresh construction gets — see [Available tools](#available-tools) for\nwhat's covered and what isn't. The TDD transport channel (same AS4 channel as the invoice, or a\nseparate one) remains an open documentation question, not a code gap. Full detail:\n[`specs/README.md`](specs/README.md).\n\n**Validation scope, as of v0.2.0:** `validate_invoice_ae` checks the CEN EN16931 base Schematron\nonly (structural + arithmetic/totals rules, shared with `mcp-einvoicing-be`/`mcp-ksef-pl`) — not\nthe PINT AE jurisdiction overlay (`ibr-*-ae` rules). `BR-CO-09` (VAT identifier must carry an ISO\n3166-1 alpha-2 prefix) is expected to fire on every genuine AE invoice, since UAE TRNs carry no\ncountry prefix; this is disclosed in every result, not a defect in your data. `validate_tdd_ae`\ncurrently has no validation available at all. v0.1.0 bundled five self-compiled files derived\nfrom OpenPeppol's PINT AE and TDD Schematron/XSD sources with no confirmed redistribution\nrights — removed in v0.2.0. See [`CHANGELOG.md`](CHANGELOG.md) and this monorepo's\n[`context-library/decisions/peppol-schematron-artifact.md`](https://github.com/cmendezs/mcp-einvoicing/blob/main/context-library/decisions/peppol-schematron-artifact.md).\n\n## Installation\n\n### Requirements\n\n- Python ≥ 3.11\n- [`mcp-einvoicing-core`](https://github.com/cmendezs/mcp-einvoicing-core) (installed\n  automatically as a dependency)\n\n### Using `uvx` (recommended)\n\n```bash\nuvx mcp-einvoicing-ae\n```\n\n### Using `uv`\n\n```bash\nuv add mcp-einvoicing-ae\n```\n\n### From source\n\n```bash\ngit clone https://github.com/cmendezs/mcp-einvoicing-ae.git\ncd mcp-einvoicing-ae\nuv sync --all-extras\n```\n\n## Configuration\n\n### Environment variables\n\n| Variable | Required | Default | Description |\n|---|---|---|---|\n| `LOG_LEVEL` | No | `INFO` | Logging level: `DEBUG`, `INFO`, `WARNING`, or `ERROR` |\n\nCountry-specific variables (transport endpoints, credentials, environment switches) are added\nonce the specification documents them. See [`.env.example`](.env.example). This server needs no\ncredentials to run today.\n\n## Claude Desktop integration\n\nTo use this server with Claude, add this configuration to your `claude_desktop_config.json` file:\n\n```json\n{\n  \"mcpServers\": {\n    \"einvoicing-ae\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-einvoicing-ae\"]\n    }\n  }\n}\n```\n\n## Cursor integration\n\nCursor supports MCP servers via stdio. Add the configuration in:\n- **Global** (all projects): `~/.cursor/mcp.json`\n- **Project** (this repository only): `.cursor/mcp.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"einvoicing-ae\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-einvoicing-ae\"]\n    }\n  }\n}\n```\n\nReload the Cursor window (`Ctrl+Shift+P` then *Reload Window*) to apply the changes.\n\n## Kiro integration\n\nKiro supports MCP servers via its dedicated configuration file. Two levels are available:\n- **Global** (all projects): `~/.kiro/settings/mcp.json`\n- **Workspace** (this repository only): `.kiro/settings/mcp.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"einvoicing-ae\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-einvoicing-ae\"],\n      \"disabled\": false,\n      \"autoApprove\": []\n    }\n  }\n}\n```\n\nThe file is automatically reloaded on save. You can also open the config via the command palette (`Cmd+Shift+P` / `Ctrl+Shift+P`) then *MCP*.\n\n## Available tools\n\n| Tool | Description |\n|---|---|\n| `generate_invoice_ae` | Generate a PINT AE UBL 2.1 invoice XML (billing or self-billing) from structured data via `AEUBLSerializer`. Emits every unconditionally-mandatory PINT AE element: `cbc:UUID`, `cbc:ProfileExecutionID`, per-line `cac:ItemPriceExtension`, and `PartyLegalEntity/CompanyID` (`trade_license_number`, when set). |\n| `validate_invoice_ae` | Validate a PINT AE UBL 2.1 invoice against core's shared CEN EN16931 base Schematron (structural + arithmetic/totals rules only — not the PINT AE jurisdiction overlay). Requires the `xslt2` extra. |\n| `validate_tdd_ae` | Always returns an explicit \"unavailable\" result — no licensed validation artifact is currently available for the Peppol AE Tax Data Document (TDD). |\n| `parse_invoice_ae` | Parse a PINT AE UBL 2.1 invoice XML into a structured dict. Re-extracts `document_uuid`, `profile_execution_id`, and `trade_license_number` from the raw XML and re-validates the result as `AEInvoice` — TRN format and tax-rate/category checks are re-applied to parsed content, not just fresh constructions. |\n\nPeppol participant lookup (core's `register_peppol_tools` plugin, TIN-based id adapter — scheme\n`0235`, first 10 digits of the TRN):\n\n| Tool | Description |\n|---|---|\n| `peppol_lookup_participant` | Check whether a business is registered on the Peppol network; returns registration status and supported document types |\n| `peppol_get_service_endpoint` | Fetch the AS4 endpoint for a participant's document type |\n| `resolve_peppol_dns` | DNS-only (SML) diagnostic, independent of SMP reachability |\n| `peppol_send` | Transmit a UBL/CII invoice via AS4 |\n\n`generate_invoice_ae`/`validate_invoice_ae`/`parse_invoice_ae` require `mcp-einvoicing-ae[xslt2]`\n(bundles `saxonche`) for the base Schematron validator to load; without it, `validate_invoice_ae`\nreturns an explicit \"unavailable\" result rather than a silent pass.\n\nThe tool reference in [`docs/TOOLS.md`](docs/TOOLS.md) is generated from the running server:\n\n```bash\nuv run python scripts/gen_tool_reference.py\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, the test and lint commands, and\nthe pull request checklist. Security issues follow the private disclosure process in\n[SECURITY.md](SECURITY.md).\n\n## Other e-invoicing MCP servers\n\n| Country | Server |\n|---------|--------|\n| 🌍 Global | [mcp-einvoicing-core](https://github.com/cmendezs/mcp-einvoicing-core) |\n| 🇧🇪 Belgium | [mcp-einvoicing-be](https://github.com/cmendezs/mcp-einvoicing-be) |\n| 🇧🇷 Brazil | [mcp-nfe-br](https://github.com/cmendezs/mcp-nfe-br) |\n| 🇫🇷 France | [mcp-facture-electronique-fr](https://github.com/cmendezs/mcp-facture-electronique-fr) |\n| 🇩🇪 Germany | [mcp-einvoicing-de](https://github.com/cmendezs/mcp-einvoicing-de) |\n| 🇮🇳 India | [mcp-einvoicing-in](https://github.com/cmendezs/mcp-einvoicing-in) |\n| 🇮🇹 Italy | [mcp-fattura-elettronica-it](https://github.com/cmendezs/mcp-fattura-elettronica-it) |\n| 🇲🇽 Mexico | [mcp-cfdi-mx](https://github.com/cmendezs/mcp-cfdi-mx) |\n| 🇵🇱 Poland | [mcp-ksef-pl](https://github.com/cmendezs/mcp-ksef-pl) |\n| 🇸🇬 Singapore | [mcp-invoicenow-sg](https://github.com/cmendezs/mcp-invoicenow-sg) |\n| 🇪🇸 Spain | [mcp-facturacion-electronica-es](https://github.com/cmendezs/mcp-facturacion-electronica-es) |\n| 🇦🇪 United Arab Emirates | [mcp-einvoicing-ae](https://github.com/cmendezs/mcp-einvoicing-ae) |\n\n## License\n\nThis project is licensed under the **Apache 2.0** license — see [LICENSE](LICENSE) for details. For the full version history, see [CHANGELOG.md](CHANGELOG.md).\n",
  "bytes": 10813,
  "sha": "7ed823a290a33ce0f600a942642abebc410c410182da4b09dfd7cd6d2be892bc",
  "repo_slug": "cmendezs/mcp-einvoicing-ae",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_cmendezs_mcp_einvoicing_ae_86a21ad5/readme"
}