UI-first data model
Traditional accounting software assumes a bookkeeper logs in, tabs through fields, and hits save. Every schema decision, every validation, every default was written for a human at a screen. Agents don’t work that way.
Local-first, double-entry accounting. 15 MCP tools. SQLite backend. Immutable transactions. Audit log inside the same DB transaction as every write. Zero vendor lock-in. $0 to run forever.
How much cash do we have right now?
Used openledger integrationYou have $49,900 in cash right now, across:
(Accounts Receivable of $0 isn’t included since it’s money owed, not cash on hand.)
The problem
AI agents are a different kind of user. When they post a $50,000 transaction into QuickBooks or NetSuite, the systems on the other side of that API were never designed to produce the evidence an auditor will demand.
Traditional accounting software assumes a bookkeeper logs in, tabs through fields, and hits save. Every schema decision, every validation, every default was written for a human at a screen. Agents don’t work that way.
The more workflows you automate, the more agents you deploy, the faster your bill grows. Legacy accounting SaaS was priced on the assumption that fewer people would touch the books — the opposite of the agent era.
Your general ledger, chart of accounts, and full transaction history sit inside a vendor’s cloud, subject to their pricing, their SLAs, their subpoena posture. Data residency is a checkbox in a contract, not a property of the software.
The mutation happens in the ledger. The audit log happens somewhere else — Datadog, Splunk, a Postgres table nobody reads. When the write succeeds and the log fails, or vice versa, nobody knows. That’s not an audit trail. That’s a wall of log lines.
Built differently
Not an accounting app with an MCP wrapper. An evidence-first ledger with a clean interface for every client that needs it — agents, humans, and the audit team who reviews both.
No frontend ships with OpenLedger. The ledger and its MCP tools are the product. Build the UI you want, or skip it entirely and operate the books through Claude Desktop.
Transactions and entry lines are never updated or deleted. Corrections happen via contra posting — the original stays, tagged reversed. Your entire history is intact and legally defensible.
Every transaction has ≥ 2 entry lines. Debits equal credits — enforced in the write path, in one SQL transaction. Unbalanced entries are physically impossible in the schema.
SQLite-backed with zero cloud dependencies. Run it on your laptop, a $5 VPS, or inside your VPC. Nothing crosses a boundary you didn’t approve.
15 tools built for Claude Desktop, Claude Code, Cursor, and any MCP-compatible client. Ask the model in plain English — the ledger answers with real numbers from real books.
Every amount is stored as an integer minor unit. Zero floating-point rounding bugs. The category of “our reconciliation is off by a penny for reasons no one can trace” is architecturally eliminated.
Enterprise-legal-friendly. Commercial embedding is fine. No copyleft trap. No enterprise-tier gates. No per-seat surprises. You own it. You run it. You fork it.
The four invariants
Traditional ledgers rely on process to enforce correctness — checklists, review workflows, month-end reconciliations. OpenLedger enforces the invariants in the schema and the write path itself. If it can’t be true in the database, it can’t happen in the ledger.
Every transaction must have ≥ 2 entry lines. sum(debits) = sum(credits). Enforced inside a single database transaction — if the balance check fails, the whole insert rolls back. Unbalanced entries are physically impossible.
Every amount is stored as an integer cents value. There is no float anywhere in the amount math. The class of bug where 1.005 * 100 == 100.4999999 is architecturally eliminated. Your reconciliations will never be off by a penny for a reason nobody can trace.
Transactions and entry lines are never UPDATE-d or DELETE-d. Corrections happen via reverse_transaction() — a contra entry that posts alongside the original. Both stay in the ledger. Every historical state is reconstructable.
Every mutation writes an audit_log row inside the same SQL transaction as the mutation itself. Either both commit or both roll back. It is not possible for a write to succeed without its audit trail — this is the SOX-grade guarantee closed accounting SaaS won’t give you.
Most accounting systems treat the audit trail as a sidecar. The mutation happens in the ledger. The log happens somewhere else — Datadog, Splunk, a Postgres table. If the mutation succeeds and the log fails — or vice versa — nobody knows. When an auditor drills in, the story falls apart at the join between the two systems.
OpenLedger collapses that gap. The audit-log write lives inside the same SQL transaction as the mutation. The database itself enforces that either both happen or neither does. There is no state of the world where a write occurred but the trail didn’t.
That single property is the difference between passing an SSAE 18 audit and failing one. It is what your finance team’s audit partner is actually asking for when they ask “prove what the agent did.”
Read the full architecture →MCP-native
15 MCP tools, drop-in for Claude Desktop, Claude Code, Cursor, and any MCP-compatible client. No plugin config. No schema translation. Ask the model a question about your books; it calls the tools and reports back.
Get started
No Kubernetes. No paid tier. No enterprise sales call.
Clone the repo. Bootstrap the DB. Start the MCP server. Connect Claude. Total elapsed time from git clone to your first “how much cash do we have?” question: under ten minutes.
git clone github.com/Attri-Inc/open-ledger.gitCloning into 'open-ledger'...remote: Enumerating objects: 341, done.✓ Cloned in 2.1s cd open-ledger && python3 -m venv .venvpip install -r requirements.txtpython scripts/seed.py✓ Database initialized✓ Sample chart of accounts loaded python run_mcp.py✓ MCP server started (stdio)✓ 15 tools registered✓ Ledger ready at ./data/openledger.db # For Claude Code — one command:claude mcp add openledger -s user -- \ /abs/path/.venv/bin/python /abs/path/run_mcp.py✓ openledger MCP server registered Comparison
Not a fair fight on cost. A different fight on architecture. Traditional accounting SaaS was designed for a human clicking through a UI, priced per seat, hosted on the vendor’s servers. OpenLedger flips every one of those assumptions.
| Property | Traditional Accounting SaaS | OpenLedger |
|---|---|---|
| Pricing model | $30–$200 / user / month, per module | $0 forever, self-hosted |
| Primary user | Human bookkeepers using a UI | AI agents via MCP + SQL |
| MCP support | None (or via a paid third-party plugin) | 15 tools, native, day one |
| Data ownership | Vendor servers, their export terms | Your infrastructure, your SQL |
| Audit trail | Sidecar log, sometimes eventually consistent | Same DB transaction as the mutation. Atomic. |
| Amount storage | Float or Decimal (usually with quiet rounding) | Integer minor units. Zero float bugs. |
| Corrections | UPDATE / DELETE on posted entries | Contra posting. Nothing is ever mutated. |
| Deployment | Cloud-only, vendor-managed | Laptop, VPS, VPC, air-gapped — you pick. |
| License | Proprietary, per-seat, per-module | Apache 2.0. Fork, embed, ship. |
The Open Tooling family
Open Tooling is an open-source family of AI-native infrastructure — the same headless, evidence-first, agent-first architecture applied across the enterprise systems of record that AI agents are becoming the primary writer for.
Evidence-first CRM. 29 REST endpoints. 27 MCP tools. Artifacts → Observations → Briefs → Conflicts. In production with construction and AEC teams.
Agent audit + governance. Ingests Anthropic’s Compliance API and local Cowork sessions into one governed store. Deployed with regulated firms running Claude at scale.
Local-first double-entry ledger. 15 MCP tools. SQLite backend. Immutable, atomic-audit-log, integer-cents. The substrate every AI agent touching money should write to.
More modules in exploration: OpenDesk (incident management) · OpenComply (GRC + audit) · OpenAgent (agent identity). Same architecture. Different domain. All Apache 2.0.
Free to run. Open to fork. Ready for the finance workflows you’re building today.