# lexware [Health: Active]

**Category:** 💰 Finance & Fintech  
**Repository:** https://github.com/lazyants/lexware-mcp-server  
**GitHub Stars:** 8  
**npm Downloads (last month):** 2176  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/lexware

## Description
MCP server for the Lexware Office API — invoices, contacts, articles, and vouchers.

## Tools
Capabilities this server exposes over MCP:

- **lexware_create_invoice** — 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.
- **lexware_get_invoice** — Retrieve an invoice by ID from Lexware.
- **lexware_download_invoice_file** — 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).
- **lexware_pursue_invoice** — 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.
- **lexware_deeplink_invoice** — Get a direct link to view/edit an invoice in the Lexware web app.
- **lexware_create_credit_note** — 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.
- **lexware_get_credit_note** — Retrieve a credit note by ID from Lexware.
- **lexware_download_credit_note_file** — 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).
- **lexware_pursue_credit_note** — 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.
- **lexware_deeplink_credit_note** — Get a direct link to view/edit a credit note in the Lexware web app.
- **lexware_create_quotation** — 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.
- **lexware_get_quotation** — Retrieve a quotation by ID from Lexware.
- **lexware_download_quotation_file** — Download the PDF file for a quotation.
- **lexware_deeplink_quotation** — Get a direct link to view/edit a quotation in the Lexware web app.
- **lexware_create_order_confirmation** — 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.
- **lexware_get_order_confirmation** — Retrieve an order confirmation by ID from Lexware.
- **lexware_download_order_confirmation_file** — Download the PDF file for an order confirmation.
- **lexware_pursue_order_confirmation** — 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.
- **lexware_deeplink_order_confirmation** — Get a direct link to view/edit an order confirmation in the Lexware web app.
- **lexware_create_delivery_note** — 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.
- **lexware_get_delivery_note** — Retrieve a delivery note by ID from Lexware.
- **lexware_download_delivery_note_file** — Download the PDF file for a delivery note.
- **lexware_pursue_delivery_note** — 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.
- **lexware_deeplink_delivery_note** — Get a direct link to view/edit a delivery note in the Lexware web app.
- **lexware_get_down_payment_invoice** — Retrieve a down payment invoice by ID from Lexware.
- **lexware_download_down_payment_invoice_file** — 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).
- **lexware_deeplink_down_payment_invoice** — Get a direct link to view/edit a down payment invoice in the Lexware web app.
- **lexware_pursue_dunning** — 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.
- **lexware_get_dunning** — Retrieve a dunning by ID from Lexware.
- **lexware_download_dunning_file** — Download the PDF file for a dunning.
- **lexware_deeplink_dunning** — Get a direct link to view/edit a dunning in the Lexware web app.
- **lexware_list_articles** — List all articles with optional pagination.
- **lexware_get_article** — Get a single article by ID.
- **lexware_create_article** — 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.
- **lexware_update_article** — 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.
- **lexware_delete_article** — Delete an article by ID.
- **lexware_list_contacts** — List all contacts with optional pagination and filters.
- **lexware_get_contact** — Get a single contact by ID.
- **lexware_create_contact** — Create a new contact.
- **lexware_update_contact** — Update an existing contact. The body must include the version field for optimistic locking.
- **lexware_deeplink_contact** — Get a direct URL to view a contact in the Lexware web app. Returns deeplink and its permanent alias url with the same value.
- **lexware_list_countries** — List all available countries with their tax classifications.
- **lexware_list_payment_conditions** — List all available payment conditions.
- **lexware_list_posting_categories** — List all available posting categories for bookkeeping.
- **lexware_get_profile** — Get the organization profile information.
- **lexware_list_print_layouts** — List available print layout templates.
- **lexware_create_voucher** — Create a new bookkeeping voucher in Lexware.
- **lexware_get_voucher** — 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.
- **lexware_update_voucher** — Update a bookkeeping voucher with the current version for optimistic locking. If the existing voucher is unchecked, the update must transition voucherStatus to open.
- **lexware_list_vouchers** — 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.
- **lexware_upload_voucher_file** — 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.
- **lexware_deeplink_voucher** — Get a direct link to view/edit a bookkeeping voucher in the Lexware web app.
- **lexware_list_voucherlist** — Search and filter across all voucher types in Lexware. This is the main way to find invoices, credit notes, quotations, and other voucher types.
- **lexware_get_payments** — Get payment details for a specific voucher.
- **lexware_create_event_subscription** — 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.
- **lexware_list_event_subscriptions** — List all webhook event subscriptions in Lexware.
- **lexware_get_event_subscription** — Retrieve a webhook event subscription by ID from Lexware.
- **lexware_delete_event_subscription** — Delete a webhook event subscription from Lexware.
- **lexware_verify_webhook_signature** — 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).
- **lexware_upload_file** — 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.
- **lexware_download_file** — Download a file from Lexware as base64-encoded content. Choose pdf (default) or xml for an available e-invoice XML original.
- **lexware_get_file_status** — 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.
- **lexware_deeplink_file** — Get a direct link to the bookkeeping inbox of newly-uploaded files in the Lexware web app.
- **lexware_list_recurring_templates** — List recurring invoice templates from Lexware.
- **lexware_get_recurring_template** — Retrieve a recurring invoice template by ID from Lexware.
- **lexware_deeplink_recurring_template** — Get a direct link to view/edit a recurring invoice template in the Lexware web app.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "lexware": {
    "command": "npx",
    "args": ["-y","@lazyants/lexware-mcp-server"],
    "env": {
      "LEXWARE_API_TOKEN": ""
    }
  }
}
```

**Requires environment variables:** `LEXWARE_API_TOKEN` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What lexware does

lexware exposes selected Lexware Office API operations through the Model Context Protocol. The listed tools focus on sales and receivables documents: credit notes, quotations, order confirmations, delivery notes, down-payment invoices, and dunnings. Depending on the document type, an agent can create or retrieve records, download generated files, pursue a document, or open a Lexware deep link.

Contact management is also included. Agents can list contacts, retrieve an individual contact, create a new contact, and update an existing one. The package also provides separate entry points for broader functional areas, including sales, contacts, bookkeeping, reference data, and system operations; the split commands are intended for installations that need a smaller tool set or a reduced MCP context.

## How it works

The server communicates with an MCP client over its command-line entry point. A full installation uses the `lexware-mcp-server` package command, while focused deployments can invoke commands such as `lexware-mcp-sales` or `lexware-mcp-contacts` through npx. Each entry point exposes the corresponding Lexware operations to the client.

Authentication uses a Lexware Office API token. The server checks the operating system keyring first, using the `lexware-mcp` service and `api-token` account, then falls back to the `LEXWARE_API_TOKEN` environment variable. Requests that receive HTTP 429 responses are retried with exponential backoff. Each entry point also exposes a read-only MCP resource at `reference://lexware/api` containing API conventions and related usage guidance.

