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

mcp-deposits

Security and retainer deposits, held per client, on the same engine as your invoices.

A deposit is the client's money sitting on your account. It has to be recorded when it arrives, set against an invoice when the work is billed, given back when it is not, and answered for at any point in between: how much of theirs are you holding, in which currency, since when. This server does those four things, against the invoices and the clients the mcp-invoice server already holds. When a deposit is applied to an invoice, the payment is recorded on that invoice, so invoice_list and overdue_report stop chasing money you already have. Everything stays on your machine.

Built on @theluckystrike/mcp-invoice/lib for the money, currency and store code, and on @theluckystrike/mcp-billing-docs/lib for the A4 page, so a deposit statement looks like the credit note and the invoice next to it and agrees with them to the minor unit.

deposits demo

Install

Claude Desktop (claude_desktop_config.json):

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

Claude Code:

claude mcp add deposits -- npx -y @theluckystrike/mcp-deposits

Cursor (.cursor/mcp.json):

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

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

Tools

tool what it does
deposit_record Record a security or retainer deposit received: amount in minor units, currency, date, reference
deposit_list Every deposit with received, applied, refunded and held. Filter by client, status, kind or date
deposit_apply Apply part or all of a held deposit to an invoice, as a payment on that invoice
deposit_refund Give part or all of a held deposit back, with the date and the method
deposit_balance What is held, per client and per currency: received, applied, refunded, held
deposit_statement_text The plain-text statement to paste into an email
deposit_statement_pdf The A4 PDF, titled DEPOSIT STATEMENT (Pro)
deposits_report Held per currency, the oldest held deposits, and what has sat unapplied for N days (Pro)
license_status, license_activate Free or Pro, and how to upgrade

One resource, deposits://held, and one prompt, settle_deposits.

Free vs Pro

Free Pro
Deposits recorded per calendar month 5 Unlimited
Applying to invoices, refunds, balances, lists Yes, unlimited Yes
deposit_statement_text Yes, unlimited Yes
deposit_statement_pdf No Yes, plus your logo and no footer credit
deposits_report No Yes

The free cap is on recording new deposits only. Money already held can always be applied, refunded and accounted for, on any tier: a limit that trapped a client's deposit would be a limit on their money, not on yours.

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

A measured thing

The invoice server's own payment tool SETS the amount paid, so routing a deposit through it erases the payment that came before. Measured against servers/invoice/dist/index.js on a EUR 1,000.00 invoice: invoice_mark_paid {amount: 200} for a bank transfer, then invoice_mark_paid {amount: 300} for the deposit, leaves paid_minor at 30000 and the reply reads "balance due EUR 700.00". The EUR 200.00 that actually arrived is gone from the record, and the client gets chased for it.

deposit_apply writes the same three fields on the same record -- paid_minor, paid_date, status -- but ADDS: the same two payments leave paid_minor at 50000 and a balance due of EUR 500.00. Asserted in test/unit.test.mjs, "a second application ADDS to paid_minor, it does not replace it".

The general form: a store shared between two servers is safe to write only if you have read how the owning server writes it. The field names matching is not the contract; the arithmetic on them is.

Privacy

All data stays local: ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/deposits/. 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 20, 2026-09-05. Paste one in as it is written.

Acme Ltd wired us a 500 euro security deposit today, reference SEPA 88213. Please record it.

What it did, measured in round 20, 2026-09-05: One deposit_record {client: Acme Ltd, amount_minor: 50000, currency: EUR, kind: security, reference: SEPA 88213, received_date: 2026-09-05} produced DEP-2026-0001 on the first turn.

Apply 300 euro of that deposit against invoice INV-2026-0001.

What it did, measured in round 20, 2026-09-05: One deposit_apply {id: DEP-2026-0001, invoice: INV-2026-0001, amount_minor: 30000}.

Can we use what's left of Acme's deposit against INV-2026-0002?

What it did, measured in round 20, 2026-09-05: The model tried the call rather than reasoning about it, and the server refused: DEP-2026-0001 is held in EUR and INV-2026-0002 is in USD.

On the free tier for this path: 5 deposits recorded per calendar month, counted by received date, with applying to invoices, refunds, lists, balances and the text statement all unlimited on every tier: a cap that trapped a client's deposit would be a limit on their money rather than on yours.

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 · Client deposits and retainers from chat, applied to your real invoices · Credit notes and purchase orders from chat, against your real invoices · One install, every server: the office-suite bundle · All guides