QuickBooks MCP server: what it does, what it can't, and how to set it up
Yes. Intuit publishes an official QuickBooks MCP server that lets Claude and other MCP clients read and write QuickBooks Online data over OAuth 2.0. It runs locally, covers 29 entity types and 11 reports, and leaves approvals, audit evidence and multi-step control to you.
Part of the finance integrations guide.
| Official server | Intuit's QuickBooks Online MCP server, an open-source repo on GitHub |
|---|---|
| Where it runs | Locally on your machine, as a stdio process |
| Authentication | OAuth 2.0 through your own app on the Intuit Developer Portal |
| Coverage | 29 entity types and 11 report tools |
| Writes | Create, update and delete are on by default; three QUICKBOOKS_DISABLE_* flags switch them off |
| Companies per configuration | One QuickBooks Online company (one QUICKBOOKS_REALM_ID) |
| Not included | An approval step, a run-level audit log, or rollback across steps |
Key points
- The official server is Intuit's own open-source repo. It runs as a local stdio process on your machine, not as a hosted service.
- It reads and writes by default. Create, update and delete tools are on unless you switch them off with three environment flags.
- Hosted alternatives exist from Zapier, Pipedream, Composio and CData, each with its own auth model and tool set.
- MCP connects a model to QuickBooks. It does not control what the model does. Approvals, run records and safe retries sit outside the protocol.
- For production books, keep the controls in the workflow, not in the prompt.
What QuickBooks MCP servers exist today?
Five options cover most QuickBooks MCP searches: Intuit's official server, plus hosted or packaged versions from Zapier, Pipedream, Composio and CData. They differ in where they run, how they authenticate, and whether they can write.
| Server | Who runs it | Auth | Read or write | Notes |
|---|---|---|---|---|
| Intuit QuickBooks Online MCP server | You, locally (stdio subprocess) | OAuth 2.0 through your own app on the Intuit Developer Portal | Read and write; writes can be switched off | Official Intuit repo. One QuickBooks Online company per configuration. |
| CData QuickBooks Online MCP server | You, locally | Through the CData JDBC driver, installed and licensed separately | Read-only | CData points users to its separate commercial MCP server or CData Connect AI for writes and remote access. |
| Zapier MCP for QuickBooks Online | Zapier, hosted | Your Zapier-connected QuickBooks account | Read and write | Exposes Zapier actions such as Create Invoice, Send Invoice, Void Invoice and Find Customer, plus triggers. |
| Pipedream MCP for QuickBooks | Pipedream, hosted | Pipedream Connect | Depends on the actions you enable | One static server URL for every client. |
| Composio QuickBooks toolkit | Composio, hosted | Managed OAuth app, or your own | Read and write | Lists 114 tools. Recommends an approval step for actions with side effects. |
Community builds are also listed in MCP directories. Check who maintains a server before you give it a production refresh token.
What can the Intuit QuickBooks MCP server actually do?
The Intuit server exposes QuickBooks Online records as MCP tools named {verb}_{entity}, plus 11 report tools. Read tools (get_, search_) are always on. Create, update and delete tools are on by default. Every tool below comes from the repo's README.
| Area | Tools (examples) | Notes |
|---|---|---|
| Customers and invoices | create_invoice, update_invoice, delete_invoice, search_invoices, get_invoice_pdf, create_customer, search_customers | delete_invoice deletes or voids. get_invoice_pdf returns the PDF inline or writes it to disk. |
| Payments | create_payment, update_payment, delete_payment, search_payments | delete_payment voids the payment. |
| Bills and vendors | create_bill, create_vendor, create_bill_payment, search_bills, search_vendors | Full create, read, update, delete and search. |
| Sales receipts, credit memos, refunds | create_sales_receipt, create_credit_memo, create_refund_receipt and their get, update, delete and search tools | Delete voids the record for these types. |
| Banking | create_deposit, create_transfer, search_deposits, search_transfers | Deposits and account transfers. |
| Purchasing | create_purchase_order, create_vendor_credit and their get, update, delete and search tools | |
| Time tracking | create_time_activity, search_time_activities | |
| Classification and settings | create_class, create_department, create_term, create_payment_method, get_preferences | No delete tools for these. |
| Tax | get_tax_code, search_tax_rates, search_tax_agencies | Read-only. |
| Company and attachments | get_company_info, update_company_info, create_attachable, search_attachables | |
| Reports | get_balance_sheet, get_profit_and_loss, get_cash_flow, get_trial_balance, get_general_ledger, get_aged_receivables, get_aged_receivables_detail, get_aged_payables, get_customer_balance, get_customer_sales, get_vendor_expenses | The 11 report tools. |
The README's entity table also lists Estimate, Employee, Account, Item, Journal Entry and Purchase as supported entities.
What this is good for: asking questions of your books in plain language. "Which customers are more than 60 days past due?" maps cleanly to get_aged_receivables. "Pull last quarter's P&L by month" maps to get_profit_and_loss. Read-only, against a sandbox or a scoped company, this is low-risk and useful.
What can't the QuickBooks MCP server do?
The QuickBooks MCP server gives a model access to QuickBooks. It does not decide who may approve a write, record why a write happened, or make a multi-step sequence safe. Those four gaps are where finance teams get hurt.
1. Writes are on or off, not scoped. The three flags (QUICKBOOKS_DISABLE_WRITE, QUICKBOOKS_DISABLE_UPDATE, QUICKBOOKS_DISABLE_DELETE) switch whole categories off for the whole server. The README describes no per-tool, per-amount or per-user limit. If create_bill_payment is on, it is on for any amount.
2. There is no approval step. The server runs a tool when the client calls it. The MCP specification says clients should show confirmation prompts and keep a human able to deny tool calls, but that is a client behavior and a recommendation, not a guarantee. A confirmation click from the person chatting is also not an approval under your delegation of authority. The approver and the requester are the same person.
3. There is no run-level audit trail. QuickBooks' own audit log records the change: the date, the user, the event, and changes made by connected third-party apps. It keeps events for two years and cannot be turned off. It does not record the instruction that led to the change, the tool call, or who approved it. The MCP specification says clients should log tool usage for audit purposes. The Intuit server's README describes no log of its own.
4. There is no notion of a run. Each tool is one operation on one entity or one report. The model selects and orders the calls at runtime. If an agent creates an invoice, applies a payment, and then fails on the third step, the README describes no rollback, so the first two writes stay in the books. Nothing in the README describes a duplicate check before a create_ call, so a retried step can post the same transaction twice.
Two smaller limits are worth knowing. One configuration connects to one QuickBooks Online company (one QUICKBOOKS_REALM_ID). And "delete" often means "void" for transactions such as invoices, payments, sales receipts and credit memos.
How do you set up the QuickBooks MCP server?
Setup takes an Intuit developer app, a one-time OAuth handshake, and an entry in your MCP client's config. Intuit does not offer per-user API keys, so even read-only access to your own company needs an app. Start in sandbox, read-only.
- Create an app on the Intuit Developer Portal. Copy the Client ID and Client Secret from Keys & Credentials (development keys for sandbox).
- Add a redirect URI. Sandbox accepts
http://localhost:8000/callback. Production rejects localhost and needs a public HTTPS callback for the first handshake. The README's common workaround is an ngrok tunnel, used only for that handshake. - Create or pick a sandbox company under the portal's Sandbox menu.
- Clone and build the server.
git clone https://github.com/intuit/quickbooks-online-mcp-server.git cd quickbooks-online-mcp-server npm install npm run build - Configure
.env. Copy.env.exampleto.envand setQUICKBOOKS_CLIENT_ID,QUICKBOOKS_CLIENT_SECRET,QUICKBOOKS_ENVIRONMENT=sandbox. Set all threeQUICKBOOKS_DISABLE_*flags totruefor a read-only first run. - Run
npm run auth. Your browser opens, you sign in to the sandbox company, and the refresh token and realm ID are saved to.env. Refresh tokens rotate, and the server writes each new one back. - Register the server with your MCP client. For Claude Code, add an entry under
mcpServerswith"command": "node", the path todist/index.js, and the same environment variables in itsenvblock. - Test with reads. Ask for an aged receivables report or a customer search. Confirm the numbers against QuickBooks before you trust them.
- Turn on writes deliberately. Flip one flag at a time, in sandbox first. Write down who may use a write-enabled client against production.
Three things trip people up. The redirect URI must match exactly (protocol, host, port, path). On a read-only filesystem, set QUICKBOOKS_TOKEN_STORE_PATH to an absolute, writable path in the host process environment, not in .env. The server keeps running without a browser until the 100-day refresh window lapses, then needs a new handshake.
Where does MCP leave a finance-controls gap, and how does Loopfour close it?
MCP is a connection layer, not a control layer. It answers "can the model reach QuickBooks?" It does not answer "should this write happen, who approved it, and what did the run do?" Auditors ask the second set of questions.
An AI agent decides what to do at runtime. Loopfour does only what was approved.
Loopfour, the deterministic finance workflow automation platform, connects to QuickBooks through its own integration and runs finance workflows as versioned, approved steps. AI handles the parts that need interpretation (reading an invoice PDF, classifying a line). Everything that touches the ledger runs as fixed, programmatic steps. Loopfour is a managed service: we build the workflow, run it, and maintain it.
| Control | Intuit MCP server on its own | Loopfour workflow on QuickBooks |
|---|---|---|
| Who decides the sequence | The model, at runtime | A versioned workflow, approved before it runs |
| Approval before a write | Optional client prompt to the person chatting | An approval block, for example interactive Slack approval, routed to the right approver |
| Retried steps | No duplicate check described | Rerun-safe invoice and journal-entry upserts keyed on the QuickBooks DocNumber (how idempotent invoice sync works) |
| Audit evidence | QuickBooks' audit log of the change | Every run is logged and versioned (governance), alongside QuickBooks' own log |
| Segregation of duties | Requester and approver can be the same person | Roles kept distinct in the workflow (segregation of duties in AP) |
A typical flow: vendor invoice arrives → line items extracted → approval in Slack → bill posted to QuickBooks → run record kept. The model never holds a write-enabled QuickBooks token. The workflow does, and it only runs the steps that were approved. Some QuickBooks writes need extra care even inside a workflow. Bills, for example, have no DocNumber upsert, so the workflow has to own idempotency (connecting QuickBooks vendor bills).
Loopfour does not ship an MCP server today. Its workflows run on QuickBooks, NetSuite, Stripe and the other integrations now, triggered by a schedule, an event, a person, or an API call. Native MCP support for Loopfour workflows is coming soon.
Go deeper
For how MCP fits a full finance stack (hosts, clients, servers, MCP vs API vs iPaaS, and where approvals belong), read how financial workflow MCP connects AI to ERP and accounting systems with approvals and an audit trail. For the NetSuite equivalent, see what the NetSuite MCP server can and cannot do.
Next step
Map the finance workflow with the most exposure and prove the automation path.
Bring the invoice, contract, payment reconciliation, or customer finance workflow you have to defend at audit. Loopfour can map the trigger, controls, integrations, and approval loop.
Checklist
QuickBooks MCP server setup checklist
- Create an app on the Intuit Developer Portal and copy the Client ID and Client Secret (development keys for sandbox).
- Add a redirect URI that matches exactly (protocol, host, port, path). Sandbox accepts
http://localhost:8000/callback. Production needs a public HTTPS callback. - Create or pick a sandbox company.
- Clone the repo, then run
npm installandnpm run build. - In
.env, set all threeQUICKBOOKS_DISABLE_*flags totruefor a read-only first run. - Run
npm run authto save the refresh token and realm ID. - Register the server under
mcpServersin your MCP client's config. - Test with reads, and confirm the numbers against QuickBooks.
- Turn on writes one flag at a time, in sandbox first. Write down who may use a write-enabled client against production.
- Plan a new OAuth handshake before the 100-day refresh window lapses.
Frequently Asked Questions
Sources
- Intuit, QuickBooks Online MCP Server, repository and README (opens in a new tab)
- Model Context Protocol specification, Tools (2025-06-18), user interaction model and security considerations (opens in a new tab)
- QuickBooks, Use the audit log in QuickBooks Online (opens in a new tab)
- CData, QuickBooks Online MCP server by CData (opens in a new tab)
- Zapier, QuickBooks Online MCP (opens in a new tab)
- Pipedream, QuickBooks MCP server (opens in a new tab)
- Composio, QuickBooks toolkit (opens in a new tab)
- Intuit Developer Portal (opens in a new tab)
Related
How-to
How do I connect QuickBooks vendor bills to a Loopfour workflow?
Loopfour's QuickBooks integration creates a bill with a single, unconditional API call — there's no upsert-by-document-number the way there is for invoices, so a blind retry after a timeout creates a second bill. Loopfour can also create the vendor first if it doesn't already exist; a bill doesn't require a pre-existing vendor record.
Read moreHow-to
How do I connect QuickBooks AR with idempotent invoice sync?
Loopfour's QuickBooks integration keys invoice sync off DocNumber, the same invoice number field QuickBooks itself exposes through Custom transaction numbers. Looking an invoice up by DocNumber before writing lets a rerun update the existing invoice instead of creating a duplicate — even if the workflow has lost track of QuickBooks' own internal invoice Id.
Read moreHow-to
How do I set up interactive Slack approval buttons for invoice approval?
Post the invoice as a message with an interactive button block, then respond to the click by opening a modal with the trigger_id Slack sends in the interaction payload — within three seconds, before any lookup or validation. Loopfour's Slack integration supports this through sendMessage (with blocks) and openModal, but the modal call has to happen first, not last.
Read moreHow-to
How do I maintain segregation of duties in an automated AP approval workflow?
Keep three roles distinct in the workflow itself: who can create or edit a vendor record, who can enter or submit a bill, and who can approve it for payment. Institutional guidance is explicit that authorizing a payment and the person who executes it shouldn't be the same individual — automation makes it easy to collapse these into one click, which is exactly the risk to design against.
Read moreIntegration
NetSuite MCP server: what it does and what finance still needs
Yes, there is an official NetSuite MCP server. Oracle provides it through the NetSuite AI Connector Service. With the MCP Standard Tools SuiteApp installed, an AI client such as Claude or ChatGPT can run read-only SuiteQL queries, reports and saved searches, and create or update records, limited to the signed-in user's NetSuite role.
Read moreIntegration
ERP MCP server: what exists and how it compares to APIs
An ERP MCP server lets an AI client such as Claude read, and if allowed write, ERP data through the Model Context Protocol. NetSuite, QuickBooks, Dynamics 365, Xero and Sage Intacct now offer one, and SAP data is reachable through AWS and Joule Studio. MCP connects a model to the ERP. Approvals and audit evidence still sit outside it.
Read moreDefinition
MCP for accounting: what accountants can do with it, and what it can't
MCP for accounting connects an AI assistant such as Claude or ChatGPT to your accounting system through a Model Context Protocol server. QuickBooks, Xero, NetSuite and Sage Intacct each have a vendor-published server. They are good at reading reports and ledgers. Writes, approvals, close sign-off and audit evidence still need controls outside the model.
Read more