manage_segmentsLABSCO 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://accountsandbookie://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
USE CASES
Getting a month's bank activity into the books
Import the CSV, review the preview with its deduplication and rule suggestions, then confirm rather than committing blind.
Closing a month
Run the close prompt, which walks the whole sequence — import, categorise, reconcile, report, and optionally email it.
Stopping the same categorisation work every month
Let the suggest action propose rules from descriptions you have already categorised more than once, then keep the ones that are right.
Preparing a tax return
Generate the fiscal-year Schedule C and Schedule E, export them as markdown and CSV, and send them on.
Keeping receipts attached to the entries they belong to
Attach the file to the transaction, so the evidence is in the ledger rather than in a folder you have to search later.
Working from a second machine
Point the other machine's client at the published package with the same connection strings — no clone, no build, one shared ledger.
16 tools
Listed in project docs. Your client may show a different list.
manage_accountsmanage_propertiesadd_transactionsplit_transactionquery_transactionsaccount_balancescategorize_transactiondelete_transactionimport_transactionsmanage_rulesreconcilemanage_receiptsgenerate_reportexport_reportsend_reportBEFORE YOU INSTALL
What to know first
Tools you get
16 tools named in the project's documentation.
Requires
- Node ≥ 24
- neonctl (npm install -g neonctl) and a free Neon account
- BOOKIE_API_KEY in your environment
- BOOKIE_DB_URL in your environment
- BOOKIE_DB_DIRECT_URL in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
You clone and build this one yourself.
Server setup
git clone https://github.com/yuens1002/bookie
cd bookie
npm install
npm run setup # creates Neon DB, generates secrets, writes .env, runs db:push
npm run buildMCP Clients
Claude Desktop
{
"mcpServers": {
"bookie": {
"command": "node",
"args": [
"<YOUR_PATH_TO_BOOKIE>/dist/index.js"
],
"env": {
"BOOKIE_DB_URL": "<YOUR_BOOKIE_DB_URL>",
"BOOKIE_DB_DIRECT_URL": "<YOUR_BOOKIE_DB_DIRECT_URL>",
"BOOKIE_API_KEY": "<YOUR_BOOKIE_API_KEY>"
}
}
}
}