https://api.zenofirm.com/mcp — the same surface the console uses.
Connect an AI client once, and everything below is
available to it, scoped to your firm and to the companies your firm has
connected.
There are 111 of them, in the groups below.
The rules every tool follows
- One shape for every answer. A tool returns its result, or it returns a refusal with a plain-language reason and a hint naming what to do instead. A tool never guesses its way past a problem.
- Reads never pause. Reading your books, your context, your work log and your history stays available even when a subscription lapses. Only writes pause. Nobody loses sight of data their own ledger contains.
- Planning writes nothing.
qb_plan_batch,qb_plan_feed,qb_plan_cleanup,qb_import_iifandqb_import_tableall resolve, check and render. None of them touches QuickBooks. - Approval relays a human.
qb_approve_planrecords words a person actually said, under that person’s name; a verdict with no words, or one the agent tries to record as its own, is refused and nothing is saved. A clean plan is not an approval. An approval given in the console reaches the conversation throughqb_await_verdict, which holds until the verdict is recorded, so nobody has to go back and say “now post it”. - Apply refuses drift. If the plan or the exclusions changed after the verdict, applying is refused and a new plan is required.
- The ledger stays authoritative. Read models are labeled copies for search and speed; every write goes through QuickBooks, never around it.
- The immediate ones ask twice. The few tools that act on one document
without a plan — voiding, deleting, editing in place, changing company-wide
preferences, emailing a customer — require an explicit
confirm: truerather than acting on a first mention.
Companies and connection
Reading the books
Most reads answer from the read models, which is why they are fast and why they carry a sync time. Reads marked live go to QuickBooks every call.The batch loop
Everything that changes the ledger goes through these, in this order. The loop is described in full under plan, review, apply, reverse.The queue
The queue that turns arriving transactions into coded postings. Statements and live bank connections fill the same queue, and nothing downstream can tell the two apart — which is why a firm can start on downloaded files and add a connection later without re-learning anything. These tools are the only road for coding a line: the console’s Bank feeds page shows the result and takes the verdicts. Working the queue is described in full under the queue.qb_plan_feed produces an ordinary plan. It is approved with
qb_approve_plan and applied with qb_apply_batch like every other batch — a
feed that posted its own entries would be a second path to the ledger, and a
second path is a path where the gates are not.Live bank connections
Optional, and the only part of the workspace that reaches a third party for transaction data. Setting one up is a settings job, not a daily one.Expense claims
Turn a fed card account into a claim account and every charge on it grows a second lifecycle: draft, submitted by the cardholder, approved or sent back by a reviewer. Only an approved claim can reach a plan. See expense claims.Receipts
The linked document is the claim’s evidence: it rides into submission, it
stops the coverage report counting the charge, and after posting it is what
qb_attach_document puts on the QuickBooks transaction.
Importing a file
The division of labour that makes a large import cheap and safe: the agent works out the shape from fifteen rows, and the engine applies it to every row deterministically. Reading fifty thousand rows through a model burns the customer’s tokens to produce a plausible-but-wrong ledger. See importing and migrating.qb_import_iif returns warnings that matter: every block that did not
reconcile against its own total, every transaction kind QuickBooks Online has
no equivalent for, and every payment that will post unapplied. Read them
before approving, not after.Correcting what is already posted
QuickBooks voids invoices, sales receipts, payments, bill payments and
check-type purchases only. Everything else is refused by name with delete as
the named alternative, rather than letting QuickBooks answer Unsupported
Operation. Prefer voiding wherever it is allowed.
For a single document those three are the right tools; a batch of one makes an
approval table lie about what it is. For duplicate bills, a bad import, a
wrong-month batch, a mass recode (a
select with a recode rule) or emptying a file, qb_plan_cleanup journals
every document’s pre-image before anything happens, so qb_reverse_run puts it
back — restoring a void or an edit onto the same document, and re-creating a
deleted one under a new id, saying which it did.
Emptying an old file is the largest case, and it is still this loop: widen the
window with qb_sync_mirror (historyFrom the year the file was opened), then
qb_plan_cleanup with a select — every kind, or one at a time — which plans
the batch in dependency order (deposits, then the payments they hold, then the
invoices and bills those pay, then the rest), five hundred documents a plan.
Approve, apply, run the same selection again for the next batch. Keep
customers and vendors active until their documents are gone. There is no
bulk-delete app to add; the plan is the bulk tool, with an approval table and
one reversible run per batch.
Names and lists
QuickBooks Online has no delete for list names. Deactivation is the only undo, and it is not destructive: the row leaves every picker, every posted transaction keeps it, and it can be brought back. Names are created, changed and retired through a plan a person approves, like everything else that touches the ledger.QuickBooks refuses some of these itself: a vendor with open transactions
cannot be deactivated, a bundle cannot be created through the API, and one
name index is shared across customers, vendors, and employees, so a display
name can only be used once. Each tool says so rather than failing obscurely.
Company settings
Recurring templates
Sending and attachments
The firm inbox
Scheduled work
A recurring engagement can carry a playbook, and an agent on your own machine can work it on its cadence. Zeno cannot start that agent — it calls in — so the machine keeps a daily heartbeat and Zeno keeps the calendar. Binding a playbook and letting it run unattended are separate decisions, and a run still stops at a plan for a person to approve.Firm memory
Rules apply themselves. Knowledge and playbooks wait for a person to confirm them, and editing one returns it to draft.The run journal records what was posted in enough detail to reverse it. It
cannot say which document a batch came from, what was decided, or what is
still open — that is what the work log is for.