Skip to main content
Glama
lexware-mcp-server

lexware-mcp-server

by lazyants

lexware-mcp-server

Listed on AgentHub: lexware Tests

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

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" -w

Linux (needs a Secret Service / libsecret):

secret-tool store --label="Lexware Office API" service lexware-mcp username api-token

For 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-server

npx 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

lexware-mcp-server

Everything below

lexware-mcp-sales

Invoices, Credit Notes, Quotations, Order Confirmations, Delivery Notes, Down Payment Invoices, Dunnings, Voucherlist

lexware-mcp-contacts

Contacts, Articles

lexware-mcp-bookkeeping

Vouchers, Voucherlist, Payments

lexware-mcp-reference

Countries, Payment Conditions, Posting Categories, Profile, Print Layouts

lexware-mcp-system

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=true to 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 readOnlyHint are 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.

  • Changelog

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 tools
lexware_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_delete_articleDelete ArticleB
DestructiveIdempotent

Delete an article by ID.

Inputs: id (required).

lexware_delete_event_subscriptionDelete Event SubscriptionB
Destructive

Delete a webhook event subscription from Lexware.

Inputs: id (required).

lexware_download_credit_note_fileDownload Credit Note FileA
Read-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 FileA
Read-onlyIdempotent

Download the PDF file for a delivery note.

Inputs: id (required).

lexware_download_down_payment_invoice_fileDownload Down Payment Invoice FileA
Read-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 FileA
Read-onlyIdempotent

Download the PDF file for a dunning.

Inputs: id (required).

lexware_download_fileDownload FileB
Read-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 FileA
Read-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 FileA
Read-onlyIdempotent

Download the PDF file for an order confirmation.

Inputs: id (required).

lexware_download_quotation_fileDownload Quotation FileA
Read-onlyIdempotent

Download the PDF file for a quotation.

Inputs: id (required).

lexware_get_articleGet ArticleA
Read-onlyIdempotent

Get a single article by ID.

Inputs: id (required).

lexware_get_contactGet ContactA
Read-onlyIdempotent

Get a single contact by ID.

Inputs: id (required).

lexware_get_credit_noteGet Credit NoteA
Read-onlyIdempotent

Retrieve a credit note by ID from Lexware.

Inputs: id (required).

lexware_get_delivery_noteGet Delivery NoteA
Read-onlyIdempotent

Retrieve a delivery note by ID from Lexware.

Inputs: id (required).

lexware_get_down_payment_invoiceGet Down Payment InvoiceB
Read-onlyIdempotent

Retrieve a down payment invoice by ID from Lexware.

Inputs: id (required).

lexware_get_dunningGet DunningA
Read-onlyIdempotent

Retrieve a dunning by ID from Lexware.

Inputs: id (required).

lexware_get_event_subscriptionGet Event SubscriptionA
Read-onlyIdempotent

Retrieve a webhook event subscription by ID from Lexware.

Inputs: id (required).

lexware_get_file_statusGet File StatusA
Read-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 InvoiceA
Read-onlyIdempotent

Retrieve an invoice by ID from Lexware.

Inputs: id (required).

lexware_get_order_confirmationGet Order ConfirmationA
Read-onlyIdempotent

Retrieve an order confirmation by ID from Lexware.

Inputs: id (required).

lexware_get_paymentsGet PaymentsA
Read-onlyIdempotent

Get payment details for a specific voucher.

Inputs: id (required).

lexware_get_profileGet ProfileA
Read-onlyIdempotent

Get the organization profile information.

Inputs: no named parameters.

lexware_get_quotationGet QuotationB
Read-onlyIdempotent

Retrieve a quotation by ID from Lexware.

Inputs: id (required).

lexware_get_recurring_templateGet Recurring TemplateA
Read-onlyIdempotent

Retrieve a recurring invoice template by ID from Lexware.

Inputs: id (required).

lexware_get_voucherGet VoucherA
Read-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 ArticlesA
Read-onlyIdempotent

List all articles with optional pagination.

Inputs: gtin, page, size, type, +1 more.

lexware_list_contactsList ContactsA
Read-onlyIdempotent

List all contacts with optional pagination and filters.

Inputs: name, page, size, email, +3 more.

lexware_list_countriesList CountriesA
Read-onlyIdempotent

List all available countries with their tax classifications.

Inputs: no named parameters.

lexware_list_event_subscriptionsList Event SubscriptionsA
Read-onlyIdempotent

List all webhook event subscriptions in Lexware.

Inputs: no named parameters.

lexware_list_payment_conditionsList Payment ConditionsA
Read-onlyIdempotent

List all available payment conditions.

Inputs: no named parameters.

lexware_list_posting_categoriesList Posting CategoriesA
Read-onlyIdempotent

List all available posting categories for bookkeeping.

Inputs: no named parameters.

lexware_list_print_layoutsList Print LayoutsA
Read-onlyIdempotent

List available print layout templates.

Inputs: no named parameters.

lexware_list_recurring_templatesList Recurring TemplatesB
Read-onlyIdempotent

List recurring invoice templates from Lexware.

Inputs: page, size.

lexware_list_voucherlistList VoucherlistB
Read-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 NumberA
Read-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 NoteA
Destructive

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 ArticleA
Idempotent

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 ContactA
Idempotent

Update an existing contact. The body must include the version field for optimistic locking.

Inputs: id (required), body (required).

lexware_update_voucherUpdate VoucherA
Idempotent

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 SignatureA
Read-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

    B3.4/5.0

    Scored across 66 tools

    Disambiguation3/5

    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.

    Naming Consistency4/5

    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.

    Tool Count2/5

    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.

    Completeness4/5

    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

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      B
      quality
      D
      maintenance
      MCP server for DACH accounting automation. Connect AI assistants to sevDesk and Lexoffice — create invoices, manage contacts, handle bookings and vouchers for German-speaking businesses.
      15
      59 npm
      -
    • A
      license
      A
      quality
      D
      maintenance
      Enables 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.
      4
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      MCP 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.
      2
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      MCP server providing access to the easybill REST API for managing invoices, customers, articles, payments, projects, and time tracking, with read-only mode by default.
      28
      27 npm
      MIT