## Setup and configuration

Node.js 20 or newer is required, along with an API token created in the Lexware Office API settings. The standard MCP configuration launches the package with `npx`:

```json
{
  "mcpServers": {
    "lexware": {
      "command": "npx",
      "args": ["-y", "@lazyants/lexware-mcp-server"]
    }
  }
}
```

On macOS, the token can be stored with the `security` command. Linux setups can use `secret-tool` with a Secret Service implementation such as `libsecret`. Windows, headless environments, and environment-variable configuration use the package's configuration options. Claude Code can register the server with `claude mcp add`, while Claude Desktop can load it through its MCP configuration file.

To reduce the number of exposed tools, run a split command with npx, for example:

```bash
npx -y -p @lazyants/lexware-mcp-server lexware-mcp-sales
```

## Tools and capabilities

The exposed document operations include:

- Creating and retrieving credit notes.
- Downloading credit-note files, pursuing credit notes, and opening credit-note deep links.
- Creating and retrieving quotations, with quotation file downloads and deep links.
- Creating and retrieving order confirmations, downloading their files, pursuing them, and opening deep links.
- Creating and retrieving delivery notes, downloading files, pursuing delivery notes, and opening deep links.
- Retrieving and downloading down-payment invoices and opening their deep links.
- Retrieving and downloading dunnings, pursuing them, and opening deep links.
- Listing, reading, creating, and updating contacts.

The package uses names in the form `lexware_<action>_<resource>`, so tool intent is visible in the MCP client inventory and schemas.

## Limitations and notes

This is an unofficial community project and is not affiliated with Lexware GmbH or Haufe Group. Write operations affect live business data in the connected Lexware account; use read-only access when appropriate and test changes against a sandbox or non-critical account before production use. Keep API tokens in the OS keyring where possible and never commit them to source control. The package is licensed under FSL-1.1-MIT.

_Full upstream README: https://allmcps.com/mcp/lexware/readme_

