Lexware Office MCP

Lokaler MCP-Server fuer Lexware Office (vormals lexoffice). Read + Write CRUD ueber die Public API. Standard-Stack-Layer fuer alle KMU-Kunden mit Lexware-Buchhaltung.

Erster konkreter Use-Case: Weingalerie Woehrle (siehe _index) — Voit erstellt Rechnungen, bucht Zettle-Tagesabschluesse, exportiert DATEV.

Status

active — v0.1 Skeleton fertig 2026-05-18, Token aus 1Password (lexoffice-api/Personal/Feld api-token) seit 2026-05-20 14:01 Uhr live. Smoke-Test 16:03 gegen GET /v1/profile = HTTP 200, AV-Mandant erkannt (organizationId b4c3c9b7-cef2-4348-9591-79bc36ccfe22, taxType net, businessFeatures INVOICING+BOOKKEEPING+INVOICING_PRO). In Claude Code registriert (claude mcp list✓ Connected).

Vorgaenger: JannikWempe/mcp-lexware-office (TypeScript-Clone, 8 Read-Tools) — deprecated seit 2026-05-18. Code-Path ~/source/mcps/mcp-lexware-office/ bleibt fuer Referenz, wird nicht weiter gepflegt.

Setup

Komplette Anleitung im Repo-README: ~/source/mcps/mcp-lexware/README.md.

Kurz:

cd ~/source/mcps/mcp-lexware
uv tool install --force --editable .
cp .env.local.example .env.local
# LEXWARE_API_KEY von app.lexware.de -> Persoenliche Einstellungen -> Oeffentliche API
uv run python -m mcp_lexware.server
claude mcp add lexware --transport http http://127.0.0.1:8774/mcp

Tools v0.1 (16)

Read (9, Paritaet zum Legacy-TS-MCP)

ToolZweck
list_invoices(page, size, status?)Rechnungs-Liste, paginiert
get_invoice(invoice_id)Detail einer Rechnung
list_contacts(page, size, customer_number?, name?)Kontakt-Liste mit Filter
get_contact(contact_id)Detail eines Kontakts
list_vouchers(page, size, voucher_type?, voucher_status?)Beleg-Liste
get_voucher(voucher_id)Detail eines Belegs
list_posting_categories()Buchungskategorien (statisch)
list_countries()Laender + Tax-Klassifikationen
get_file(file_id)Metadaten zu hochgeladenem File

Write (7, neu)

ToolZweck
create_contact(name, ...)Neuen Kontakt anlegen
update_contact(contact_id, version, patch)Kontakt aendern (Optimistic-Lock)
create_invoice_draft(contact_id, line_items, ...)Rechnungs-Entwurf
finalize_invoice(invoice_id)Draft → final mit Rechnungsnummer
create_voucher(voucher_type, ...)Beleg buchen (Zettle-Tagesabschluss)
attach_voucher_file(voucher_id, file_path)PDF/Bild an Voucher anhaengen
export_datev_csv(date_from, date_to)DATEV-Export fuer Steuerberater

Tools v0.2 (geplant)

  • Webhook-Listener fuer eingehende Belege (analog mcp-whatsapp /webhook-Pattern)
  • OCR-Auto-Buchung (Beleg-Foto → Voucher-Anlage mit Kategorie-Vorschlag)
  • Sales-Statistik-Tools (Umsatz pro Kategorie/Kunde)

Trigger fuer v0.2: nach Woehrle-Live-Gang oder zweitem KMU-Kunden.

Auth-Modell

Lexware hat keinen OAuth2-Flow fuer Public-API — einfacher Bearer-API-Key:

  • API-Key generieren unter app.lexware.de → Persoenliche Einstellungen → Oeffentliche API
  • Header: Authorization: Bearer <key>
  • Key per Tenant (eine Lexware-Org = ein Key) — keine Scopes

Bei Woehrle-Go-Live legt Alex einen separaten Lexware-Account fuer Woehrle an, generiert API-Key dort, der MCP wird mit dem Woehrle-Key konfiguriert.

Quirks (Stand 2026-05)

  • Idempotency-Key-Header empfohlen bei POST/PUT — verhindert Duplikate bei Retry. Wird vom MCP automatisch als UUID4 gesetzt.
  • Optimistic-Lock bei Updates via version-Feld — vor Update muss get_contact aufgerufen werden um aktuelle Version zu holen. update_contact macht das intern.
  • Voucher- vs Invoice-Endpoints: /v1/voucherlist (kombinierte Liste) vs /v1/vouchers/{id} (Detail) vs /v1/invoices (nur Rechnungen, eigener Detail-Endpoint). Im MCP korrekt aufgeteilt.
  • Finalize via Query-Param ?finalize=true beim PUT — kein separater Endpoint.
  • DATEV-Export asynchron — Response enthaelt entweder eine Download-URL oder den CSV-Inhalt direkt (haengt vom Volumen ab).

Bekannte offene Punkte

  • Live-Test gegen echten Lexware-Account ausstehend — Endpoint-Pfade in v0.1 basieren auf developer.lexware.io-Doku, nicht auf Round-Trip
  • Pagination bei list_invoices & list_vouchers ueber mehrere Seiten noch nicht im Tool gebuendelt (manuell page incrementieren)
  • Retry-Layer fuer 429/5xx in v0.2