MCP server for the sevDesk accounting API — full endpoint coverage plus bookkeeping audit tools (VAT/§13b reverse-charge checks, duplicate detection, folder↔sevDesk diff, subscription gap detection).
Strong tool definitions with consistent naming (verb_noun pattern), comprehensive descriptions (avg 150-200 chars), and complete input schemas. All 22 tools have explicit ToolDef registrations with name, description, inputSchema, and handler. Parameters are well-typed (string, integer, boolean, array, object) with descriptions. Key strengths: dryRun pattern on all write tools, clear mutating flag, security-conscious path validation (assertAllowedPath). Gaps: output schemas not documented in code (LLMs cannot predict response structure); no enum constraints on status/kind parameters (e.g., sevdesk_list_invoices status accepts free-form string instead of enum ['draft','open','paid','partially_paid','disabled']); error handling is basic (no recovery guidance or categorization); some parameter descriptions lack format/range hints (e.g., 'limit' has no min/max bounds).
Detect duplicate invoices by matching contact, amount, and date within a configurable window
Compare receipt files in a local folder against invoices in sevDesk: find missing uploads, orphaned files, and mismatches
Detect gaps in subscription invoices: missing months, overlapping periods, or invoices outside the subscription date range
Audit invoices for §13b/§18b reverse-charge compliance: checks that positions use rule 5 or 21, have 0% tax rate, and match the declared regime
Book (finalize) an invoice draft, making it official and preventing further edits; supports dryRun for preview
Book (finalize) a voucher draft, making it official and preventing further edits; supports dryRun for preview
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). Tools like sevdesk_list_invoices and sevdesk_list_operations return results but no schema is visible in code.
Enum constraints missing on status/kind parameters. sevdesk_list_invoices accepts 'status' as free-form string instead of enum ['draft','open','paid','partially_paid','disabled']. sevdesk_list_operations 'kind' should be enum ['read','write','all'].
Numeric parameters lack bounds. 'limit' and 'dayWindow' have no min/max constraints. LLMs may pass absurd values (limit=999999, dayWindow=36500) causing API strain or timeouts.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Call any sevDesk API operation by operationId with parameters and optional request body; supports dryRun for preview
Create a new invoice draft with contact, positions, and optional metadata; supports dryRun for preview
Create a new voucher (expense receipt) draft with supplier, positions, and optional metadata; supports dryRun for preview
Get detailed information about a specific sevDesk API operation including parameters, request body schema, and usage example
Retrieve detailed information about a specific contact including address, tax ID, and payment terms
Retrieve detailed information about a specific invoice including positions, tax treatment, and attachments
Retrieve detailed information about a specific voucher including positions, tax treatment, and attachments
List contacts (customers and suppliers) with optional filtering by type, name, or search query
List invoices with optional filtering by status, contact, date range, or search query
Search and list available sevDesk API operations by tag, query, or kind (read/write)
List vouchers with optional filtering by status, supplier, date range, or search query
Verifies the API token and reports the account's bookkeeping generation and detected VAT regime (regular vs §19 Kleinunternehmer) with evidence
Send an invoice to the customer via email with optional custom message and attachment settings
Update an invoice draft with new contact, positions, dates, or metadata; supports dryRun for preview
Update a voucher draft with new supplier, positions, dates, or metadata; supports dryRun for preview
Upload a receipt file (PDF, image, or document) and attach it to an invoice or voucher
Error handling lacks recovery guidance. Tools throw generic errors (e.g., 'Refused: filesystem access is disabled') but do not guide LLM on next steps (e.g., 'Set SEVDESK_RECEIPT_DIRS environment variable to enable').
Pagination not explicit. sevdesk_list_* tools accept 'limit' but no offset/cursor or total_count in response. Large result sets may be truncated silently, and LLMs cannot iterate through pages.