QBO-Multicompany-MCP
Provides access to multiple QuickBooks Online company files through a company registry, enabling tools to list companies, run reports, query data, and create, update, void, or delete entities while maintaining separate grants per company.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@QBO-Multicompany-MCPrun a profit and loss report for Acme Books"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
QBO Multicompany MCP
A self-hosted remote MCP server that gives an AI assistant access to many QuickBooks Online company files through a single connection.
Most QuickBooks MCP servers are single-tenant: the realm id and tokens come from environment variables, so one process serves one company file. If you keep the books for twenty clients, that is twenty processes and twenty connector entries. This one is built around a company registry — you authorize each QuickBooks company once, they all attach to your connector identity, and every tool call names the company it should act on.
list_companies → Acme Books (9130350000000001), Beta Holdings (…0002)
run_report company="Acme Books" report="ProfitAndLoss" params={start_date: "2026-01-01", …}
query company="Beta" query="SELECT * FROM Invoice WHERE Balance > '0'"You run it yourself, on your own Azure subscription, under your own Intuit app. Nobody else's infrastructure sits between the assistant and your books.
Is this for you?
It is a good fit if you keep books for several QuickBooks Online companies and want an assistant to work across them, and you are comfortable deploying a container and registering an app with Intuit.
It is not a fit for QuickBooks Desktop or Enterprise, which have no cloud
API and need an entirely different (Windows-resident, polling) bridge. And it
is more machinery than you need for a single company file — Intuit's own
quickbooks-online-mcp-server
is simpler for that case.
Related MCP server: qbo-mcp
What you will need
Thing | Why | Cost |
Intuit developer account | To create the app your company files are authorized through | Free |
Azure subscription | Container Apps, Key Vault, Table Storage, Log Analytics | A few USD/month at low volume |
A domain (optional) | A stable hostname, so connections survive infrastructure moves | Whatever your registrar charges |
An MCP client | Claude, or any client supporting remote MCP with OAuth | — |
Setup takes about an hour, most of it waiting on Azure and on Intuit's review for production credentials.
→ Full setup guide — Intuit app, Azure deployment, Cloudflare DNS, and connecting your assistant.
How it works
The connector is an OAuth 2.1 authorization server for the assistant and an OAuth 2.0 client of Intuit. The two sides never meet: the assistant never receives an Intuit token, and Intuit never sees an assistant's client.
Assistant ──OAuth 2.1──▶ Connector ──OAuth 2.0──▶ Intuit
──MCP/HTTP───▶ (Azure Container Apps) ──REST───────▶ QuickBooks Online
│
├─ Key Vault (wrapping key, app secrets)
└─ Table Storage (companies, clients, OAuth records)Intuit authorizes one company file per sign-in, so each file is added the
same way: run connect_company, follow the one-time link, pick the next
company. They accumulate under one connector identity because that identity
is derived from the Intuit OpenID sub — the same person signing in again
resolves to the same user.
Intuit refresh tokens are the sensitive value at rest, and are envelope encrypted: a per-record AES-256-GCM key, itself wrapped by an RSA key that never leaves Key Vault. Compromising the storage account alone yields nothing usable.
→ Architecture for the full design.
Tools
Tool | Access | Notes |
| read | Start here; returns the realm ids to pass as |
| — | Returns a one-time link for authorizing another file. |
| read | CompanyInfo for one file. |
| read | QuickBooks SQL. |
| read | Includes the |
| read | Financial statements and lists. |
| write | |
| write | Sparse by default. |
| write | Preferred over deleting — keeps the audit trail. |
| write | Permanent. |
| — | Revokes the grant at Intuit. Available even read-only, so access can always be cut. |
company accepts a realm id or a company name (case-insensitive). An
ambiguous name is an error listing the candidates rather than a guess —
silently picking the wrong client's books is the worst failure this connector
could have.
Deploy with ALLOW_WRITES=false and the write tools are not registered at
all.
Security posture
Enrollment is gated by an allow-list of Intuit accounts or email domains (
ALLOWED_INTUIT_EMAILS). Leave it empty and anyone who can reach your endpoint can enroll on your Intuit app's credentials and rate limits. The deploy script warns; set it.The container holds no credentials of its own — Key Vault and Storage are reached through an Azure managed identity, and storage shared-key access is disabled.
Authorization codes and refresh tokens are stored as hashes, are single-use, and rotate on every use.
Logs are structured JSON carrying realm ids and hashed user ids. Tokens, codes, and sealed values are never logged.
QuickBooks accounting records are not copied into any database here; requests pass through to Intuit and results are returned.
To report a vulnerability, see SECURITY.md.
Quick start (local)
Requires Node.js 20+ (see .nvmrc).
npm install
npm run build
npm test
cp .env.example .env # fill in at least QBO_CLIENT_ID and QBO_CLIENT_SECRET
npm startLocally the connector uses an in-memory store and a local encryption key —
state is lost on restart, and both are refused once STORAGE_ACCOUNT_NAME
and KEY_VAULT_KEY_URL are set. Intuit will not redirect to a localhost
callback unless you register it, and hosted assistants cannot reach
localhost, so use a tunnel and point PUBLIC_BASE_URL at it for a full round
trip.
Tests cover a full authorization-and-tool-call round trip over real HTTP against a scripted Intuit — no Azure resources or network access needed.
Documentation
Document | What is in it |
Intuit app, Azure deploy, Cloudflare DNS, connecting a client | |
Design: OAuth flows, identity, storage, encryption, limits | |
Logs, key rotation, revocation, troubleshooting, teardown | |
Every environment variable |
Contributing
Issues and pull requests are welcome — see CONTRIBUTING.md
and CODE_OF_CONDUCT.md.
License
MIT.
This project is not affiliated with, endorsed by, or supported by Intuit Inc. QuickBooks is a trademark of Intuit Inc. You are responsible for your own compliance with Intuit's developer terms, and for the accuracy of any books changed through this connector.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-quality-maintenanceAn MCP server that enables AI agents to interact with QuickBooks Online accounts to manage invoices, customers, payments, and financial reports. It provides 20 tools to automate accounting workflows and retrieve financial data through natural language interfaces.Last updated
- AlicenseAqualityDmaintenanceMCP server for QuickBooks Online providing read-only access to customers, vendors, invoices, bills, and chart of accounts. Enables natural language queries to your financial data through Claude or any MCP client.Last updated8MIT
- Alicense-qualityBmaintenanceA local MCP server that exposes QuickBooks Online data and actions as callable tools for AI assistants.Last updatedMIT
- Alicense-qualityAmaintenanceA local MCP server that exposes QuickBooks Online data and actions as callable tools for AI assistants, supporting entities like customers, invoices, bills, and financial reports.Last updated4MIT
Related MCP Connectors
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/LatinumLabs/QBO-Multicompany-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server