Home · Setup · Claude Desktop
Retainers and subscriptions billed on a schedule you set once. It stores a billing schedule per client, weekly, monthly, quarterly, yearly or every N days, shows what falls due, and generates exactly one invoice per schedule per period into the invoice server's own store with its number series and its A4 PDF.
This is a monthly ritual rather than a daily one, and Claude Desktop is where people do monthly rituals. Ask for the dry run first, read the four lines it would create, then say run it.
| You say | Tool |
|---|---|
| Bill Acme 12 hours at 90 EUR every month from the 1st, 14 day terms. | schedule_create |
| Show me what this month's billing run would create before you create it. | invoice_generate_due with dry_run |
| What is due in the next 30 days? | schedule_upcoming |
The worked run created 4 invoices totalling EUR 4,320.00 and, repeated five minutes later, created 0 and skipped 4. The key is the period, not the calendar day, so a billing run you forgot you already did is a no-op rather than four duplicate invoices.
The file is claude_desktop_config.json, and the key inside it is mcpServers.
| Scope | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
{
"mcpServers": {
"recurring": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-recurring"]
}
}
}
If node came from nvm, asdf or homebrew, replace "npx" with the absolute path that which npx prints:
"command": "/Users/you/.nvm/versions/node/v22.14.0/bin/npx"
Save, then completely quit Claude Desktop and start it again. A window reload is not enough.
The npm publish of @theluckystrike/mcp-recurring is pending; until then use the .mcpb bundle or a clone and build from the latest release.
There is no hosted endpoint for this one yet. MCP Recurring Invoices 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.
Two documented facts decide whether the entry works: every path in claude_desktop_config.json must be absolute, and a stdio server started here inherits only a limited, platform-dependent subset of environment variables. If node came from nvm or homebrew, paste what `which npx` prints instead of the bare word. The .mcpb route avoids both: Claude Desktop ships a built-in Node.js environment.
Free: 3 active schedules, unlimited generation, a 30 day upcoming view and a 3 month forecast. Pro is $19 once, verified offline.
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json. Windows: %APPDATA%\Claude\claude_desktop_config.json. There is no published Linux path. Settings, Developer, Edit Config opens the right copy and creates it if it does not exist.
In order: did you fully quit and restart, not just close the window? Is every path absolute? And is the command resolvable, given the limited environment a stdio server inherits here? If node came from nvm, paste what which npx prints.
Yes. An .mcpb bundle, the format renamed from .dxt, opens with Claude and shows an installation dialog. One you built yourself goes in through Settings, Extensions, Advanced settings, Install Extension.
MCP Recurring Invoices in detail · The same server in Cline and Claude Code · Every server in Claude Desktop · Guides · Claude Desktop docs