The distinctions that make Portuguese invoicing painful are first-class here: AT-registered document sequences, regional VAT rates, devolution notes, and a SAF-T export that produces the XML for the monthly submission. The date handling is the small tell — you send ISO dates, the server converts to the Portuguese format the API wants, so nobody has to remember which layer expects which.
An MCP server over the InvoiceExpress API, built around Portuguese tax compliance. It covers the document types Portuguese law actually distinguishes — invoices, simplified invoices, receipts, credit notes, estimates, shipping and devolution guides — and handles the ISO-to-DD/MM/YYYY date conversion the API expects.
- Invoice lifecycle: list with filters, create, read, update, email, generate the PDF, change state between draft, sent, final and canceled, fetch related credit notes and receipts, generate and cancel payment references, and produce payment QR codes — `invoice_list`, `invoice_create`, `invoice_send_email`, `invoice_generate_pdf`, `invoice_change_state`, `invoice_generate_payment`, `invoice_get_qrcode`
- Clients with Portuguese fiscal details, searchable by name or by code, with their invoice history — `client_list`, `client_create`, `client_find_by_name`, `client_find_by_code`, `client_list_invoices`
- Estimates and quotes with their own state workflow, PDF and email path — `estimate_create`, `estimate_change_state`, `estimate_send_email`
- Transport documentation: shipping guides and devolution notes with state management and tracking QR codes — `guide_create`, `guide_change_state`, `guide_get_qrcode`
- Tax and numbering: IVA rates including the Açores and Madeira regional ones, and document sequences registered with the Portuguese Tax Authority — `tax_list`, `tax_create`, `sequence_create`, `sequence_set_as_current`, `sequence_register`
- Monthly SAF-T export in the XML format the tax authority requires — `saft_export`
- Treasury: client balances, initial balance updates, regularizations, and recorded payments and reimbursements — `treasury_get_client_balance`, `treasury_create_movement`, `treasury_create_regularization`
- A product and service catalogue with tax rates attached — `item_list`, `item_create`, `item_update`
An InvoiceExpress account with API access, plus two environment variables: `INVOICEEXPRESS_API_KEY` and `INVOICEEXPRESS_ACCOUNT_NAME` — the account name is the subdomain in your InvoiceExpress URL, and the key comes from Settings > API Access. Node.js 18.0.0 or newer. Run it through `npx` as `@wizardingcode/invoiceexpress-mcp@latest`; `bunx` is the documented fallback if you hit ERR_MODULE_NOT_FOUND. `MCP_MODE=silent` reduces logging. The CLI accepts `--transport` for stdio, http or sse and `--port` for the HTTP modes.
One command plus a key — npx -y @wizardingcode/invoiceexpress-mcp@latest, then supply credentials
