mcpField
D
deposits

deposits

Remote
mcp.zovo.oneFinance2Updated 1d ago

About deposits

deposits is an MCP server for managing client security and retainer deposits, from receipt through invoice application or refund. It works with mcp-invoice and stores data locally.

Key features

  1. 01Record and list client deposits
  2. 02Apply deposits as invoice payments
  3. 03Refund held amounts
  4. 04Track balances by client and currency
  5. 05Create text and PDF statements

Use cases

  1. 01Record a security deposit when received
  2. 02Apply a retainer to a client invoice
  3. 03Check held amounts before billing
  4. 04Prepare a deposit statement for email

MCP support

Exposes deposit management tools, the `deposits://held` resource, and the `settle_deposits` prompt to MCP clients. It reads clients and invoices from `mcp-invoice` and records applied deposits as invoice payments.

Configuration

Remote servers need no local install. Pick your client, then copy the config or install in one click.

Endpointhttps://mcp.zovo.one/mcp/deposits
Copy install command
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.

All endpoints
Streamable HTTPhttps://mcp.zovo.one/mcp/depositsAuth required
Packages
mcpbdeposits.mcpb0.22.5

Tools

11
ParameterTypeRequiredDescription
kindenumYessecurity: held against damage or non-payment. retainer: held against work not yet invoicedsecurity | retainer
notesstringNoFree text kept on the record and printed on the statement
clientstringYesClient name or client id. A name the invoice server already knows brings its address, email and VAT id onto the deposit
currencystringNoDefaults to your business default currency
referencestringNoBank reference, transfer note or cheque number the money arrived with
amount_minorintegerYesWhat was received, in MINOR units: 50000 = 500.00 EUR, 50000 = JPY 50000. Never a decimal
client_emailstringNoOnly if the user gave it; otherwise the stored client's email is used
client_vat_idstringNoClient VAT / tax registration id
received_datestringNoYYYY-MM-DD, the day the money arrived. Defaults to today
client_addressstringNoPostal address for the statement's client block, newlines allowed

Details

From the project README

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.

In the official MCP Registry (io.github.theluckystrike/deposits).

deposits demo

npm publish for @theluckystrike/mcp-deposits is pending, so npx -y @theluckystrike/mcp-deposits returns 404 today. Until then, the .mcpb one-click bundle or a clone+build is the working path.

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

toolwhat it does
deposit_recordRecord a security or retainer deposit received: amount in minor units, currency, date, reference
deposit_listEvery deposit with received, applied, refunded and held. Filter by client, status, kind or date
deposit_applyApply part or all of a held deposit to an invoice, as a payment on that invoice
deposit_refundGive part or all of a held deposit back, with the date and the method
deposit_deleteRemove a deposit recorded by mistake, if none of it was ever applied or refunded
deposit_balanceWhat is held, per client and per currency: received, applied, refunded, held
deposit_statement_textThe plain-text statement to paste into an email
deposit_statement_pdfThe A4 PDF, titled DEPOSIT STATEMENT (Pro)
deposits_reportHeld per currency, the oldest held deposits, and what has sat unapplied for N days (Pro)
license_status, license_activateFree or Pro, and how to upgrade

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

Free vs Pro

FreePro
Deposits recorded per calendar month5Unlimited
Applying to invoices, refunds, balances, listsYes, unlimitedYes
deposit_delete for a deposit that never moved moneyYes, unlimitedYes
deposit_statement_textYes, unlimitedYes
deposit_statement_pdfNoYes, plus your logo and no footer credit
deposits_reportNoYes

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.

The cap counts the deposits stored with a received date in that month, so deposit_delete gives the slot straight back: a deposit typed in twice or with the wrong amount costs nothing but the id. deposit_record also refuses a deposit that matches one already stored on client, amount, currency, kind, received date and reference, names that id and stores nothing, so the same money is never held twice and no free slot is spent on a retry.

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

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: [email protected]

Use these docs as an MCP server

Any MCP client (Claude, Cursor, Windsurf, VS Code) can read this repository's documentation directly via GitMCP - no install:

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.