Finance Toolkit
500+ transparent financial methods calculated from raw statements, not third-party endpoints.
作者による説明(英語の原文)
Recurring subscriptions billing: schedule once, auto-generate due invoice PDFs.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
MCP_LICENSE_KEY「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
リンク先は作者自身のファイルです。私たちが置いたり再パッケージしたりしたものではありません。ファイルを開くと、Claude Desktopがインストールします。
ターミナルでこれを実行します
動かす前に、空欄の値を入力してください。
ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月6日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント theluckystrike で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:MCP_LICENSE_KEY
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.22.6)がレジストリに届いたのは23 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにMCPBも必要です。
同じカテゴリには:Finance Toolkit, SolidInvoice, Korea Tax Calculator
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
500+ transparent financial methods calculated from raw statements, not third-party endpoints.
Create and send invoices and quotes, manage clients, and track payments in SolidInvoice.
Korean tax calculation and tax-audit judgment MCP: 96 tools with statutory citations.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Say "bill Acme 12 hours at 90 EUR on the 1st of every month" once, and stop remembering it. This MCP server stores recurring invoice schedules, client, line items, cadence, start and end dates, and then, when you ask, creates the invoices that have actually fallen due as real records in the invoice server, with its number series, its clients and its A4 PDF. Generation is idempotent: one invoice per schedule per period, keyed by the occurrence date, so running the billing run twice on the same day creates nothing the second time. It also answers "what falls due in the next 30 days" and "what will I invoice per month for the next year". Everything is stored in plain JSON files on your own machine; nothing is uploaded anywhere.
In the [official MCP Registry](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.theluckystrike%2Frecurring-invoice-scheduler-subscription-billing-due-reminders/versions/latest) (io.github.theluckystrike/recurring-invoice-scheduler-subscription-billing-due-reminders).
Define a repeating invoice once, generate the due PDFs from chat, no billing SaaS required.
npm publish for @theluckystrike/mcp-recurring is pending. Until then, the .mcpb one-click bundle or a clone+build is the working path, both are verified below.
One-click (.mcpb): download recurring.mcpb from the latest release and double-click it in Claude Desktop: https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
{
"mcpServers": { "recurring": { "command": "npx", "args": ["-y", "@theluckystrike/mcp-recurring"] } } }
Claude Code:
claude mcp add recurring -- npx -y @theluckystrike/mcp-recurring
(.cursor/mcp.json):
{
"mcpServers": { "recurring": { "command": "npx", "args": ["-y", "@theluckystrike/mcp-recurring"] } } }
The npx form above starts working the moment the package is published. Until then, use the .mcpb bundle above, or build from source with exactly these three commands:
git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install npm run build -w packages/mcp-license -w servers/invoice -w servers/recurring
Then point your client's command at node with one arg: the absolute path to servers/recurring/dist/index.js.
To run in Pro mode set MCP_LICENSE_KEY in the same config block, or call license_activate once with your key.
invoice_list, counts in overdue_report and can be re-rendered with invoice_pdf. Set your issuer details once with business_set there; this server has no business_set of its own on purpose, so there is only one profile to keep right.| Tool | What it does |
|---|---|
schedule_create | Define a repeating invoice: client, items, cadence, start date, optional end date, due days, notes |
schedule_list | Every schedule with cadence, amount per period, next due date and status |
schedule_get | Full record for one schedule, plus how many invoices it has generated |
schedule_update | Change client, items, currency, cadence, dates, due days or notes. Periods already invoiced are never re-issued |
schedule_pause | Stop generating without deleting; history is kept |
schedule_resume | Make it active again. Periods that fell due while paused are still due |
schedule_delete | Remove the schedule. Invoices it made stay in the invoice server and its history is kept as an audit trail. A re-created schedule gets a new id, so invoice_generate_due warns when it re-covers a period the old one already billed |
schedule_skip | Skip ONE occurrence for good, without pausing the schedule -- the answer to "do not bill this client for October". undo: true puts the period back |
schedule_upcoming | What falls due in the next N days, with amounts and totals per currency, plus any period that already fell due and was never invoiced. Free covers 30 days |
invoice_generate_due | Create the invoices that are due as of a date and render their PDFs. Idempotent, keyed by period; reports created and skipped. At most 60 invoices per call, oldest period first, and it says how many are still due. dry_run shows the run first. Free and unlimited |
schedule_history | Pro: the audit log for one schedule -- every period, invoice number, dates, amount, paid status and PDF path |
forecast | Expected revenue per calendar month per currency, with paused schedules listed separately rather than dropped. Free covers 3 months |
license_status | Show free or Pro mode |
license_activate | Activate a Pro key (verified offline) |
Resource: recurring://upcoming returns the next 30 days of occurrences as JSON. Prompt: monthly_billing_run, dry run, generate, list what is coming, then report who needs a payment reminder.
| You say | Tool |
|---|---|
| "Bill Acme 12 hours at 90 EUR every month from the 1st." | schedule_create |
| "What recurring invoices do I have?" | schedule_list |
| "What is due in the next 30 days?" | schedule_upcoming |
| "Run this month's billing." | monthly_billing_run / invoice_generate_due |
| "Show me what would be created before you create it." | invoice_generate_due {dry_run: true} |
| "Pause the Beta Corp retainer, they are on hold." | schedule_pause |
| "Do not bill Acme for October." | schedule_skip |
| "Put the Acme retainer up to 100 EUR an hour from now on." | schedule_update |
| "How much will I invoice per month next year?" | forecast |
| "Show me every invoice this retainer has produced." | schedule_history |
You: Bill Acme 12 hours at 90 EUR a month, starting 1 June, 14 day terms.
schedule_create { client: "Acme Retainer", currency: "EUR", every: "monthly", start_date: "2026-06-01", due_days: 14, items: [{ description: "Retainer hours", quantity: 12, unit_price: 90 }] } -> schedule 9f2c1a04, next dates 2026-06-01, 2026-07-01, 2026-08-01, 2026-09-01
You (on 3 September): Run the billing.
invoice_generate_due {} -> as_of 2026-09-03: created 4 invoices, skipped 0 already invoiced. INV-2026-0001 Acme Retainer period 2026-06-01 EUR 1080.00 due 2026-06-15 .../pdf/INV-2026-0001.pdf INV-2026-0002 Acme Retainer period 2026-07-01 EUR 1080.00 due 2026-07-15 .../pdf/INV-2026-0002.pdf INV-2026-0003 Acme Retainer period 2026-08-01 EUR 1080.00 due 2026-08-15 .../pdf/INV-2026-0003.pdf INV-2026-0004 Acme Retainer period 2026-09-01 EUR 1080.00 due 2026-09-15 .../pdf/INV-2026-0004.pdf Total: EUR 4320.00
You (five minutes later, having forgotten): Run the billing.
invoice_generate_due {} -> as_of 2026-09-03: created 0 invoices, skipped 4 already invoiced.
The second run is the point: the period, not the calendar day, is the key, so a repeated billing run is a no-op rather than a duplicate invoice sitting in a client's inbox.
| Free | Pro | |
|---|---|---|
| Active schedules | 3 | Unlimited |
invoice_generate_due | Yes, unlimited | Yes, unlimited |
schedule_upcoming horizon | 30 days | Up to 10 years |
forecast | 3 months | Up to 120 months |
schedule_history audit log | No | Yes |
End-of-month and anchor-day rules (anchor_day, end_of_month) | No, bills on the start date's day of month | Yes |
| Pause, resume, update, delete, dry run, multi-currency | Yes | Yes |
Pro is a one-time $19, or $39 for every server in the collection, lifetime.
Every date is a local ISO calendar date, YYYY-MM-DD. An occurrence is the k-th step from start_date, and occurrence 0 is start_date itself, so a schedule starting today is due today.
weekly = +7 days per step. {days: n} = +n days per step.monthly = +1 month, quarterly = +3 months, yearly = +12 months.start_date and clamps it to the length of the target month; it never carries the clamp forward. From 2026-01-31 the series is 01-31, 02-28, 03-31, 04-30, 05-31, February does not silently turn a month-end retainer into a 28th-of-the-month retainer.2028-02-29 fall on 02-28 in common years and back on 02-29 in the next leap year.anchor_day replaces the day of month before clamping, so anchor_day: 31 means the last day of every month; end_of_month: true does the same explicitly. Both are ignored for weekly and {days: n}, which have no month to anchor to. An anchored first occurrence that would land before start_date is dropped, never billed early.end_date is generated; the next one is not.start_date: it jumps to an estimate near the date you asked about and scans forward from there, so a daily schedule created in 2010 still reports what is due in 2026 instead of exhausting its per-run occurrence cap walking there one day at a time.Amounts are held as integer minor units by the invoice engine, the same ISO 4217 table, the same round-per-line-then-sum contract, so a schedule's amount and the invoice it produces can never disagree. Each line's gross is rounded first, tax is computed and rounded per line and grouped into one line per rate, and the totals are integer sums of those already-rounded values. A schedule bills in its own currency, or your business default currency if it has none; nothing here converts between currencies.
Schedules and the generation log live in ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/recurring/ as schedules.json and history.json. The go into the invoice server's directory, ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/invoice/, with their PDFs under its pdf/ subfolder, the same files invoice_list, overdue_report and invoice_pdf read there.
Every mutation runs under an advisory lock file. Anything that writes an invoice takes two locks, always in the same order, recurring/.lock first, then invoice/.lock, so two billing runs (or a billing run and a hand-written invoice in the other server) cannot interleave, cannot allocate the same invoice number and cannot deadlock. Invoice numbers are allocated inside the lock; the PDFs are rendered after it is released, so a slow render never holds up the counter. Saves go to a temporary file and are renamed into place.
If schedules.json or history.json is unreadable or not valid JSON it is never treated as "empty": the file is moved aside byte-for-byte as .json.corrupt- , a .json.corrupt marker is written, and every tool fails loudly until you restore a good copy and delete the marker. This matters more here than anywhere else in the collection: a history.json silently read as empty would re-bill every period the schedule has ever covered.
冒頭だけを表示しています。続きはリポジトリで読めます