AgenticBooks for AI agents
How an agent opens an account, connects financial sources, and reads clean double-entry books over MCP — and what you, the human, actually approve. The machine-readable version lives at /skills.md.
Quickstart: zero to connected books, three steps
Any agent that can make HTTP calls can open an account. It starts the handshake, you approve it from your inbox, and it collects its own scoped key — you never copy-paste a credential.
1 · The agent starts the signup
POST https://api.agenticbooks.ai/agent/signup
{ "email": "you@company.com",
"agent_name": "Nightly bookkeeping agent",
"idempotency_key": "<uuid the agent generates>" }
→ 200 { "token", "user_code", "expires_at", "retry_after_seconds" }2 · You approve — one email, one code
You get an email from approve@mail.agenticbooks.ai. The link opens an approval page where you sign in, type the short code your agent displayed (e.g. GHK-42P), and accept the Terms in the same click. That's your whole job — about fifteen seconds.
3 · The agent collects its key
GET https://api.agenticbooks.ai/agent/auth/{token} (poll every retry_after_seconds)
→ { "status": "ready", "key": "ab_..." } shown exactly once, never stored
# then, over MCP:
POST https://mcp.agenticbooks.ai/mcp
Authorization: Bearer ab_...
→ call get_onboarding_status → connect providers → read the booksFrom there the agent drives the onboarding loop: get_onboarding_status tells it what's connected and the one next step, it asks you for one credential at a time, and it verifies each connection with a real read.
What you're actually approving
The approval page exists so that nothing happens without you. Four things are true by construction:
| Guarantee | How it works |
|---|---|
| The request provably came from your agent | The page demands the short code your agent displayed to you. A phishing email can look identical — but its sender has no code. No code, no approval. If you weren't expecting the email, close it; the request expires on its own in ~15 minutes. |
| The key can read and classify — not move money | The agent's key carries mcp:read and mcp:approve scopes: it reads the books and resolves the review queue. Provider credentials it connects are read-only by design; there is no payment or transfer capability anywhere in the surface. |
| You can kill it any time | The key appears on your integrations page like any other and revokes with one click. Revocation is immediate. |
| Everything is on the record | The approval, the terms acceptance, every credential change, and every classification the agent makes land in an append-only audit trail. |
The key itself is minted the moment your agent collects it and exists in plaintext exactly once, in that response — AgenticBooks stores only a hash, the same custody rule as your provider credentials (vault-encrypted, never logged, never echoed).
What your agent will ask you for
Every provider credential is created by you, on that provider's own dashboard, always read-only. The agent asks for exactly one thing at a time and connects it — you never paste anything into a chat that stores it.
| Provider | Your part |
|---|---|
| Mercury | Your agent asks you for a read-only API token (Mercury dashboard → Settings → API Tokens) and connects it itself via the connect_mercury tool. |
| Meow | A read-only API key (Meow dashboard → API keys) — connected by the agent via connect_meow. Read keys need no IP allowlist. |
| Stripe | One click by you: Integrations → Stripe → Connect (Stripe OAuth) at app.agenticbooks.ai. Your agent verifies the connection afterwards. |
| QuickBooks | Optional ledger sync. One click: Integrations → QuickBooks → Connect (Intuit OAuth). AgenticBooks works fully without a ledger. |
| RevenueCat | On the integrations page: add the shown webhook URL in RevenueCat (Project Settings → Integrations → Webhooks), set an Authorization secret there, and paste that secret back. |
| Revolut Business | A bank-side Open Banking consent — read-only, official rails. Integrations → Revolut → Connect. |
Connecting both Stripe and RevenueCat is supported — the platform automatically suppresses the RevenueCat-side duplicate that web billing would otherwise create. One ordering note: if RevenueCat was connected first, importing Stripe history can re-book that overlap window — the agent runbook says to check with you before running that import. If a step ever carries a warning, your agent relays it verbatim before proceeding.
The receipts inbox
Every organization gets a permanent forwarding address of the form {org}@receipts.agenticbooks.ai. Receipts and invoices forwarded there are stored durably, AI-extracted (vendor, amount, date, invoice number), and matched against bank transactions. An unambiguous same-currency amount-and-date match attaches automatically only when the sender also passes DKIM and has previously confirmed evidence in the org; anything else — multiple candidates, a cross-currency amount, a failed sender check, a first-time sender — is held as an open proposal instead of guessed. Documents that arrive before their bank transaction re-match automatically once it lands.
Agents work the held pool with list_documents (open proposals carry their candidate transactions) and resolve them with attach_document. Attaching is evidence-only: it never creates or changes a booking.
The MCP tool surface
Endpoint: https://mcp.agenticbooks.ai/mcp (streamable HTTP; bearer key or the OAuth connector). Every tool is bound to the key's organization — no org IDs to manage, and a key for one org can never read another.
Read the books
| Tool | What it returns |
|---|---|
get_financial_summary | One-call snapshot: current-month P&L, balances across providers, review-queue count, ledger-sync health. |
get_books_status | The state of the books as one priority-laddered checklist — connections, review queue, documents, close, billing — plus the single next step. |
get_pnl_report | Income statement for any period. |
get_account_balance / get_bank_balances | Balances per provider and per bank account. |
get_transaction | One transaction end to end: source event, classification, journal lines, FX, attached documents, audit history. |
get_unreviewed_events / get_pending_by_counterparty | The classification review queue, raw and grouped. |
list_documents | Captured receipts and invoices with their match status — including open match proposals awaiting confirmation. |
list_chart_accounts / list_counterparty_rules / list_suggested_transfers / get_audit_log | Chart of accounts, learned classification rules, transfer-match suggestions, and the append-only audit trail. |
get_billing_status | The org’s billing state. Never blocked — an agent can always ask it why other tools are failing. |
Onboard & operate
| Tool | What it does |
|---|---|
get_onboarding_status | The onboarding loop driver: connected / pending / degraded per provider, plus the single next step. |
connect_mercury / connect_meow (+ disconnects) | Validate-then-store a pasted read-only credential; an invalid credential stores nothing. Matching disconnect tools disable a connection. |
approve_classification / reclassify_entry | Resolve the review queue — every action lands in the audit trail. |
create/update/delete_counterparty_rule | Teach recurring classifications. |
confirm_transfer / reject_transfer | Confirm or reject suggested inter-account transfer matches. |
attach_document | Attach a captured receipt to its transaction as evidence — confirm an ambiguous match or resolve a held document. Evidence only; it never creates or changes a booking. |
add_chart_account / rename_chart_account / list_chart_accounts / set_chart_account_active | Chart-of-accounts maintenance. |
close_period / reimport_historical | Month-end close with FX revaluation; historical re-import. |
The full runbook — written for the agent itself — is one URL. Hand it over and ask for your books.