BennyBooks

Bookkeeping that agents can run — and humans still own.

Transactions, notes, and receipts in one structured ledger. Agents propose. You approve. Nothing posts without you.

bennybooks.app/ledger
All transactions47 pending review

AWS

Cloud infrastructure

Uncategorized-$842.00

Stripe payout

Revenue

Matched+$12,400.00

WeWork

Office & rent

Receipt missing-$1,200.00

Figma

Software

Agent suggested-$45.00

3

Primitives

12+

MCP tools

100%

Human approval

24/7

Agent-ready

Platform

Three primitives. One ledger.

Everything in BennyBooks flows from transactions, notes, and receipts — structured so agents and humans share the same source of truth.

  1. Import
  2. Categorize
  3. Reconcile
  4. Review
  5. Close
Transactions
Bank feeds, invoices, and journal entries in one list. Every number has a source.
Notes
Free-text context on any record — vendor details and explanations agents can read.
Receipts
Documents linked to transactions with OCR. Match before or after the bank line posts.

Model Context Protocol

Typed tools. Approval-gated writes.

Agents don't scrape your UI — they use scoped tools against structured data. Read freely, propose changes through a queue, and audit every action. Start at /llms.txt or the developer docs.

  • list_transactions, get_transaction, search_receipts
  • propose_categorization, propose_journal_entry
  • attach_note, link_receipt — all approval-gated
Open developer docs
MCP · Cursor

> Run month-end checklist for August

list_transactions — 142 rows
search_receipts — 8 unmatched
get_dashboard_summary — fetched
Month-end status: 8 receipts unmatched, 12 categorizations pending approval, 2 connectors stale. Proposals queued — nothing posted without your sign-off.
propose_categorizationawaiting approval
Financial connectors
All systems
Nordea
Synced 2m ago
Stripe
Synced 5m ago
Manual CSV
Imported today
Every imported record carries provider, external_id, and sync lineage.

Connector transparency

Know where every number came from.

Bank feeds, Stripe, CSV imports — every record shows provider, sync status, and external ID. Agents can answer lineage questions without guessing.

providerlast_sync_atsync_statusexternal_id
Explainability

No agent left guessing.

When an agent categorizes or matches a receipt, BennyBooks stores who suggested it, how confident they were, and why — so humans correct mistakes and future runs get smarter.

{
  "suggested_by": "agent",
  "confidence": 0.92,
  "reason": "Vendor matches SaaS pattern,
             amount consistent with prior months",
  "status": "pending_approval"
}