All servers · Buy Pro $19 · Source · Claude Desktop bundle (.mcpb)
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.

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.
| 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 | 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.
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.
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
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.
Exact config path, entry and caveats: Claude Desktop · Claude Code · Cursor · VS Code · Windsurf · Cline · Claude.ai and Claude Desktop connectors · all clients
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