All servers · Buy Pro $19 · Source · Claude Desktop bundle (.mcpb)

mcp-billing-docs

Credit notes and purchase orders, on the same engine as your invoices.

When a client sends work back, or you billed them twice, you owe them a credit note: a document that names the invoice it reverses and takes the money off it, with the VAT unwound at the rate you charged. When you order from a supplier, you owe them a purchase order: what you want, at what price, by when, with your own details on it. This server writes both, against the invoices and the clients the mcp-invoice server already holds, and it will not let a credit note give back more money than the invoice charged. Everything stays on your machine.

Built on @theluckystrike/mcp-invoice/lib: the money, VAT, currency and formatting code is the invoice server's, not a second copy of it, so a credit note and the invoice it reverses agree to the minor unit.

billing-docs demo

Install

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "billing-docs": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-billing-docs"]
    }
  }
}

Claude Code:

claude mcp add billing-docs -- npx -y @theluckystrike/mcp-billing-docs

Cursor (.cursor/mcp.json):

{
  "mcpServers": {
    "billing-docs": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-billing-docs"]
    }
  }
}

Run mcp-invoice alongside it: this server reads that server's invoices and clients, and both take their name, address, VAT id and default currency from one shared business profile.

Tools

tool what it does
credit_note_create Credit an invoice: the whole thing, a gross amount, or named lines with quantities
credit_note_list Every credit note, with the credited total per currency. Filter by invoice, client or date
credit_note_get One credit note in full
credit_note_pdf The A4 PDF, titled CREDIT NOTE and carrying the invoice number it reverses (Pro)
credit_note_text The plain-text version to paste into an email
purchase_order_create Raise an order: line items, VAT, currency, expected delivery date
purchase_order_list Every order with its status: open, partially received, received
purchase_order_get One order in full, with its receipts
purchase_order_pdf The A4 PDF, titled PURCHASE ORDER (Pro)
purchase_order_text The plain-text version to send the supplier
purchase_order_receive Mark an order received, in full or in part
billing_docs_report Credited per currency, on order per currency, deliveries past their date (Pro)
license_status, license_activate Free or Pro, and how to upgrade

One resource, billing-docs://open-orders, and one prompt, chase_deliveries.

Free vs Pro

Free Pro
Documents per calendar month 5, credit notes and purchase orders together Unlimited
credit_note_text, purchase_order_text Yes, unlimited Yes
Full, partial and per-line credit notes, VAT, multi-currency, receiving orders Yes Yes
credit_note_pdf, purchase_order_pdf No Yes, plus your logo and no footer credit
billing_docs_report No Yes

Get Pro: https://mcp.zovo.one/buy/billing-docs ($19 one-time for this server, $39 for the bundle). Or the nineteen-server bundle for $39.

A measured thing

Crediting part of a mixed-VAT invoice at one rate is wrong by more than the rounding you would expect. An invoice of EUR 1,000.00 consulting at 23% plus EUR 500.00 print at 8% totals EUR 1,770.00. Credit ten percent of it, EUR 177.00, the way a single-rate credit note would: net EUR 143.90, VAT EUR 33.10. This server splits the credit across the rates the invoice actually used, in proportion to each rate's share of the total, and gets net EUR 150.00 with VAT of EUR 23.00 at 23% and EUR 4.00 at 8%, EUR 27.00 in all. The gross the client sees is identical either way. The VAT line differs by EUR 6.10, 22.6 percent of it, and that is the number that goes on a VAT return.

Asserted in test/unit.test.mjs, "a credit note by amount splits the gross across the invoice's VAT rates and reuses each rate".

Privacy

All data stays local: ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/billing-docs/. No account, no API key, no network call, ever. Licence keys are verified offline.

Built by theluckystrike. Support: support@zovo.one

First five minutes

Three prompts that scored 3 of 3, measured in round 19, 2026-09-05. Paste one in as it is written.

Acme cancelled the whole of invoice INV-2026-0002 after we had already billed it. Please credit that invoice in full.

What it did, measured in round 19, 2026-09-05: One credit_note_create {invoice: INV-2026-0002, reason: Order cancelled by customer} produced CN-2026-0001 for EUR -492.00 on the first turn, with the single line negated to EUR -400.00 and the VAT line reprinted as 23% on EUR -400.00 = EUR -92.00.

Different invoice: we are refunding Acme EUR 177.00 of INV-2026-0001 as a goodwill gesture. Raise a credit note for that amount.

What it did, measured in round 19, 2026-09-05: A EUR 177.00 gross credit against a mixed-VAT invoice split across BOTH rates the invoice used, in exact proportion, on one credit_note_create {amount_minor: 17700} call: CN-2026-0002 carries a EUR -50.00 line at 8 percent and a EUR -100.00 line at 23 percent, VAT lines 8% on EUR -50.00 = EUR -4.00 and 23% on EUR -100.00 = EUR -23.00, so the 8 percent bucket gives back EUR 54.00 and the 23 percent bucket EUR 123.00 and the two sum to exactly EUR -177.00 with no rounding drift.

Raise a purchase order to Paperworks Sp. z o.o. for 500 brochures at EUR 1.20 each and 200 posters at EUR 3.50 each, 23% VAT, expected here on 2026-09-20.

What it did, measured in round 19, 2026-09-05: One purchase_order_create call turned the sentence into PO-2026-0001 with both lines priced in minor units and no clarification asked: 500 brochures at EUR 1.20 = EUR 600.00, 200 posters at EUR 3.50 = EUR 700.00, subtotal EUR 1,300.00, 23% on EUR 1300.00 = EUR 299.00, total EUR 1,599.00, expected delivery 2026-09-20, status open.

On the free tier for this path: 5 documents per calendar month, credit notes and purchase orders together, counted by issue date, with full, partial and per-line credit notes, VAT, multiple currencies and receiving orders all included, and both text exports never metered.

Set it up in your client

Exact config path, entry and caveats: Claude Desktop · Claude Code · Cursor · VS Code · Windsurf · Cline · Claude.ai and Claude Desktop connectors · all clients

Guides

How to track billable hours inside Claude Code and Cursor · Create an invoice PDF from a chat message with an MCP server · Ask questions about an Excel or CSV file from Cursor or Claude · Watch a product price with Claude and get told when it drops · What the free tier includes and what Pro adds · Log expenses and mileage in Claude, split VAT, rebill to an invoice · Convert currencies in Claude with real ECB rates, no API key · Generate Word proposals and contracts from a chat message · Find a meeting time across time zones without doing the arithmetic · Write a resume and a cover letter from chat, without inventing anything · Bill a retainer on a schedule without a billing SaaS · Assemble a contract from your own clause library, in chat · Connect MCP servers to Claude.ai, Claude Desktop, Cursor and VS Code without installing anything · Merge, split and stamp PDFs from chat, and why some come back as glyph numbers · Read a .ics calendar in Claude: free and busy, conflicts, and billable meetings · Run a kanban board in Claude, with time tracking on the same task · Resize, compress and watermark images from a chat message · Categorize and reconcile a bank CSV export from chat · Send a quote from chat, then turn the yes into an invoice · Put a SEPA payment QR code on an invoice from chat · Zip and unzip archives safely from Claude or Cursor · Credit notes and purchase orders from chat, against your real invoices · One install, every server: the office-suite bundle · All guides