Home · Setup · VS Code

MCP Billing Docs in VS Code

Credit notes and purchase orders written against the invoices the invoice server already holds, with the VAT unwound at the rate you charged. It credits an invoice in full, by a gross amount or by named lines and quantities, storing every money field negative in minor units so a period's documents sum to the net of what was billed, and it refuses to give back more than the invoice's remaining creditable amount. It also raises purchase orders to suppliers with line items, VAT, currency and an expected delivery date, receives them in full or in part, and reports credited and on-order totals per currency alongside deliveries past their date.

In agent mode the agent can raise the order and later receive it in part, and billing_docs_report is the read that tells it which deliveries are past their date, so chasing suppliers becomes a tool call rather than a spreadsheet somebody keeps.

What you get in VS Code

You sayTool
Credit invoice INV-2026-0001 in full, the client sent the work back.credit_note_create
Raise a purchase order to Nordic Print for 500 brochures at 1.20 each, due the 20th.purchase_order_create
Which purchase orders are past their delivery date?billing_docs_report

Crediting ten percent of a mixed-VAT invoice at a single rate and splitting it across the invoice's own rates give the same gross, EUR 177.00, and VAT lines that differ by EUR 6.10, 22.6 percent. The client's document and the payment are identical either way, so nothing downstream ever surfaces the error; only the VAT return does. The split is done at the point the document is written.

Install it in VS Code

The file is .vscode/mcp.json, and the key inside it is servers.

ScopePath
This workspace<workspace>/.vscode/mcp.json
Every workspacethe user profile mcp.json, opened by the MCP: Open User Configuration command
// .vscode/mcp.json  (the key is "servers")
{
  "servers": {
    "billing-docs": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-billing-docs"]
    }
  }
}

Or from a terminal:

code --add-mcp '{"name":"billing-docs","command":"npx","args":["-y","@theluckystrike/mcp-billing-docs"]}'

VS Code asks you to confirm you trust the server and its capabilities before it starts. Nothing runs until you answer.

The npm publish of @theluckystrike/mcp-billing-docs is pending; until then use the .mcpb bundle or a clone and build from the latest release.

No install: the hosted endpoint

There is no hosted endpoint for this one yet. MCP Billing Docs runs locally over stdio with the config above, which is also the only form in which it reads and writes files on your own disk. Three of the servers in this collection are served at https://mcp.zovo.one/mcp/<name> over MCP streamable HTTP: time-tracker, price-tracker and invoice.

VS Code notes worth knowing first

The top-level key is "servers", not "mcpServers". A config pasted from a Claude Desktop or Cursor README parses cleanly, contributes no servers, and gives you no error to read, which makes it the most expensive one-word mistake here. Alongside it an "inputs" array holds secrets. The newer Agent Host reads a workspace .mcp.json instead.

Free: 5 documents a calendar month, credit notes and purchase orders together, counted by issue date. Both text exports are never metered, and full, partial and per-line credit notes, VAT, multiple currencies and receiving orders are all on the free tier. Pro is $19 once, verified offline.

Questions

Why does my mcp.json do nothing?

The key is servers, not mcpServers. A config copied from a Claude Desktop README parses cleanly and contributes nothing. Rename it. On the newer Agent Host, use a workspace .mcp.json instead.

Do I have to edit the file at all?

No. code --add-mcp takes the server object on the command line, and MCP: Add Server in the palette asks whether the target is Workspace or Global.

Where do the MCP Billing Docs tools show up?

In Chat, behind the tools picker, once the server has started. Adding or changing one raises a prompt asking you to confirm you trust it; if the picker is empty, that prompt is usually still waiting.

Related

MCP Billing Docs in detail · The same server in Cursor and Windsurf · Every server in VS Code · Guides · VS Code docs · Buy Pro