Skip to main content
Glama
README.md
# Facturolia MCP server

Let an AI assistant read and check European electronic invoices.

Point Claude (or any MCP-compatible client) at a `.pdf` or `.xml` invoice and it
answers with the contents in plain language, plus a consistency check against
the European standard **EN 16931**.

Supports **Factur-X**, **ZUGFeRD**, **XRechnung**, **UBL** and **CII**.

```
> Read ~/Downloads/invoice.pdf

Format: Factur-X / CII (EN 16931 (COMFORT) profile)
Invoice F-2026-0148 · issued 2026-07-15 · due 2026-08-14
Supplier: Studio Lumiere EURL
Customer: Cafe des Arts SARL
Total excl. VAT 1240.00 EUR · VAT 248.00 EUR · Total incl. VAT 1488.00 EUR

Lines (1):
  - Consulting : 2 x 620.00 EUR = 1240.00 EUR (VAT 20 %)

EN 16931 check: no anomalies found.
```

## Why this exists

A Factur-X invoice is a PDF with structured data hidden inside it. The page a
human reads and the data a machine imports are two different things, and they do
not always agree. This server exposes both, so an assistant can answer "what is
actually in this file?" rather than reading the visible page and hoping.

France made structured e-invoicing mandatory for receiving on 1 September 2026,
so these files are now arriving in ordinary inboxes.

## Install

No dependencies. Python 3.10 or newer is all you need.

1. Download [`facturolia_mcp.py`](facturolia_mcp.py).
2. Get a free API key at [facturolia.fr/en/pricing](https://facturolia.fr/en/pricing).
3. Add it to your client configuration. For Claude Desktop, that is
   `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "facturolia": {
      "command": "python",
      "args": ["/absolute/path/to/facturolia_mcp.py"],
      "env": { "FACTUROLIA_API_KEY": "your-key" }
    }
  }
}
```

Restart the client. Two tools appear.

## Tools

| Tool | What it returns |
|---|---|
| `read_invoice` | Full contents: parties, dates, lines, VAT breakdown, totals, IBAN, plus the EN 16931 check |
| `check_invoice` | The compliance verdict and anomalies only, for "is this invoice correct?" |

Both take one argument, `path`, an absolute path to a `.pdf` or `.xml` file.

## Configuration

| Variable | Default | Meaning |
|---|---|---|
| `FACTUROLIA_API_KEY` | required | Your key |
| `FACTUROLIA_LANG` | `en` | Response language, `en` or `fr` |
| `FACTUROLIA_BASE_URL` | `https://facturolia.fr` | Override for testing |

With `FACTUROLIA_LANG=fr` the answers come back in French, with French date and
label conventions. The tool descriptions stay in English so that every client
understands them.

## What it does with your file

The file is **sent to the Facturolia API** to be analysed. It is processed in
memory and discarded immediately, no invoice is stored, and the contents do not
appear in the technical logs. The servers are in the European Union.

That said, this is **not local processing**. If your policy forbids sending
invoices to an external service, use the API yourself inside your own network
instead, or do not use this server.

Limits: 10 MB per file, `.pdf` and `.xml` only.

## What this is not

It reads and checks invoices. It does not issue them, does not transmit them,
and is not a compliance solution. In France, sending an invoice legally goes
through an accredited platform (*Plateforme Agréée*). This tool sits before and
after that step, never in place of it.

## Links

- Web reader, free and without an account: [facturolia.fr/en](https://facturolia.fr/en)
- REST API documentation: [facturolia.fr/en/api](https://facturolia.fr/en/api)

## Licence

MIT. See [LICENSE](LICENSE).

TDQS

A4.4/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: read_invoice extracts full contents while check_invoice returns only the validation verdict. Their descriptions explicitly cross-reference each other to prevent confusion, so an agent can easily select the right one.

Naming Consistency4/5

Both tool names follow a consistent verb_noun pattern (read_invoice, check_invoice), using snake_case and clear action words. The only minor deviation is that they are not from the same action family (read vs. check), but this is acceptable given the distinct operations.

Tool Count3/5

With only 2 tools, the surface is quite thin, but for a focused invoice-processing server that offers exactly two complementary operations (read and check), it may be sufficient. However, typical MCP servers have more tools, so this feels slightly minimal.

Completeness3/5

The domain appears to be electronic invoice handling, and the two tools cover content extraction and validation. Missing operations include invoice creation, listing, or deletion, but for an analysis/validation service, these might be out of scope. Still, there is no way to manage invoices, so the surface is incomplete for a full lifecycle.

Maintenance

ActivityMaintained
ResponsivenessNo issues