MCP server for Invoice Ninja - create invoices, manage clients, payments, quotes, and expenses
18 tools with consistent verb-noun naming (create-, get-, list-, update-, delete-, send-, bulk-). All tools have descriptions (avg 120 chars, within baseline 34-392). Schemas present and typed with Zod. However, descriptions are generic and lack LLM-optimized guidance on WHEN to use each tool vs alternatives. Parameter descriptions are minimal (avg 40 chars vs baseline 72). No output schemas documented. Error handling returns text but lacks recovery guidance or error classification. Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint). No confirmation pattern for irreversible ops (delete-client, delete-invoice). Composition is sound, tools chain well (list-clients → create-invoice), but descriptions don't hint at dependencies.
Perform a bulk action on one or more invoices. Actions: mark_sent (mark as sent without emailing), mark_paid, archive, restore, delete, cancel, clone_to_quote.
Create a new client in Invoice Ninja. At minimum provide a name. Contacts with email addresses are needed to send invoices.
Create a new expense record in Invoice Ninja. Optionally link to a client, vendor, or invoice for billable expense tracking.
Create a new draft invoice in Invoice Ninja. Requires a client_id (use list-clients to find it) and at least one line item with cost and quantity.
Record a payment against one or more invoices in Invoice Ninja. The payment amount can be the full invoice balance or a partial amount.
Delete a client from Invoice Ninja. This soft-deletes the client.
No output schemas documented. LLMs cannot infer what fields to expect from tool responses, forcing them to parse unstructured text and plan downstream calls blindly.
Descriptions lack LLM-optimized guidance. Generic descriptions like 'Get a single client by ID' do not explain WHEN to use get-client vs list-clients with search, or what prerequisites exist (e.g., 'You need a client ID from list-clients first').
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Irreversible operations like delete-client and delete-invoice lack explicit destructive markers. Agents cannot distinguish safe retries from dangerous ones.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Delete an invoice from Invoice Ninja. This soft-deletes the invoice (it can be restored from the Invoice Ninja UI).
Get a single client by ID from Invoice Ninja. Returns full client details including contacts, addresses, and settings.
Get a single expense by ID from Invoice Ninja. Returns full details including linked client, vendor, invoice, and notes.
Get a single invoice by ID from Invoice Ninja. Returns full invoice details including line items, payments, and client information.
Get a single payment by ID from Invoice Ninja.
List clients in Invoice Ninja. Use the search parameter to find a client by name or email. Clients are needed to create invoices -- use the returned client ID.
List expenses in Invoice Ninja. Supports filtering by client and vendor.
List invoices in Invoice Ninja. Supports filtering by status, client, and search term. Returns paginated results.
List payments in Invoice Ninja. Shows payment records including which invoices they are applied to.
Email an invoice to the client. This sends the invoice via Invoice Ninja's email system and marks the invoice as sent.
Update an existing client in Invoice Ninja. Only provide the fields you want to change.
Update an existing invoice in Invoice Ninja. Only provide fields you want to change. To update line items, provide the complete line_items array (it replaces, not merges).
Error responses return plain text without recovery guidance or error classification. 'Error creating client: ...' tells the LLM nothing about whether to retry, ask the user, or give up.
No confirmation or dry-run pattern for destructive operations. delete-client and delete-invoice execute immediately without a confirmation step, risking accidental data loss when agents make mistakes.