LabscoMCP early access ↗
yuens1002MCP SERVER · OFFICIAL PROJECT

bookie

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

by yuens1002 ↗Accounting, Invoicing & Bookkeeping✓ Official

LABSCO 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

Build from source — git clone https://github.com/yuens1002/bookie