Greece Invoice MCP
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:
[](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.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessSyncing