mcpField
D
dunning-letters

dunning-letters

Remote
mcp.zovo.oneFinance2Updated 1d ago

About dunning-letters

dunning-letters is an MCP server for tracking unpaid invoices through a scheduled reminder and escalation sequence. It records payments and sent letters, and renders each notice as Markdown or printable HTML without sending it.

Key features

  1. 01Register invoices and escalation dates
  2. 02Track full or partial payments
  3. 03Render staged letters as Markdown or HTML
  4. 04Record sent letters and advance stages
  5. 05List overdue invoices and aging buckets
  6. 06Show which notices are due today

Use cases

  1. 01Track follow-up for unpaid invoices
  2. 02Prepare a printable payment notice
  3. 03See which invoice reminders to send today

MCP support

It exposes invoice registration, payment tracking, letter rendering, overdue and aging reports, and daily chase-list tools to MCP clients.

Configuration

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

Endpointhttps://mcp.zovo.one/mcp/dunning-letters
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/dunning-lettersAuth required
Packages
mcpbdunning-letters.mcpb0.22.5

Tools

11
ParameterTypeRequiredDescription
duestringYesThe date payment fell due, YYYY-MM-DD. The ladder is anchored to this date
gapsarrayNoDays after the due date at which reminder 1, reminder 2 and the final notice fall due, strictly increasing. Default [7, 14, 21]
notestringNo
clientstringYesWho owes the money, e.g. Acme Ltd
issuedstringNoThe date the invoice was issued, YYYY-MM-DD, for the letter's reference line
currencystringYesISO code the invoice was issued in
referencestringYesThe invoice number being chased, e.g. INV-1042
amount_minorintegerYesThe invoice amount in whole minor units (integer cents). 125000 is USD 1,250.00
duplicate_okbooleanNoRegister even though an identical invoice is already on the register. Default false
late_fee_percent_per_monthnumberNoLate payment interest your terms allow, percent per month, simple and pro-rata. When set, reminder 2 and the final notice state the accrued figure

Details

From the project README

Automated payment reminders for overdue invoices

theluckystrike/mcp-dunning-letters MCP server

In the official MCP Registry (io.github.theluckystrike/dunning-letters). Chase overdue invoices without losing the thread. Register an unpaid invoice, client, invoice reference, amount in integer cents, currency, due date, and the server runs the escalation ladder: reminder 1 (polite, due + 7 days), reminder 2 (firm, with the late fees note, due + 14), and the final notice (before-action wording, due + 21; the gaps are configurable per invoice). For each stage it generates the letter, as Markdown or as a self-contained printable HTML page. It records what you sent and when, lists everything overdue with days late and stage, ages the whole register into current/30/60/90+ buckets, and answers "what do I need to send today". Nothing is emailed or sent anywhere: this server produces the letter text, and sending it is your act.

Built by theluckystrike.

npm publish for @theluckystrike/mcp-dunning-letters is pending, so npx -y @theluckystrike/mcp-dunning-letters returns 404 today. Until then, a clone+build is the working path.

Install

Claude Desktop

macOS ~/Library/Application Support/Claude/claude_desktop_config.json, Windows %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "dunning-letters": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-dunning-letters"]
    }
  }
}
Claude Code
claude mcp add dunning-letters -- npx -y @theluckystrike/mcp-dunning-letters
Cursor

~/.cursor/mcp.json (global) or .cursor/mcp.json (project), same entry as Claude Desktop.

Tools

toolwhat it does
invoice_registerStart chasing an unpaid invoice: client, reference, amount, currency, due date. Returns DUN-YYYY-NNNN and the three escalation dates
payment_recordRecord money received, full or partial. A part payment lowers what the next letter asks for; covering the balance closes the ladder
letter_renderGenerate the chase letter for the current stage -- reminder 1, reminder 2 or the final notice -- as Markdown or self-contained printable HTML. Nothing is emailed: you send the text it produces
letter_sentRecord that a letter actually went out, with its date, so the ladder advances. Letters go out in order
overdue_listEvery unpaid invoice past its due date: days late, outstanding, letters sent, what is due next, worst first
aging_summaryThe whole register in current/1-30/31-60/61-90/91+ buckets, counts and totals in integer cents, per currency
chase_todayThe day's chase list: which invoices cross an escalation threshold today, which letter to send each, what falls due next
invoice_statusOne chased invoice in full: payments, letters, schedule, next action
invoice_deleteDelete an invoice entered wrongly. The id is not reissued
license_status / license_activateFree or Pro, and the key

Free vs Pro

FreePro
Unpaid invoices chased at once3Unlimited
All three letters, both formatsYesYes
Aging summary and the day's chase listYesYes
Late fee accrual in the lettersYesYes
Payment recording and historyYesYes

The cap is on how many chases run at once, never on the letters or the aging: three late payers taken from first reminder to final notice is a real chase list, and an invoice that gets paid frees its slot. What is metered is breadth, a fourth concurrent chase is a collections workload, not a freelancer's month.

Get Pro: https://mcp.zovo.one/buy/dunning-letters, $19 one-time for this server, or $39 for the bundle.

A measured insight

The ladder is anchored to the due date, not to the last letter, and the two drift apart exactly when chasing is going badly.

The worked chase in test/_client.mjs: USD 1,250.00 due 2026-06-01, gaps 7/14/21, so the letters fall due on 06-08, 06-15 and 06-22 whether or not anything was sent. If reminder 1 actually goes out late, say 06-20, twelve days after its date, a previous-letter-anchored ladder would push the final notice to 07-11. This one does not: 06-22 stands, because the client's obligation was fixed by the due date, not by when you got around to writing. Recording a sending moves only which stage is next; it never moves the schedule. The letters are also strictly sequential: an invoice 60 days late with nothing sent is still owed reminder 1, because a final notice that no polite letter preceded reads as a threat, not a chase.

The late fee is measured the same way, once: simple interest, pro-rata on a 30-day month, on the amount outstanding on the day the letter is written, rounded once to the minor unit. On the worked chase that is 125,000 minor units at 2% over 30 days late, 2,500 exactly, and after a 50,000 part payment it is 1,500 on the 75,000 that remains, so the final notice asks for 76,500 and no invented figure more.

Privacy

All data stays local, in ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/dunning-letters/. Two files: invoices.json, counter.json. Nothing is sent anywhere, no account, no API key, no network call in this server at all, and the letters are rendered to text for you to send yourself; this server holds no mail credentials and wants none. License keys are verified offline.

Built by theluckystrike. https://github.com/theluckystrike

Frequently asked questions

Is there an MCP server for payment reminders or dunning letters?

Yes. The dunning-letters server at mcp.zovo.one automates accounts-receivable follow-up: tiered reminder sequences (friendly, firm, final), printable PDF letters, per-customer aging. Free tier, hosted remote endpoint.

How do I send payment reminders from Claude?

Connect https://mcp.zovo.one/mcp/dunning-letters and say: 'List overdue invoices and draft a firm reminder for Acme.' The letter follows the standard tier sequence and exports as PDF.

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.