MCP.Market

Bookie MCP server

by yuens1002·io.github.yuens1002/bookie·v0.8.5

Double-entry bookkeeping MCP server — import bank CSVs, categorize, reconcile, tax reports.

C68/100grade C
What users say
No reviews yet
Be the first
Safety scan
C68/100

full report

Adoption
New

0 stars

Reviews

Write one

Nobody has reviewed Bookie yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Bookie tools (16, 7 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • account_balances

    Compute the current balance of every account (sum of its postings). Optionally filter by segment or as of a date.

  • add_transaction

    Record a single transaction as a balanced double-entry. Money flows FROM one account TO another: for spending, from your bank/card to an expense account; for income, from an income account to your bank. Amounts are positive, in dollars.

  • categorize_transaction

    Change the category account on an existing journal entry — useful for fixing an imported entry posted to the wrong account, or for categorizing an entry that was added without one. Works on entries with exactly one income/expense leg; for split entries (multiple category legs), delete and re-enter with split_transaction. Supply either targetAccountId (explicit) or ruleId (apply a stored categorize

  • delete_transactionwrite action

    Permanently delete a journal entry and its postings (used to correct mistakes or remove duplicate imports). Returns what was deleted. This cannot be undone.

  • export_reportwrite action

    Run a report and render it as markdown or CSV. Accepts the same parameters as generate_report plus a format. Markdown is human-readable; CSV is suitable for spreadsheet import. The report data is fetched fresh — no need to call generate_report first.

  • generate_report

    Generate a financial report. type='monthly-reconciliation': opening/closing balance for an optional bank/card account, income/expense totals by segment, uncategorized entries, and uncleared postings — requires year + month. type='schedule-c': fiscal-year P&L for sole-proprietor segments (taxSchedule=C) grouped by Schedule C tax line — requires year only. type='schedule-e': fiscal-year rental P&L f

  • import_transactions

    Import a bank/card statement (CSV) for one account, as balanced double-entry transactions. Two-step: run with mode='preview' (default) to parse, deduplicate, and flag possible matches — this writes nothing — then review the plan, decide a category account per row, and call again with mode='commit' and `mappings`. The amount sign is handled per profile; posting direction follows the statement (a ch

  • manage_accountswrite action

    Create, list, or archive ledger accounts. Income/expense accounts double as spending categories and belong to a segment (which sets the tax form); attach a taxLine for the specific Schedule line. Bank/card (asset/liability) accounts are usually segment-neutral (omit segmentId).

  • manage_propertieswrite action

    Create, list, or archive rental properties. Schedule E is filed per property, so rental transactions are tagged with a propertyId (and optional unit) in add_transaction. Non-rental work doesn't need properties.

  • manage_receipts
  • manage_ruleswrite action

    Create, list, delete, test, or get suggestions for auto-categorization rules. A rule matches a case-insensitive substring of a transaction's description and either routes it to a category account (action=categorize, optionally tagging a rental property) or marks it to skip on import (action=exclude — e.g. transfers between your own accounts). Higher priority wins; ties break on longer pattern. The

  • manage_segmentswrite action

    Create, list, or archive segments — lines of business (or 'Personal'). Each segment is its own P&L and tax filing (Schedule C, Schedule E, or none for personal), but all share one ledger so they combine at year-end. Income/expense accounts belong to a segment; bank/card accounts stay segment-neutral.

  • query_transactions

    List journal entries with their postings, filtered by date range and/or account. Returns newest first.

  • reconcile

    Match a bank/card statement (CSV) against the ledger to mark postings as cleared. Two-step: run with mode='preview' (default) to see matched postings, statement lines missing from the ledger, and uncleared ledger postings absent from the statement — writes nothing. Call again with mode='commit' to persist the matches (mark cleared=true). Uses the same CSV profiles as import_transactions. Idempoten

  • send_reportwrite action

    Run a report and email it via Resend. Same parameters as generate_report plus a recipient address. The report is rendered as markdown and sent as the email body. Requires RESEND_API_KEY and RESEND_FROM env vars.

  • split_transaction

    Record one purchase (or deposit) that splits across multiple categories — e.g. a receipt with both business and personal items. Creates a single balanced journal entry: one leg on the payment account (the bank/card — this is what a statement shows and what reconciliation matches) plus one leg per category. Use this instead of add_transaction when a single statement line maps to several categories.

Public scan report

scanner v0.1.9 · 2026-09-26 · same rubric, same numbers if you re-run it

2 medium
  • Code scan33 source files scanned15/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitystatic API keys via environment variables6/15
  • Maintenancelast push 8 days ago15/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10

Findings (2)

  • mediumnpm install lifecycle script presentinstall.script
  • mediumnpm install lifecycle script presentinstall.script
    package.json: …t run", "test:watch": "vitest", "postinstall": "prisma generate" }, "dependencies"…
Overall 68/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Bookie compares

Against every graded Finance MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
68/100
higher than 35% of 1,761 Finance servers
Tools
16
the typical Finance server has 8
Tools that change things
44%
typical: 0%. Fewer write tools means less an agent can break

What its tools let an agent do: 6 read · 3 create · 5 change · 1 delete · 1 send or post

Install Bookie in Claude Code, Cursor or VS Code

Runs npx -y bookie-mcp on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add bookie -- npx -y bookie-mcp
Add to Cursor

What the publisher says

From the Bookie repository's README, as published. We do not edit it. Read it on GitHub

bookie

An MCP server that keeps books for freelancers and landlords — driven from Claude or GPT instead of QuickBooks.

Ask your LLM to import a bank statement, categorize spending, reconcile a month, or generate a Schedule C. Bookie provides the correct double-entry ledger underneath — so the model reasons over real numbers, not a spreadsheet it's improvising on the fly.

This is for you if: you're a solopreneur, freelancer, or rental property owner already living in Claude or GPT, you're comfortable with a 5-minute setup, and you want books that are actually correct.

Not for you if: you want a dashboard UI, you need multi-user access, or you're satisfied with QuickBooks / a spreadsheet.

What you need before starting

  • Node ≥ 24
  • neonctl — npm install -g neonctl (free Neon account; needed for the DB)
  • An MCP-capable host: Claude Desktop, Claude.ai, Cursor, VS Code, or any host supporting the MCP stdio or HTTP transport

Quick start (local, stdio)

Recommended — from source, fully automated:

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 build

npm run setup opens a browser to log into Neon; new to Neon? Use the "Sign up for an account" link and pick GitHub/Google/Microsoft rather than email+password — it completes in the same browser round-trip, no email-verification detour that could interrupt the CLI mid-wait.

npm run setup prints a ready-to-paste Claude Desktop config block at the end:

{
  "mcpServers": {
    "bookie": {
      "command": "node",
      "args": ["/absolute/path/to/bookie/dist/index.js"],
      "env": {
        "BOOKIE_DB_URL": "<printed by setup>",
        "BOOKIE_DB_DIRECT_URL": "<printed by setup>",
        "BOOKIE_API_KEY": "<printed by setup>"
      }
    }
  }
}

Adding another machine to the same ledger — no clone needed: stdio is a local process — every machine running a stdio MCP client spawns its own copy of the server, so each one otherwise needs its own checkout. Once the Neon DB is provisioned (via npm run setup above, on any one machine), every other machine just needs the same connection strings — no git clone, no npm install, no npm run build to keep in sync. Point that machine's MCP host at the published package instead:

{
  "mcpServers": {
    "bookie": {
      "command": "npx",
      "args": ["-y", "bookie-mcp"],
      "env": {
        "BOOKIE_DB_URL": "<same value as your first machine>",
        "BOOKIE_DB_DIRECT_URL": "<same value as your first machine>",
        "BOOKIE_API_KEY": "<same value as your first machine>"
      }
    }
  }
}

npx fetches and runs the published version on demand — every machine pointed at the same BOOKIEDBURL shares one ledger, without any of them (besides the original) needing a checkout.

Bootstrapping a DB without cloning at all: if you don't have connection strings yet from any machine (e.g. you created the Neon project manually instead of via npm run setup), push bookie's bundled schema directly:

mkdir bookie-mcp && cd bookie-mcp
npm install bookie-mcp
BOOKIE_DB_URL=<pooled> BOOKIE_DB_DIRECT_URL=<direct> npx prisma db push --schema=node_modules/bookie-mcp/prisma/schema.prisma

Then use the same npx -y bookie-mcp config above.

Quick start (remote, HTTP — for Claude.ai mobile)

Deploy to Railway with one click:

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Bookie: common questions

Is Bookie MCP server safe?
With care: it is graded C, so read the findings first (68/100). Read the Bookie safety report
How do I install Bookie?
It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
Does Bookie need an API key?
Yes. The registry entry asks for BOOKIE_DB_URL, BOOKIE_DB_DIRECT_URL, BOOKIE_API_KEY.
Is Bookie maintained?
The last commit was 47 days ago (2026-09-18). The latest release is v0.8.5.
What can I use instead of Bookie?
Servers from other publishers that do the same job: Beancount.io MCP server, E Arveldaja MCP server and Norman Finance — AI Bookkeeping, Accounting & Taxes MCP server.
How does Bookie compare with other Finance MCP servers?
safety score 68/100 (higher than 35% of 1,761 Finance servers); tools 16 (the typical Finance server has 8); tools that change things 44% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

Alternatives to Bookie

Same job from other publishers: the closest match first, then the best rated.

  • Beancount.io
    Query, edit, and reconcile a hosted Beancount ledger: BQL, reports, files, and bank imports.
    A
  • E Arveldaja
    Estonian e-arveldaja (RIK e-Financials) accounting — invoices, bank import, reports.
    B
  • Norman Finance — AI Bookkeeping, Accounting & Taxes
    Bookkeeping, invoices and tax workflows for European businesses, including Polish KPiR and JPK.
    A
  • Central Bank Rates (AllRatesToday)
    Official central-bank & tax-authority rates from 100+ sources. No API key needed to start.
    B
  • BankMCP™
    Read-only MCP server for your own bank accounts via Enable Banking. Self-hosted, one user.
    A