Skip to main content
Glama
README.md
# Greece Invoice MCP 🇬🇷 — How can my AI agent issue a myDATA τιμολόγιο (timologio) in Greece?

<!-- install-cta -->
## Use it in 60 seconds

Paste this into your MCP client config (Claude Desktop, Cursor, Windsurf, or any MCP-capable agent):

```json
{
  "mcpServers": {
    "greece-invoice": {
      "type": "http",
      "url": "https://inv-gr.wishpool.app/mcp"
    }
  }
}
```

Nothing to install. Credentials, when you need them, travel as HTTP headers on each request and are never stored — see the [threat model](https://mcp.wishpool.app/trust).

### Or run it yourself

Would you rather not send production credentials to a server you do not control? Deploy this identical code to your own account and point your agent at your own URL:

[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/junter1989k-ai/greece-invoice-mcp)

```bash
git clone https://github.com/junter1989k-ai/greece-invoice-mcp && cd greece-invoice-mcp && npx vercel --prod
```

MIT-licensed. Self-hosting removes us from the picture entirely, at no cost and with no loss of function.

---

Remote MCP server that lets any AI agent issue **Greece myDATA electronic invoices** (τιμολόγιο / timologio) into the national **AADE (ΑΑΔΕ)** platform. It builds an **AadeBookInvoiceType** `<InvoicesDoc>` XML and transmits it under the merchant's own AADE credentials, returning the official **MARK** (unique registration number). Stateless, bring-your-own credentials, never stores anything.

**Live endpoint:** `https://inv-gr.wishpool.app/mcp` · Registry: `app.wishpool/greece-invoice-mcp`

## Quick start

```json
{
  "mcpServers": {
    "greece-invoice": {
      "type": "http",
      "url": "https://inv-gr.wishpool.app/mcp",
      "headers": {
        "x-aade-user-id": "<your myDATA user id>",
        "x-aade-subscription-key": "<your Ocp-Apim subscription key>"
      }
    }
  }
}
```

You register your ERP once on the **AADE myDATA portal** and receive a user id + subscription key (the developer/test rail issues them instantly). Requests default to the AADE **test** rail (no fiscal effect); add `x-aade-mode: prod` for the live rail. Your credentials never leave your side beyond the per-request header.

## Tools

| Tool | What it does |
|---|---|
| `create_invoice` | Build an AadeBookInvoiceType invoice from `counterpart_vat` + `lines` (`net_value`, `vat_rate` 24/13/9/6/4/17/0) and transmit to AADE myDATA `/SendInvoices`. Returns the official `MARK`, invoice `uid`, `qr_url` + computed VAT totals. |
| `query_invoice` | Look up one of your own transmitted docs by `mark` via `/RequestTransmittedDocs`; `found:true` means AADE has it registered. Pass `mark=0` to list from the start. |

Amounts are in EUR, VAT-exclusive per line. Greek VAT rates map to AADE `vatCategory` automatically: 24 (cat 1, mainland standard), 13 (2), 6 (3), 17 (4), 9 (5), 4 (6), 0 (7, exempt — needs a `vat_exemption_category` 1-31). `invoice_type` defaults to **1.1** (sales); use **2.1** for services, **5.1** for a credit note.

**No cancel at the API level** — corrections are issued as a credit note (`invoice_type` 5.1). Income classification (E3) is optional per line (`income_classification_type` / `income_classification_category`) — supply it if your accounting requires it.

Owner policy guardrails ride optional headers (`x-agentpay-max-amount`, `x-agentpay-approval-above`, `x-agentpay-allowed-tools`) — set by the human owner in client config; the agent cannot relax them.

## Endpoints wrapped (AADE myDATA REST, ERP channel)

- Base: DEV `https://mydataapidev.aade.gr/` · PROD `https://mydatapi.aade.gr/myDATA/`
- Headers forwarded: `aade-user-id`, `ocp-apim-subscription-key`, `Content-Type: text/xml`
- Send: `POST /SendInvoices` (raw `<InvoicesDoc>` XML body) → `<ResponseDoc>` with `statusCode` + `invoiceUid` / `invoiceMark` / `qrUrl`
- Query: `GET /RequestTransmittedDocs?mark={n}` → your transmitted docs with MARK greater than `n`

## Develop

```bash
node test/serve.js   # local server on :3237
node test/e2e.js     # protocol + validation + VAT math + AadeBookInvoiceType structure + fake-header live probes
```

## Safety

Pure stateless translation layer over the national AADE myDATA API. The user id + subscription key travel per-request in headers, nothing is stored. [Privacy policy](https://inv-gr.wishpool.app/privacy).

## Sister servers

National e-invoicing, one family: Romania e-Factura (inv-ro) · Mexico CFDI (inv-mx) · Brazil NF-e (inv-br) · Chile DTE (inv-cl) · Peru CPE (inv-pe) · India GST (inv-in). Local payments in 81 countries: [mcp.wishpool.app](https://mcp.wishpool.app).

MIT licensed.

Maintenance

ActivityMaintained
ResponsivenessSyncing