Ledger

io.github.theluckystrikePublished by GitHub account theluckystrikev0.22.5Updated Oct 24, 2026

Post invoices, expenses, deposits and fixed assets into one derived general ledger.

VerifiedSTDIODesktop onlyFinanceData & Analytics

Overview

AI-generated overview

Derives a double-entry general ledger from sibling bookkeeping servers' local data, proving the trial balance and reporting per period.

What you can do
  • Build and delete ledger periods in one currency, with free-tier slot limits
  • Check the trial balance and list ledger lines filtered by account, source server, document or date
  • Close a month with a snapshot and list what is unposted or inconsistent
  • Export lines as RFC 4180 CSV and report movement and balance per account
  • Check license status and activate a Pro key offline
When to use it
Useful when you already run the companion bookkeeping servers (invoices, billing docs, deposits, expenses, bank statements, asset register) and want an assistant to derive a reconciled ledger, verify that debits and credits balance, and close or report on a month.
Requirements
Runs locally as a desktop-only stdio process; install via the .mcpb bundle or a clone and build, since the npm package is not yet published. Reads sibling servers' data directories under the local mcp-servers data path. Optional Pro license key supplied as MCP_LICENSE_KEY. No network access needed.
Before you install
Only useful alongside the sibling bookkeeping servers it reads; missing stores are absent from the ledger. It writes its own period and close files and can delete built periods. Pro features (month close, CSV export, report) require a paid one-time license key; the free tier allows three period builds per calendar month.

Installation

In SourceWeft

  1. Open Ledger in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

mcp-cash-book

In the official MCP Registry (io.github.theluckystrike/cash-book). One double-entry ledger over the books you already keep. It reads your invoices, credit notes, purchase orders, deposits, expenses, bank import and fixed asset register, and derives a debit and a credit for every movement in a period: revenue and VAT output from the invoices, receivables and the payments that clear them, deposits held as the liability they are, expenses by category with the VAT taken out of the gross, fixed assets and their monthly depreciation. It proves the trial balance sums to zero to the minor unit, and when it does not it names the document whose own figures do not add up. It writes nothing back into any of those books, and there is no way to type an entry into it: every line carries the server, the document id and the date it came from, so any figure can be walked back to the page it was printed on.

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

Install

Claude Desktop, ~/Library/Application Support/Claude/claude_desktop_config.json (Windows: %APPDATA%\Claude\claude_desktop_config.json):

json
{  "mcpServers": {    "cash-book": {      "command": "npx",      "args": ["-y", "@theluckystrike/mcp-cash-book"]    }  }}

Claude Code:

sh
claude mcp add cash-book -- npx -y @theluckystrike/mcp-cash-book

Cursor: ~/.cursor/mcp.json (or .cursor/mcp.json in a project), same entry as Claude Desktop.

This server is only useful next to the servers that own the books: mcp-invoice, mcp-billing-docs, mcp-deposits, mcp-expense-tracker, mcp-bank-statement and mcp-asset-register. Every one of them is optional. A store that is not installed is simply absent from the ledger; a store that is installed and unreadable is reported as unreadable, and never read as an empty one.

Tools

toolwhat it does
ledger_buildDerives the ledger for one period in one currency and registers the period
period_deleteRemoves one built period from the register and gives its free-tier slot back
trial_balanceTotals the debits and the credits and proves they are equal to the minor unit
ledger_linesLists the lines, filtered by account, source server, source document or date
month_closeLists what the month leaves unposted or inconsistent, then closes it with a snapshot
ledger_export_csvReturns the lines as RFC 4180 CSV, one row per leg
ledger_reportMovement and balance per account, with the purchase commitments and the exceptions
license_statusFree or Pro, and where to upgrade
license_activateActivates a Pro key, verified offline

Accounts: cash, receivables, revenue, vat_output, vat_input, expenses:<category>, deposits_held, fixed_assets, accumulated_depreciation, depreciation_expense, and purchase_commitments as a memo that is never posted.

Free vs Pro

FreePro
trial_balanceunlimitedunlimited
ledger_linesunlimitedunlimited
ledger_build3 periods a calendar monthunlimited
Rebuilding a period already builtfreefree
Rebuilding one with nothing changedrefused, names the rowrefused, names the row
period_deleteunlimitedunlimited
month_close-yes
ledger_export_csv-yes
ledger_report-yes

The trial balance is free because it is the only question this server exists to answer. A bookkeeper who cannot check that the books add up has no reason to trust anything else here.

ledger_lines already returns every field ledger_export_csv does, bank_ref included: the export is a formatting convenience, an RFC 4180 file with those same fields as columns, not new data. Round 29 (data/user_value_r29.json, prompt 6) measured a model take the Pro refusal on ledger_export_csv correctly, then hand-build a substitute CSV from ledger_lines and drop bank_ref anyway. The gate text now says this plainly, so a client relays ledger_lines instead of reassembling one.

Get Pro: https://mcp.zovo.one/buy/cash-book (one-time, lifetime, verified offline).

The measured insight

On the worked month in test/_client.mjs, four of the five bank rows are the same money as a document that was already posted: 1,375,300 of the 1,380,300 minor units of cash movement, 99.6 percent, appear in both books. Posting the bank import as well as the documents, which is the obvious way to build a cash book and the way most spreadsheets do it, moves the cash balance from -10,543.00 to -21,111.00 EUR. It does not look wrong. Every line is individually plausible, the account is off by almost exactly a factor of two, and the trial balance still comes to zero, because each duplicated receipt brought its own contra with it.

So the bank import posts nothing here. It is matched to the posted cash movements as evidence, and the leftovers are the whole point: on that month exactly 7,500 minor units of the bank total, one unexplained withdrawal, is information the documents did not already have. That is the 0.4 percent worth importing a statement for, and it is the part a duplicate-heavy ledger buries.

Privacy

All data stays on your machine. The ledger is derived on each call from the sibling servers' own data directories under ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/, and this server writes only its own cash-book/periods.json and cash-book/closes.json. There is no network call anywhere in src, and no telemetry. License keys are verified offline.

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

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:

Source: servers/cash-book/README.md at commit 1bd9d69

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

2
  1. v0.22.5LatestOct 14, 2026
  2. v0.21.0Sep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts