About invapi-mcp
invapi-mcp is an MCP server for the Invapi E-Invoicing API, aimed at workflows that process electronic invoices. It combines format conversion, standards validation, and data extraction through a set of invoice tools.
Key features
- 01Convert JSON, UBL, and CII invoices
- 02Create ZUGFeRD PDFs and Excel files
- 03Validate UBL, CII, and XML
- 04Extract invoice data from PDFs or images
- 05Extract QR code data
- 06Batch up to 100 conversions
Use cases
- 01Convert invoices between JSON and UBL or CII
- 02Validate XML against XRechnung 3.0.2
- 03Extract structured data from invoice scans
- 04Process multiple conversion operations in one request
MCP support
It exposes Invapi E-Invoicing API operations as MCP tools for conversion, validation, extraction, and account information.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @invapi/mcp-serverINVAPI_API_KEYSecretYour API key for InvapiLocal servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
14Saved tool list · updated 3w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| invoice | object | Yes | |
| invoice.id | string | No | |
| invoice.buyer | object | Yes | The party receiving the invoice |
| invoice.buyer.name | any | Yes | |
| invoice.buyer.contact | any | Yes | |
| invoice.buyer.postal_address | any | Yes | |
| invoice.buyer.vat_identifier | any | No | |
| invoice.items | array | Yes | Invoice line items (at least 1) |
| invoice.seller | object | Yes | The party issuing the invoice |
| invoice.seller.name | string | Yes | Full formal name of the party |
| invoice.seller.contact | object | Yes | |
| invoice.seller.contact.email_address | string | No | Email address |
| invoice.seller.contact.telephone_number | string | No | Phone number |
| invoice.seller.postal_address | object | Yes | |
| invoice.seller.postal_address.city | string | Yes | City name |
| invoice.seller.postal_address.post_code | string | Yes | Postal / ZIP code |
| invoice.seller.postal_address.country_code | string | Yes | ISO 3166-1 alpha-2 country code, e.g. 'DE', 'US', 'FR' |
| invoice.seller.postal_address.address_line_1 | string | Yes | Street address line 1 |
| invoice.seller.postal_address.address_line_2 | string | No | Street address line 2 |
| invoice.seller.postal_address.address_line_3 | string | No | Street address line 3 |
| invoice.seller.postal_address.country_subdivision | string | No | State / province / region |
| invoice.seller.vat_identifier | string | No | VAT identification number |
| invoice.totals | object | Yes | |
| invoice.totals.paid_amount | number | Yes | Amount already paid |
| invoice.totals.sum_of_charges | number | No | |
| invoice.totals.rounding_amount | number | No | |
| invoice.totals.total_vat_amount | number | Yes | Total VAT amount |
| invoice.totals.sum_of_allowances | number | No | |
| invoice.totals.total_amount_with_vat | number | Yes | Sum of all line items with VAT |
| invoice.totals.amount_due_for_payment | number | Yes | Amount due for payment |
| invoice.totals.total_amount_without_vat | number | Yes | Sum of all line items without VAT |
| invoice.totals.invoice_total_without_vat | number | No | |
| invoice.category | string | No | Invoice category |
| invoice.invoice_date | string | Yes | Issue date in YYYY-MM-DD format |
| invoice.invoice_note | string | No | |
| invoice.invoice_type | enum | Yes | 'incoming' = received from vendor/supplier; 'outgoing' = sent to customerincoming | outgoing |
| invoice.invoice_number | string | Yes | Unique invoice identifier, e.g. 'INV-2025-001' |
| invoice.additional_data | object | No | |
| invoice.additional_data.project | string | No | Project reference |
| invoice.additional_data.order_id | string | No | |
| invoice.additional_data.leitweg_id | string | No | Leitweg-ID for German government invoicing |
| invoice.additional_data.customer_id | string | No | |
| invoice.additional_data.delivery_id | string | No | |
| invoice.additional_data.reverse_charge | boolean | No | True if VAT reverse charge applies |
| invoice.additional_data.invoicing_period | object | No | |
| invoice.additional_data.invoicing_period.end | string | Yes | Period end date (YYYY-MM-DD) |
| invoice.additional_data.invoicing_period.start | string | Yes | Period start date (YYYY-MM-DD) |
| invoice.additional_data.preceeding_invoice_number | string | No | |
| invoice.invoice_description | string | Yes | Short description of the invoice |
| invoice.payment_information | object | Yes | |
| invoice.payment_information.payment_type | enum | No | Payment methodcredit_card | credit_transfer | cash | online_payment_service |
| invoice.payment_information.payment_terms | string | No | |
| invoice.payment_information.credit_card_type | string | No | |
| invoice.payment_information.payment_due_date | string | No | Due date (YYYY-MM-DD) |
| invoice.payment_information.payment_reference | string | No | |
| invoice.payment_information.credit_card_number | string | No | |
| invoice.payment_information.payment_payed_date | string | No | Date payment was made (YYYY-MM-DD) |
| invoice.payment_information.payment_instructions | string | No | |
| invoice.payment_information.payment_account_number | string | No | IBAN or account number |
| invoice.delivery_information | object | No | |
| invoice.delivery_information.deliver_to | string | No | Delivery recipient name |
| invoice.delivery_information.delivery_date | string | No | Delivery date (YYYY-MM-DD) |
| invoice.delivery_information.delivery_method | string | No | |
| invoice.delivery_information.deliver_to_address | object | No | |
| invoice.delivery_information.deliver_to_address.city | string | Yes | |
| invoice.delivery_information.deliver_to_address.post_code | string | Yes | |
| invoice.delivery_information.deliver_to_address.country_code | string | Yes | |
| invoice.delivery_information.deliver_to_address.address_line_1 | string | Yes | Street address line 1 |
| invoice.delivery_information.deliver_to_address.address_line_2 | string | No | |
| invoice.delivery_information.deliver_to_address.address_line_3 | string | No | |
| invoice.delivery_information.deliver_to_address.country_subdivision | string | No | |
| invoice.delivery_information.delivery_instructions | string | No | |
| invoice.invoice_currency_code | string | Yes | ISO 4217 currency code, e.g. 'EUR', 'USD', 'GBP' |
| output_path | string | No | File path to save the UBL XML output. If omitted, XML is returned inline. |
Details
From the project README@invapi/mcp-server
MCP server for the Invapi E-Invoicing API — convert, validate, and extract invoices in UBL, CII, ZUGFeRD, Excel, and more.
Quick Start
npm install -g @invapi/mcp-server
Set your API key (get one at invapi.org):
export INVAPI_API_KEY=your-api-key
Usage
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"invapi": {
"command": "npx",
"args": ["-y", "@invapi/mcp-server"],
"env": {
"INVAPI_API_KEY": "your-api-key"
}
}
}
}
Claude Code
claude mcp add -e INVAPI_API_KEY=xxx invapi -- npx @invapi/mcp-server
Tools
Conversion
| Tool | Description |
|---|---|
invapi_convert_json_to_ubl | JSON Invoice → UBL XML |
invapi_convert_json_to_cii | JSON Invoice → CII XML |
invapi_convert_ubl_to_json | UBL XML → JSON Invoice |
invapi_convert_cii_to_json | CII XML → JSON Invoice |
invapi_convert_json_to_xlsx | JSON Invoices → Excel file |
invapi_create_zugferd_pdf | PDF + JSON Invoice → ZUGFeRD PDF |
invapi_convert_zugferd_to_json | ZUGFeRD PDF → JSON Invoice |
Validation
| Tool | Description |
|---|---|
invapi_validate_ubl | Validate UBL XML against XRechnung 3.0.2 (EN 16931) |
invapi_validate_cii | Validate CII XML against XRechnung 3.0.2 (EN 16931) |
invapi_validate_xml | Validate XML with auto-detected format |
Extraction
| Tool | Description |
|---|---|
invapi_extract_invoice | Extract structured invoice data from PDF or image |
invapi_extract_qr | Extract QR code data from image |
User
| Tool | Description |
|---|---|
invapi_get_user | Get account info and remaining API credits |
Batch
| Tool | Description |
|---|---|
invapi_batch_convert | Run up to 100 conversion operations in a single request |
Development
git clone https://github.com/invapi/invapi-mcp.git
cd invapi-mcp
npm install
npm run dev
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.