Skip to main content
The hosted firm workspace speaks MCP over HTTPS. Any client that supports remote MCP servers connects with one URL and a browser approval. There is nothing to install and no API key to copy; the endpoint uses OAuth 2.1 with dynamic client registration, so the client registers itself and sends you to a consent screen. Your assistant connects to Zeno, never to QuickBooks itself. Zeno holds the QuickBooks Online connection; the assistant reads the books and prepares work through Zeno’s tools, and nothing posts until a person approves the plan.
The console builds every link and command on this page for you, already carrying your own endpoint. A new workspace lands on Get started; after that it is This firm → AI clients. Nothing here has to be typed by hand.

Before you connect

  1. You need a Zeno account. Start one if you haven’t — 3 days free, no card.
  2. Sign in at app.zenofirm.com in the browser you normally use. The approval screen recognizes that session and approves as you, with nothing to retype.
  3. Connect at least one QuickBooks Online company, from Get started or the Clients page. The MCP token is scoped to your firm, so a client sees exactly the companies the firm has connected — connecting an AI client never grants Intuit access by itself.
Connecting the AI and connecting the books are independent, and either order works. A client connected before any company simply sees an empty roster until one arrives.

Claude

One connector on your Claude account, used from claude.ai, Claude Desktop, and mobile. Add Zeno to Claude
1

Confirm the name and URL

The link opens Add custom connector with Zeno Bookkeeper and https://api.zenofirm.com/mcp already in it. Check them, then Continue.By hand instead: Customize → Connectors → Add, and type the same two values.
2

Leave the detected settings alone

Claude has probed the endpoint and marked Always required under Authentication and No client ID — register one automatically under OAuth client. Both are right for Zeno. Add no Additional request headers. Choose Add.
3

Connect

The connector’s own page opens, saying You are not connected to Zeno Bookkeeper yet. Press Connect and approve on the Zeno screen.Adding is not connecting. Until you press it, the connector exposes no tools and never reaches AI clients here.
New chats can then use the Zeno tools; Claude asks before each write the first time.
On a Claude Team or Enterprise plan, an owner can add it for the organization. Each member still presses Connect and approves as themselves, and each approval is a separate grant this firm can revoke.

ChatGPT

Zeno has an approved ChatGPT plugin. Install it from the listing, then connect your Zeno account. Developer mode is not required for this route. Open Zeno in ChatGPT
As of October 27, 2026, version 1.0.1 with the display name Zeno Bookkeeper is submitted and in review. The approved listing may still display Zeno. Claude, Muse and QuickBooks App Store submissions are also in review.
1

Install the approved plugin

Open the listing above and install it. Availability depends on your ChatGPT account, region and workspace settings. If your workspace restricts plugins, ask its administrator to allow Zeno.
2

Connect your Zeno account

Choose Connect, sign in to Zeno, and authorize the connection. Staff can choose full access or view and answer only; invited viewers keep their assigned company and role restrictions. You need a Zeno workspace and a QuickBooks Online company connected through Intuit. Installing a plugin alone does not connect the books.
3

Start a new chat and choose the company

Enable the plugin in the conversation and ask which companies you can access. It should call qb_list_companies and return your authorized companies. Name the company before asking for reports or bookkeeping work.
4

Ask a question or prepare work

The submitted Zeno Bookkeeper update includes these starter prompts:
  • Show my profit and loss for last month and explain the biggest changes.
  • Which customer invoices are overdue, and how much is still owed?
  • Code last month’s card charges using our saved rules and give me one plan to approve.
For example: “For Ridgeline, code last month’s card charges using our saved rules and give me one plan to review. Leave out anything whose purpose is unclear.” Connect the card to Zeno’s own feed or import a statement first. QuickBooks Online’s public accounting API does not expose its For Review queue; Zeno supplies source activity separately.Read the proposed entries in the Zeno console or embedded plan page. Approve with your own click. ChatGPT cannot approve on your behalf.
Use this only when you deliberately need a custom connection. The approved listing above is the normal installation path.Turn on developer mode where your ChatGPT plan and workspace allow it. Open the custom plugin dialog, set the name to Zeno Bookkeeper, server URL to https://api.zenofirm.com/mcp, and authentication to OAuth. Leave advanced OAuth settings empty: the client registers itself. Connect and approve on the Zeno screen, then enable it in a new chat.A custom unreviewed connection may carry an elevated-risk badge even though a separate approved Zeno listing exists. Use the approved listing if that was your intended setup.

Muse

Meta’s Muse has no form for a server outside its own list: you ask for the connector in a chat and Muse builds it. It works on Muse’s free plan. zenofirm.com/muse has each screen.
1

Send the request

In a new Muse chat, send this as written:
Both halves matter. Given only the URL, Muse asks for the OAuth endpoints instead of reading them from the server. And Muse names the card after the connector’s id, not after the name it is told, so without the id the card and Settings say Zenofirm.
2

Connect

Muse answers with a Zeno Bookkeeper card after a minute or two. Press Connect, then Connect again on Muse’s custom connector notice, and approve on the Zeno screen.
3

Check it

Muse confirms in the chat. The connector is listed under Settings → Connectors → Connected.

Claude Code

Then, inside a session, run /mcp and choose Authenticate next to zenofirm to complete the browser approval. --scope user makes the server available in every project; drop it to add Zeno to the current directory only.

