Labsco
MCP SERVER

bookie

by yuens1002

Double-entry bookkeeping for freelancers and landlords, driven from Claude — import a statement, categorise, reconcile, generate a Schedule C.

Accounting, Invoicing & Bookkeeping
Summary
No UI, on purpose — the ledger is the part a model should not improvise.

The author draws the line in the right place. Reading a bank CSV and describing a receipt are things a model is good at; keeping debits equal to credits and money in integer cents are things it is not. Everything the server owns is the deterministic half. It is explicitly not for you if you want a dashboard, need multiple users, or are happy with a spreadsheet — and it is worth taking that at face value. Setup is a real setup: a Neon account, a CLI install and a scripted provisioning run before the first entry.

What it is

An MCP server that keeps a real double-entry ledger in your own Postgres database, so an assistant can do bookkeeping without improvising the arithmetic. The division of labour is explicit: the model reads CSVs, sees receipt images and writes prose; the server owns the balanced ledger, integer-cent money maths, deterministic categorisation rules and reproducible reports.

What you get
  • Accounts created, listed and archived, with segment-scoped categories carrying a tax line — `manage_accounts`
  • Entries recorded as balanced double-entry, including a payment leg split across several categories — `add_transaction`, `split_transaction`
  • A bank or card CSV imported as balanced entries, with a preview-then-confirm step and deduplication — `import_transactions`
  • Auto-categorisation rules created, tested and suggested: the suggest action scans past categorisations and proposes rules for descriptions seen 2 or more times — `manage_rules`, `categorize_transaction`
  • A statement matched against the ledger and postings marked cleared, previewed before it commits — `reconcile`
  • Receipts attached, listed and downloaded through a signed URL, with the original file optionally uploaded — JPEG, PNG, WEBP, HEIC or PDF — `manage_receipts`
  • Reports that go somewhere: a monthly reconciliation summary or a fiscal-year Schedule C or Schedule E, rendered to markdown or CSV and emailed — `generate_report`, `export_report`, `send_report`
  • Direct reads for the rest: entries and postings by date range or account, and current balances — `query_transactions`, `account_balances`
  • Two resources the model can read without a tool call — `bookie://accounts` and `bookie://reports/{year}` — and three workflow prompts: `monthly-close`, `categorize-uncategorized`, `prepare-tax-summary`
Requirements

Node >= 24, a free Neon account, and `neonctl` installed globally — Neon holds the ledger. From a clone, `npm run setup` creates the database, generates the secrets, writes `.env`, pushes the schema and prints a ready-to-paste client config; `npm run build` follows. Three variables carry the connection and auth: `BOOKIE_DB_URL`, `BOOKIE_DB_DIRECT_URL` and `BOOKIE_API_KEY`. A second machine does not need a clone at all — point it at the published `bookie-mcp` package (0.8.14 in package.json) with the same three values and it shares the ledger. For Claude.ai on mobile there is an HTTP transport deployable to Railway, with OAuth and a `RESEND_API_KEY` needed for emailed reports. The HTTP transport requires auth on every request; set at least one before exposing it beyond localhost.

Setup effort

One command plus a key — npm install bookie-mcp, then supply credentials