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/mcpTools v0.1 (16)
Read (9, Paritaet zum Legacy-TS-MCP)
| Tool | Zweck |
|---|---|
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)
| Tool | Zweck |
|---|---|
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 mussget_contactaufgerufen werden um aktuelle Version zu holen.update_contactmacht 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=truebeim 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_vouchersueber mehrere Seiten noch nicht im Tool gebuendelt (manuellpageincrementieren) - Retry-Layer fuer 429/5xx in v0.2
Related
- mcp-lexware — Repo-Doku
- mcp-lexware-office — alter TypeScript-Clone, deprecated
- _index — erster Kunde
- plan — Implementierungs-Plan Unit 1.4
- mcp-best-practices — Pattern + Audit-Checkliste
- zettle — Schwester-MCP, gleicher Stack