Codex

Add the server to ~/.codex/config.toml (on Windows, %USERPROFILE%\.codex\config.toml):
Then complete the browser approval:
Remote MCP servers need a recent Codex. If Codex reports it cannot use a url server, upgrade it, or on slightly older versions set experimental_use_rmcp_client = true at the top of config.toml.

Cursor

Add Zeno to Cursor Cursor opens with the server prefilled; install it, then use its Login action next to zenofirm to complete the browser approval. By hand, add the server to ~/.cursor/mcp.json:

VS Code

Add Zeno to VS Code VS Code asks you to confirm the server before adding it, and signs in through the browser the first time Copilot’s agent mode uses it. By hand, add the server to .vscode/mcp.json in the workspace, or to your user mcp.json:

Any other MCP client

Everything above is one server described in each client’s own dialect. Anything that speaks remote MCP connects on four facts:
  • URL — https://api.zenofirm.com/mcp
  • Transport — streamable HTTP
  • Auth — OAuth 2.1 with PKCE and dynamic client registration, so there is no client ID or secret to configure
  • Discovery — the client reads https://api.zenofirm.com/.well-known/oauth-authorization-server itself

What approval means

The consent screen authorizes the client for your firm, not for one company, and approval is always recorded as a named person. If you are signed in to Zeno in that browser, the screen asks you to approve as yourself. If not, it offers Sign in to approve: sign in the usual way — or with an emailed link, if you cannot use Google, Microsoft or Intuit here — and you come straight back to the screen to approve. OAuth Dynamic Client Registration Consent An install link only ever prefills a dialog. It carries no credential, grants nothing by itself, and cannot skip either the client’s own confirmation or Zeno’s approval screen — which is why a forwarded link is harmless until somebody approves it as themselves. Once a client has approved, it is listed under AI clients with the date it connected. That list is the honest answer to “is this set up?”: a client appears on it only when Zeno has actually issued it a token. Access is bearer-token based with refresh rotation. Approving a client does not change how a write happens: reads answer directly, and every write still travels plan, review, apply, reverse — the client proposes, a person approves in review, and only approved entries reach the ledger. The tool surface lists what the client can reach.

Disconnecting a client

This firm → AI clients lists every client holding access, with the date it connected and a Disconnect beside each one. Disconnecting revokes that client’s tokens immediately — the next tool call it makes is refused, and it cannot renew, so there is no fourteen-day tail while an access token ages out. Two things worth knowing:
  • It works by client name, and it covers the firm. A client that is reinstalled or added on a second machine registers itself again, so “Claude” can be several grants; Disconnect ends all of them for this firm. It touches nothing outside your firm.
  • Nothing is deleted. Plans, verdicts, runs, the work log, coding rules and client knowledge stay exactly as they are — a disconnected agent’s work remains part of the record. Reconnecting is the same install link.
The client keeps its own entry until you remove it there, and will report an authorization error when it tries to use it. To tidy that up:
  • Claude — Customize → Connectors, then remove Zeno or press Connect to authorize it again.
  • ChatGPT — Settings → Plugins, then delete the Zeno plugin.
  • Muse — Settings → Connectors → Connected, then Zeno Bookkeeper and Disconnect.
  • Claude Code — claude mcp remove zenofirm, or /mcp then Authenticate to connect again.
  • Codex — delete the [mcp_servers.zenofirm] block, or run codex mcp login zenofirm to reconnect.
  • Cursor and VS Code — remove the server from mcp.json, or use the client’s own login action to reconnect.
Disconnecting an AI client does not touch QuickBooks. Intuit access is separate, and is disconnected per company from the Clients page.
If you think a client was connected without your knowledge, disconnect it, and check who is on your team under Settings → Team: every connection is approved by somebody signed in to your firm.

When it doesn’t connect

  • The install link opens the client but nothing is prefilled. — The client is out of date, or it opened a signed-out session. Sign in to it first and click the link again; failing that, add the endpoint by hand from the same section above.
  • Claude lists Zeno but the tools are missing. — Open it in Customize → Connectors. If it says You are not connected to Zeno yet, press Connect and approve; adding and connecting are separate steps.
  • The approval screen says to sign in, and you are signed in. — You are signed in to a different browser or profile than the one the client opened. Press Sign in to approve in this one; you come back to the approval screen afterwards.
  • The tools don’t appear after connecting. — Restart the client or start a new conversation. Clients read their server list at startup; in Claude Code, run /mcp to check the server’s status. In ChatGPT, enable the plugin for that chat from the composer’s + menu — installing it is not the same as switching it on.
  • ChatGPT does not offer the plugin. Open the approved listing linked above while signed in. Check account, region and workspace restrictions with your administrator. Developer mode is only needed for a deliberate custom-server setup, not the approved listing.
  • ChatGPT loops on sign-in. Disconnect and reconnect the existing plugin. If using the advanced custom-server route, leave Advanced OAuth settings empty and use OAuth. Contact support if the approved listing still loops.
  • The client connects but sees no companies. — qb_list_companies is empty until the firm connects a QuickBooks company in the console’s Clients page.
  • Writes are refused with a trial message. — The trial has ended. Books, context, and history stay readable; subscribe in Billing to resume actions.
Still stuck? Contact support with the client name and the exact error text.