lexware-mcp-server
This MCP server lets you manage Lexware Office business data through the Model Context Protocol, including sales vouchers, contacts, articles, bookkeeping vouchers, files, payments, reference data, and webhooks.
Create, retrieve, download, and deeplink invoices, credit notes, quotations, order confirmations, delivery notes, and down payment invoices.
Pursue quotations/order confirmations/delivery notes into invoices, invoices into credit notes/dunnings, and quotations into order confirmations or delivery notes.
Create, list, get, update, and delete articles; create, list, get, update, and deeplink contacts.
Create, get, update, and deeplink bookkeeping vouchers; upload voucher attachments; look up vouchers by number; search/filter all voucher types with
lexware_list_voucherlist.Retrieve payment details for vouchers.
List reference data: countries, payment conditions, posting categories, organization profile, and print layouts.
Upload/download files, check file processing status, and deeplink to the files inbox.
Manage webhook event subscriptions and verify Lexware webhook signatures.
List, get, and deeplink recurring invoice templates.
Optionally run in read-only mode (
LEXWARE_READ_ONLY=true) to refuse data-changing tools.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@lexware-mcp-server Create an invoice for ACME Corp for 150 EUR"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
lexware-mcp-server
MCP server for the Lexware Office API. Manage invoices, contacts, articles, vouchers, and more through the Model Context Protocol.
Unofficial community project — not affiliated with Lexware GmbH or Haufe Group. See the Disclaimer.
Requirements
Node.js 20 or newer.
A Lexware Office API token from the Lexware Office API settings.
Related MCP server: Lexware Office MCP Server
Quick start
1. Store the token in the OS keyring
The server reads the token from the OS keyring first (service lexware-mcp, account api-token)
and falls back to the LEXWARE_API_TOKEN environment variable. The keyring is recommended: your MCP
config then holds no credentials.
The commands below prompt for the token, so it never lands in your shell history or the process list.
macOS:
security add-generic-password -s "lexware-mcp" -a "api-token" -wLinux (needs a Secret Service / libsecret):
secret-tool store --label="Lexware Office API" service lexware-mcp username api-tokenFor Windows, headless machines, and the environment-variable fallback, see the configuration guide.
2. Add the server to your MCP client
{
"mcpServers": {
"lexware": {
"command": "npx",
"args": ["-y", "@lazyants/lexware-mcp-server"]
}
}
}Put this in your client's MCP configuration, for example claude_desktop_config.json for Claude
Desktop. In Claude Code, run:
claude mcp add --scope user lexware -- npx -y @lazyants/lexware-mcp-servernpx downloads and runs the package; no separate install is needed. Restart the client, and the
Lexware tools appear in its tool list.
Entry points
The package provides a full server and smaller split servers that each cover one area. Use a split server to reduce context size or to stay under your MCP client's tool limit.
Command | Covers |
| Everything below |
| Invoices, Credit Notes, Quotations, Order Confirmations, Delivery Notes, Down Payment Invoices, Dunnings, Voucherlist |
| Contacts, Articles |
| Vouchers, Voucherlist, Payments |
| Countries, Payment Conditions, Posting Categories, Profile, Print Layouts |
| Event Subscriptions, Files, Recurring Templates |
Run a split server with npx -y -p @lazyants/lexware-mcp-server lexware-mcp-sales. The
configuration guide
has client examples for split servers and for several Lexware accounts.
What the tools do
Tool names follow lexware_<action>_<resource>, for example lexware_create_invoice or
lexware_list_voucherlist. They create and read sales vouchers such as invoices and quotations,
manage contacts and articles, record bookkeeping vouchers, search across voucher types, upload and
download files, and manage webhook subscriptions. Your MCP client's tool list, with each tool's
description and input schema, is the authoritative inventory.
Every entry point also serves a read-only MCP resource, reference://lexware/api, with API
conventions, text formatting rules, and webhook guidance.
The usage guide explains the API caveats: finalizing at creation, voucher search filters, voucher updates, file uploads and downloads, and webhooks.
Security
Use the OS keyring and never commit your API token to version control.
Create, update, delete, upload, and pursue tools change real business data in your Lexware account. A pursue tool creates a follow-up document.
Set
LEXWARE_READ_ONLY=trueto make the server refuse every tool that changes data. See Read-only mode.Without read-only mode, two things stop unintended changes: the permissions of your Lexware API token, which Lexware enforces, and your MCP client's approval prompts. Tool annotations such as
readOnlyHintare hints for the client, not checks.Split servers offer fewer tools, but most of them still include tools that change data. For a conservative setup, see Limit what the server can change.
Requests that hit the rate limit (HTTP 429) are retried automatically with exponential backoff.
To report a vulnerability, see SECURITY.md.
Documentation
Configuration — keyring setup for macOS, Windows, and Linux; environment variables; Claude Code and Claude Desktop; split servers and multiple accounts; limiting what the server can change.
Usage notes — API behavior and caveats.
Releasing — maintainer release procedure.
Releasing
Maintainers: follow the release guide.
Never create a release with a bare gh release create; the guide's guarded tag sequence explains
why and prevents republishing an old version.
Disclaimer
This is an unofficial, independent community project. It is not affiliated with, endorsed by, sponsored by, or supported by Lexware GmbH, Haufe Group, or any of their affiliates. For official Lexware support, contact Lexware directly — issues with this MCP server should be reported here, not to Lexware.
"Lexware" and "Lexware Office" are trademarks of their respective owners and are used in this project's name and documentation under nominative fair use, solely to identify the third-party API this client connects to.
Create, update, and delete operations modify real business data in your Lexware account. The authors provide this software "as-is" and accept no responsibility for unintended changes, data loss, or any other damages arising from its use. Test against a sandbox or non-critical account before running write operations against production data.
License
FSL-1.1-MIT — see LICENSE for the full terms.
Available Tools
66 toolslexware_create_articleCreate ArticleB
Create a new article. Only description supports Lexware formatting (bold, italic, and dash-prefixed list items separated by newlines); article title does not support formatting.
Inputs: body (required).
lexware_create_contactCreate ContactB
Create a new contact.
Inputs: body (required).
lexware_create_credit_noteCreate Credit NoteA
Create a new credit note in Lexware; finalize=true finalizes at creation, false or omitted creates a draft. In introduction, lineItems[].description, and remark, use only Lexware formatting: bold, italic, and dash-prefixed list items separated by newlines.
Inputs: body (required), finalize.
lexware_create_delivery_noteCreate Delivery NoteA
Create a new delivery note in Lexware; finalize=true finalizes at creation, false or omitted creates a draft. In introduction, lineItems[].description, and remark, use only Lexware formatting: bold, italic, and dash-prefixed list items separated by newlines.
Inputs: body (required), finalize.
lexware_create_event_subscriptionCreate Event SubscriptionA
Create a Lexware webhook subscription for an external callback handler; this MCP server manages subscriptions and verifies signatures but does not host a receiver. Acknowledge with HTTP 200/204 within 5 seconds, enqueue the payload for asynchronous processing, and throttle outgoing API calls to respect rate limits.
Inputs: eventType (required), callbackUrl (required).
lexware_create_invoiceCreate InvoiceA
Create a new invoice in Lexware; finalize=true creates status "open", false or omitted creates a draft, and the API cannot finalize an existing draft. In introduction, lineItems[].description, and remark, use only Lexware formatting: bold, italic, and dash-prefixed list items separated by newlines.
Inputs: body (required), finalize.
lexware_create_order_confirmationCreate Order ConfirmationA
Create a new order confirmation in Lexware; finalize=true finalizes at creation, false or omitted creates a draft. In introduction, lineItems[].description, and remark, use only Lexware formatting: bold, italic, and dash-prefixed list items separated by newlines.
Inputs: body (required), finalize.
lexware_create_quotationCreate QuotationA
Create a new quotation in Lexware; finalize=true finalizes at creation, false or omitted creates a draft. In introduction, lineItems[].description, and remark, use only Lexware formatting: bold, italic, and dash-prefixed list items separated by newlines.
Inputs: body (required), finalize.
lexware_create_voucherCreate VoucherA
Create a new bookkeeping voucher in Lexware.
Inputs: body (required).
lexware_deeplink_contactDeeplink ContactBRead-onlyIdempotent
Get a direct URL to view a contact in the Lexware web app. Returns deeplink and its permanent alias url with the same value.
Inputs: id (required).
lexware_deeplink_credit_noteDeeplink to Credit NoteARead-onlyIdempotent
Get a direct link to view/edit a credit note in the Lexware web app.
Inputs: id (required).
lexware_deeplink_delivery_noteDeeplink to Delivery NoteARead-onlyIdempotent
Get a direct link to view/edit a delivery note in the Lexware web app.
Inputs: id (required).
lexware_deeplink_down_payment_invoiceDeeplink to Down Payment InvoiceARead-onlyIdempotent
Get a direct link to view/edit a down payment invoice in the Lexware web app.
Inputs: id (required).
lexware_deeplink_dunningDeeplink to DunningARead-onlyIdempotent
Get a direct link to view/edit a dunning in the Lexware web app.
Inputs: id (required).
lexware_deeplink_fileDeeplink to Files InboxBRead-onlyIdempotent
Get a direct link to the bookkeeping inbox of newly-uploaded files in the Lexware web app.
Inputs: no named parameters.
lexware_deeplink_invoiceDeeplink to InvoiceARead-onlyIdempotent
Get a direct link to view/edit an invoice in the Lexware web app.
Inputs: id (required).
lexware_deeplink_order_confirmationDeeplink to Order ConfirmationARead-onlyIdempotent
Get a direct link to view/edit an order confirmation in the Lexware web app.
Inputs: id (required).
lexware_deeplink_quotationDeeplink to QuotationARead-onlyIdempotent
Get a direct link to view/edit a quotation in the Lexware web app.
Inputs: id (required).
lexware_deeplink_recurring_templateDeeplink to Recurring TemplateARead-onlyIdempotent
Get a direct link to view/edit a recurring invoice template in the Lexware web app.
Inputs: id (required).
lexware_deeplink_voucherDeeplink to VoucherARead-onlyIdempotent
Get a direct link to view/edit a bookkeeping voucher in the Lexware web app.
Inputs: voucherId (required).
lexware_delete_articleDelete ArticleBDestructiveIdempotent
Delete an article by ID.
Inputs: id (required).
lexware_delete_event_subscriptionDelete Event SubscriptionBDestructive
Delete a webhook event subscription from Lexware.
Inputs: id (required).
lexware_download_credit_note_fileDownload Credit Note FileARead-onlyIdempotent
Download the file for a credit note. Defaults to PDF; pass format="xml" to request the XRechnung XML e-invoice when available (the API returns whatever representation it can render).
Inputs: id (required), format.
lexware_download_delivery_note_fileDownload Delivery Note FileARead-onlyIdempotent
Download the PDF file for a delivery note.
Inputs: id (required).
lexware_download_down_payment_invoice_fileDownload Down Payment Invoice FileARead-onlyIdempotent
Download the file for a down payment invoice. Defaults to PDF; pass format="xml" to request the XRechnung XML e-invoice when available (the API returns whatever representation it can render).
Inputs: id (required), format.
lexware_download_dunning_fileDownload Dunning FileARead-onlyIdempotent
Download the PDF file for a dunning.
Inputs: id (required).
lexware_download_fileDownload FileBRead-onlyIdempotent
Download a file from Lexware as base64-encoded content. Choose pdf (default) or xml for an available e-invoice XML original.
Inputs: id (required), format.
lexware_download_invoice_fileDownload Invoice FileARead-onlyIdempotent
Download the file for an invoice. Defaults to PDF; pass format="xml" to request the XRechnung XML e-invoice when available (the API returns whatever representation it can render).
Inputs: id (required), format.
lexware_download_order_confirmation_fileDownload Order Confirmation FileARead-onlyIdempotent
Download the PDF file for an order confirmation.
Inputs: id (required).
lexware_download_quotation_fileDownload Quotation FileARead-onlyIdempotent
Download the PDF file for a quotation.
Inputs: id (required).
lexware_get_articleGet ArticleARead-onlyIdempotent
Get a single article by ID.
Inputs: id (required).
lexware_get_contactGet ContactARead-onlyIdempotent
Get a single contact by ID.
Inputs: id (required).
lexware_get_credit_noteGet Credit NoteARead-onlyIdempotent
Retrieve a credit note by ID from Lexware.
Inputs: id (required).
lexware_get_delivery_noteGet Delivery NoteARead-onlyIdempotent
Retrieve a delivery note by ID from Lexware.
Inputs: id (required).
lexware_get_down_payment_invoiceGet Down Payment InvoiceBRead-onlyIdempotent
Retrieve a down payment invoice by ID from Lexware.
Inputs: id (required).
lexware_get_dunningGet DunningARead-onlyIdempotent
Retrieve a dunning by ID from Lexware.
Inputs: id (required).
lexware_get_event_subscriptionGet Event SubscriptionARead-onlyIdempotent
Retrieve a webhook event subscription by ID from Lexware.
Inputs: id (required).
lexware_get_file_statusGet File StatusARead-onlyIdempotent
Get the processing status of an uploaded file from Lexware. Requires an API key with the file-status scope; keys without it get an access_denied error from Lexware.
Inputs: id (required).
lexware_get_invoiceGet InvoiceARead-onlyIdempotent
Retrieve an invoice by ID from Lexware.
Inputs: id (required).
lexware_get_order_confirmationGet Order ConfirmationARead-onlyIdempotent
Retrieve an order confirmation by ID from Lexware.
Inputs: id (required).
lexware_get_paymentsGet PaymentsARead-onlyIdempotent
Get payment details for a specific voucher.
Inputs: id (required).
lexware_get_profileGet ProfileARead-onlyIdempotent
Get the organization profile information.
Inputs: no named parameters.
lexware_get_quotationGet QuotationBRead-onlyIdempotent
Retrieve a quotation by ID from Lexware.
Inputs: id (required).
lexware_get_recurring_templateGet Recurring TemplateARead-onlyIdempotent
Retrieve a recurring invoice template by ID from Lexware.
Inputs: id (required).
lexware_get_voucherGet VoucherARead-onlyIdempotent
Retrieve a bookkeeping voucher by ID from Lexware. The voucherStatus field in the response is normalized to its canonical lowercase form. Known values: unchecked, open, paid, paidoff, voided, transferred, sepadebit. Retries up to 3 times (1 s / 2 s / 4 s) on 404 to absorb the indexing delay after an upload; if the voucher is still missing, returns { voucherId, status: "processing", message } rather than an error. Other failures are reported as errors.
Inputs: id (required).
lexware_list_articlesList ArticlesARead-onlyIdempotent
List all articles with optional pagination.
Inputs: gtin, page, size, type, +1 more.
lexware_list_contactsList ContactsARead-onlyIdempotent
List all contacts with optional pagination and filters.
Inputs: name, page, size, email, +3 more.
lexware_list_countriesList CountriesARead-onlyIdempotent
List all available countries with their tax classifications.
Inputs: no named parameters.
lexware_list_event_subscriptionsList Event SubscriptionsARead-onlyIdempotent
List all webhook event subscriptions in Lexware.
Inputs: no named parameters.
lexware_list_payment_conditionsList Payment ConditionsARead-onlyIdempotent
List all available payment conditions.
Inputs: no named parameters.
lexware_list_posting_categoriesList Posting CategoriesARead-onlyIdempotent
List all available posting categories for bookkeeping.
Inputs: no named parameters.
lexware_list_print_layoutsList Print LayoutsARead-onlyIdempotent
List available print layout templates.
Inputs: no named parameters.
lexware_list_recurring_templatesList Recurring TemplatesBRead-onlyIdempotent
List recurring invoice templates from Lexware.
Inputs: page, size.
lexware_list_voucherlistList VoucherlistBRead-onlyIdempotent
Search and filter across all voucher types in Lexware. This is the main way to find invoices, credit notes, quotations, and other voucher types.
Inputs: page, size, sort, archived, +13 more.
lexware_list_vouchersLook Up Vouchers by NumberARead-onlyIdempotent
Look up bookkeeping vouchers by voucher number. GET /vouchers is a LOOKUP endpoint, not a browsable collection: the Lexware API rejects any call without voucherNumber with HTTP 400 "voucherNumber parameter is required". To browse or filter vouchers, use lexware_list_voucherlist, which is the collection endpoint and carries the summary fields (contactName, openAmount) that /vouchers does not.
Inputs: voucherNumber (required), page, size.
lexware_pursue_credit_notePursue to a Credit NoteADestructive
Create a new credit note from an invoice via POST /credit-notes?precedingSalesVoucherId={id}[&finalize=true]; finalize=true finalizes the credit note, false or omitted creates a draft. In introduction, lineItems[].description, and remark, use only Lexware formatting: bold, italic, and dash-prefixed list items separated by newlines.
Inputs: body (required), precedingSalesVoucherId (required), finalize.
lexware_pursue_delivery_notePursue to a Delivery NoteB
Create a new delivery note from a quotation or order confirmation via POST /delivery-notes?precedingSalesVoucherId={id}. In introduction, lineItems[].description, and remark, use only Lexware formatting: bold, italic, and dash-prefixed list items separated by newlines.
Inputs: body (required), precedingSalesVoucherId (required).
lexware_pursue_dunningPursue to a DunningA
Create a new dunning from an invoice via POST /dunnings?precedingSalesVoucherId={id}; dunnings are always created as drafts and do not need finalization. In introduction, lineItems[].description, and remark, use only Lexware formatting: bold, italic, and dash-prefixed list items separated by newlines.
Inputs: body (required), precedingSalesVoucherId (required).
lexware_pursue_invoicePursue to an InvoiceA
Create a new invoice from a quotation, order confirmation, or delivery note via POST /invoices?precedingSalesVoucherId={id}[&finalize=true]; finalize=true creates status "open", false or omitted creates a draft. In introduction, lineItems[].description, and remark, use only Lexware formatting: bold, italic, and dash-prefixed list items separated by newlines.
Inputs: body (required), precedingSalesVoucherId (required), finalize.
lexware_pursue_order_confirmationPursue to an Order ConfirmationA
Create a new order confirmation from a quotation via POST /order-confirmations?precedingSalesVoucherId={id}. In introduction, lineItems[].description, and remark, use only Lexware formatting: bold, italic, and dash-prefixed list items separated by newlines.
Inputs: body (required), precedingSalesVoucherId (required).
lexware_update_articleUpdate ArticleAIdempotent
Update an article with the current version field for optimistic locking. Only description supports Lexware formatting (bold, italic, and dash-prefixed list items separated by newlines); article title does not support formatting.
Inputs: id (required), body (required).
lexware_update_contactUpdate ContactAIdempotent
Update an existing contact. The body must include the version field for optimistic locking.
Inputs: id (required), body (required).
lexware_update_voucherUpdate VoucherAIdempotent
Update a bookkeeping voucher with the current version for optimistic locking. If the existing voucher is unchecked, the update must transition voucherStatus to open.
Inputs: id (required), body (required).
lexware_upload_fileUpload FileA
Upload a file to Lexware. Provide either filePath (absolute path on the MCP server host) or contentBase64 (base64-encoded content) — not both. When using filePath, fileName is optional (derived from the file name) and contentType is auto-detected for common image extensions. When using contentBase64, fileName is required.
Inputs: fileName, filePath, contentType, contentBase64.
lexware_upload_voucher_fileUpload Voucher FileA
Upload a file attachment to a bookkeeping voucher. Provide either filePath (absolute path on the MCP server host) or contentBase64 (base64-encoded content) — not both. When using filePath, fileName is optional (derived from the file name) and contentType is auto-detected for common image extensions. When using contentBase64, fileName is required.
Inputs: id (required), fileName, filePath, contentType, +1 more.
lexware_verify_webhook_signatureVerify Webhook SignatureARead-onlyIdempotent
Verify a Lexware webhook X-Lxo-Signature (RSA-SHA512, base64) against the raw request body. Pass the EXACT raw HTTP body bytes you received — do not JSON.parse/stringify round-trip, as Lexware signs the compact JSON as transmitted (whitespace and key order matter). On first call the public key is fetched once from developers.lexware.io and cached for the process lifetime; set LEXWARE_WEBHOOK_PUBLIC_KEY (PEM) to override (recommended for production where you cannot tolerate one-time TLS-substitution risk on the public-key fetch).
Inputs: payload (required), signature (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 66 tools
Most tools target distinct resources, but several pairs overlap: create_invoice vs pursue_invoice (create-from-preceding-voucher), the generic download_file/upload_file vs per-type download_invoice_file/download_credit_note_file/upload_voucher_file, and the similarly-named list_vouchers (lookup) vs list_voucherlist (collection). Descriptions do a good job disambiguating them, but the boundaries are not obvious from names alone.
Nearly everything follows a predictable lexware_verb_noun snake_case pattern (create_/get_/list_/update_/download_/deeplink_). Minor deviations: the odd verb 'pursue' for create-from-preceding, and the inconsistent list_vouchers vs list_voucherlist naming.
66 tools is very heavy and well past the point where an agent can easily scan the surface. The broad ERP domain (articles, contacts, vouchers, sales documents, files, webhooks) justifies many tools, but the count is inflated by per-type download/deeplink/pursue variants that could be consolidated.
Core workflows are covered: articles and contacts have CRUD, vouchers have create/get/update/list plus file upload and payments, webhooks have full lifecycle including signature verification. Gaps remain (no delete for contacts or most sales documents, no update for invoices/quotations), though many reflect Lexware API limits.
Maintenance
Related MCP Connectors
MCP server for ABRA Flexi — accounting, contacts, stock and draft-checked invoice creation.
MCP server for MOCO business software: time tracking, projects, budgets, and invoicing via API
MCP server for Flex on the Job: inventory, jobs, customers, invoices, purchasing, sales orders.
Hosted MCP server for OTTO Market, Kaufland and Mirakl sellers: orders, stock, listings and ads.
Related MCP Servers
- FlicenseBqualityDmaintenanceMCP server for DACH accounting automation. Connect AI assistants to sevDesk and Lexoffice — create invoices, manage contacts, handle bookings and vouchers for German-speaking businesses.1559 npm-
- AlicenseAqualityDmaintenanceEnables MCP-capable assistants to query and manage Lexware Office contacts, sales documents, vouchers, files, payments, webhooks, and reference data via the Lexware Office public API. Adds bank reconciliation tools for matching bank statement CSVs against Lexware vouchers or scanned receipt PDFs.4MIT
- AlicenseAqualityDmaintenanceMCP server for Lexware Office that enables querying and managing contacts, sales documents, vouchers, files, payments, and webhooks through a sandboxed two-tool interface (search/execute) with read-only-by-default write safety.2MIT
- AlicenseAqualityDmaintenanceMCP server providing access to the easybill REST API for managing invoices, customers, articles, payments, projects, and time tracking, with read-only mode by default.2827 npmMIT