Encrypted token vault
Access and refresh tokens are sealed with AES-256-GCM, bound to the company realm, never logged and never sent to the AI.
QBO MCP · remote Model Context Protocol server
A production MCP server that lets Claude, ChatGPT, Cursor or your own agents read, write and analyse QuickBooks Online. 126 tools on one reusable service layer, multi-company OAuth 2.0, encrypted token vault, validated and audited writes. It is running against the QuickBooks sandbox right now.
Live console
Each card sends a JSON-RPC tools/call to /mcp with a demo API key that has read-write access to company hq and read-only access to branch. Responses come straight from the QuickBooks sandbox.
Architecture
Every tool is a small declaration on top of shared layers: authentication, company context, a QuickBooks client with retries and rate limiting, and accounting services. Adding a custom tool is one file.
Tool catalogue
Read tools are safe to call freely. Write tools validate first and support validate_only. Delete and void stay hidden until an administrator enables them for a key and company.
Multi-company
Each QuickBooks company connects through its own OAuth consent and keeps its own encrypted tokens. API keys are granted per company, read or read-write, so an agent can see the branch without being able to change it. Cross-company comparison only includes companies the key may read.
Write attempts outside a grant are refused and written to the audit log. Try it in the console: "Write to a read-only company".
Security and safety
Access and refresh tokens are sealed with AES-256-GCM, bound to the company realm, never logged and never sent to the AI.
Tokens refresh five minutes early, one refresh per company even under parallel calls, and the newest refresh token is always kept.
Debits equal credits, accounts exist and are active, A/R and A/P lines carry a name, no posting into a closed period. Problems stop the write.
Delete and void need a global switch, a per-company grant and a confirm field that repeats the record id.
Every write, dry run and denied attempt is stored with key, company, tool, record and outcome.
Per API key for callers, and 450 requests a minute with 8 in flight per company towards QuickBooks, under Intuit's limits.
Write calls carry an Intuit requestid, so a retried POST after a timeout cannot create a duplicate invoice.
Non-root, read-only container, secrets from the environment, HSTS, health and readiness probes.
Testing and validation
Connect a client
The demo key below has read-write access to the sandbox company hq and read-only access to branch.
Delivery plan