MCP server for QuickBooks Online API integration
Valid MCP server (1 strong, 1 medium validity signals). 4 known CVEs in dependencies (0 critical, 2 high severity) Package registry verified. Imported from the Official MCP Registry.
3 files analyzed · 5 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Set these up before or after installing:
Environment variable: QBO_CLIENT_ID
Environment variable: QBO_CLIENT_SECRET
Environment variable: QBO_CREDENTIAL_MODE
Environment variable: QBO_SANDBOX
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-laf-rge-quickbooks-mcp": {
"env": {
"QBO_SANDBOX": "your-qbo-sandbox-here",
"QBO_CLIENT_ID": "your-qbo-client-id-here",
"QBO_CLIENT_SECRET": "your-qbo-client-secret-here",
"QBO_CREDENTIAL_MODE": "your-qbo-credential-mode-here"
},
"args": [
"-y",
"quickbooks-mcp"
],
"command": "npx"
}
}
}From the project's GitHub README.
An MCP server for QuickBooks Online — built for bookkeepers, CFOs, and accountants who use AI assistants in their daily workflow.
Ask your AI assistant to pull a P&L report, create a journal entry, or investigate an account balance — using plain language, not API payloads.
Intuit provides an official MCP server that's a solid starting point for developers exploring the QuickBooks API. This server takes a different approach: it's designed for financial professionals working in production books.
Intuit's server requires QuickBooks internal IDs for every reference — you need to look up a vendor's ID before creating a bill. This server resolves names automatically:
"Create a bill for PG&E, $450 to Utilities, dated 2025-01-15"
→ Vendor, account, and department names are resolved automatically
This is the only QuickBooks MCP server with report tools. Pull a P&L, Balance Sheet, or Trial Balance — broken down by month, department, or class — without leaving your AI conversation.
Every create and edit operation defaults to draft/preview mode. You see exactly what will be written to your books before committing. No accidental journal entries or misclassified expenses.
Instead of separate search tools for each entity type, a single SQL-like query tool works across all QuickBooks entities. AI assistants write SQL naturally, and QuickBooks validates it — no field whitelists to maintain.
"SELECT * FROM Purchase WHERE TxnDate >= '2025-01-01' AND TxnDate <= '2025-01-31'"
Store credentials locally for personal use, or in AWS Secrets Manager for shared environments. OAuth tokens refresh automatically and persist across sessions.
| Intuit Official | This Server | |
|---|---|---|
| Audience | Developers exploring the API | Bookkeepers, CFOs, accountants |
| Name resolution | Requires internal QB IDs | Resolves names automatically |
| Financial reports | None | P&L, Balance Sheet, Trial Balance |
| Write safety | Executes immediately | Draft preview by default |
| Query approach | Entity-specific search tools | SQL-like queries across all entities |
| Credentials | Local .env file | Local file or AWS Secrets Manager |
| Distribution | Clone from GitHub | npx quickbooks-mcp |
Choose the setup that fits your use case:
| Setup | Best For |
|---|---|
| NPM Install | Quick setup, using your own QuickBooks app |
| Local Checkout | Development, customization |
| AWS Mode | Shared/production environments |
The simplest way to get started. Credentials are stored locally on your machine.
https://developer.intuit.com/v2/OAuth2Playground/RedirectUrlAdd to your project's .mcp.json:
{
"mcpServers": {
"quickbooks": {
"command": "npx",
"args": ["-y", "quickbooks-mcp"]
}
}
}
Create ~/.quickbooks-mcp/credentials.json:
{
"client_id": "your_client_id",
"client_secret": "your_client_secret"
}
Once Claude Code is running, use the qbo_authenticate tool:
qbo_authenticate with no arguments to get an authorization URLcode and realmId from the redirect URLqbo_authenticate again with the authorization code and realm IDYour OAuth tokens will be saved and automatically refreshed.
For development or customization.
Follow the same steps as Option 1 above.
git clone https://github.com/laf-rge/quickbooks-mcp.git
cd quickbooks-mcp
npm install
npm run build
Add to your project's .mcp.json:
{
"mcpServers": {
"quickbooks": {
"command": "node",
"args": ["/path/to/quickbooks-mcp/dist/index.js"]
}
}
}
Create ~/.quickbooks-mcp/credentials.json with your client credentials (same as Option 1), then run qbo_authenticate to complete the OAuth flow.
For shared or production environments. Stores credentials in AWS Secrets Manager.
Create the secret in Secrets Manager:
aws secretsmanager create-secret \
--name prod/qbo \
--secret-string '{
"client_id": "your_client_id",
"client_secret": "your_client_secret",
"access_token": "your_access_token",
"refresh_token": "your_refresh_token",
"redirect_url": "https://developer.intuit.com/v2/OAuth2Playground/RedirectUrl"
}'
Store Company ID in SSM Parameter Store:
aws ssm put-parameter \
--name /prod/qbo/company_id \
--value "your_company_id" \
--type SecureString
Create a .env file in the quickbooks-mcp directory:
QBO_CREDENTIAL_MODE=aws
AWS_REGION=us-east-2
QBO_SECRET_NAME=prod/qbo
QBO_COMPANY_ID_PARAM=/prod/qbo/company_id
Note: Due to a known Claude Code bug, environment variables from
.mcp.jsonare not reliably passed to MCP servers. The.envfile workaround is required.
{
"mcpServers": {
"quickbooks": {
"command": "node",
"args": ["/path/to/quickbooks-mcp/dist/index.js"]
}
}
}
The server needs these AWS permissions:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:PutSecretValue"
],
"Resource": "arn:aws:secretsmanager:*:*:secret:prod/qbo*"
},
{
"Effect": "Allow",
"Action": ["ssm:GetParameter"],
"Resource": "arn:aws:ssm:*:*:parameter/prod/qbo/*"
}
]
}
By default, large responses (reports, query results) are written to /tmp files and the server returns a file path. This works well for Claude Code in terminal environments but breaks in Claude Desktop and plugin environments where the model cannot read from /tmp.
Set QBO_INLINE_OUTPUT=true to return all responses inline instead.
Option A — via .env file (recommended for local checkout):
Create a .env file in the quickbooks-mcp directory:
QBO_INLINE_OUTPUT=true
Option B — via .mcp.json env block (recommended for NPM install):
{
"mcpServers": {
"quickbooks": {
"command": "npx",
"args": ["-y", "quickbooks-mcp"],
"env": {
"QBO_CREDENTIAL_MODE": "local",
"QBO_CREDENTIAL_FILE": "~/.quickbooks-mcp/credentials.json",
"QBO_INLINE_OUTPUT": "true"
}
}
}
}
Note: Due to a known Claude Code bug, environment variables from
.mcp.jsonare not reliably passed to MCP servers in some configurations. If Option B doesn't work, use the.envfile workaround.
| Variable | Default | Description |
|---|---|---|
QBO_CREDENTIAL_MODE | local | Credential storage: local or aws |
QBO_CLIENT_ID | - | QuickBooks app Client ID (local mode) |
QBO_CLIENT_SECRET | - | QuickBooks app Client Secret (local mode) |
QBO_CREDENTIAL_FILE | ~/.quickbooks-mcp/credentials.json | Custom credential file path |
QBO_INLINE_OUTPUT | false | Return responses inline instead of writing to /tmp files. Required when using Claude Desktop or plugin environments where file-based output is not accessible to the model. |
QBO_SANDBOX | false | Use QuickBooks sandbox environment |
AWS_REGION | us-east-2 | AWS region (aws mode) |
QBO_SECRET_NAME | prod/qbo | Secrets Manager secret name (aws mode) |
QBO_COMPANY_ID_PARAM | /prod/qbo/company_id | SSM parameter path (aws mode) |
| Tool | Description |
|---|---|
| Setup | |
qbo_authenticate | Set up OAuth credentials (local mode only) |
get_company_info | Get connected company information |
| Query & Reports | |
query | Run SQL-like queries against any QuickBooks entity |
list_accounts | List chart of accounts with filtering |
get_profit_loss | Profit & Loss report (by month, department, class, etc.) |
get_balance_sheet | Balance Sheet report |
get_trial_balance | Trial Balance report |
query_account_transactions | All transactions affecting a specific account |
account_period_summary | Period summary for an account (opening/closing balance, debits, credits, count) |
| Journal Entries | |
create_journal_entry | Create a journal entry (validates debits = credits) |
get_journal_entry | Fetch a journal entry by ID |
edit_journal_entry | Modify an existing journal entry |
| Bills | |
create_bill | Create a vendor bill |
get_bill | Fetch a bill by ID |
edit_bill | Modify an existing bill |
| Expenses | |
create_expense | Create an expense (Cash, Check, or Credit Card) |
get_expense | Fetch an expense by ID |
edit_expense | Modify an existing expense |
| Sales Receipts | |
create_sales_receipt | Create a sales receipt with item lines |
get_sales_receipt | Fetch a sales receipt by ID |
edit_sales_receipt | Modify an existing sales receipt |
| Invoices | |
create_invoice | Create an invoice with item lines (customer required) |
get_invoice | Fetch an invoice by ID |
edit_invoice | Modify an existing invoice |
| Deposits | |
create_deposit | Create a bank deposit |
get_deposit | Fetch a deposit by ID |
edit_deposit | Modify an existing deposit |
| Vendor Credits | |
create_vendor_credit | Create a vendor credit |
get_vendor_credit | Fetch a vendor credit by ID |
edit_vendor_credit | Modify an existing vendor credit |
| Delete | |
delete_entity | Delete any transaction (journal entry, bill, invoice, deposit, sales receipt, expense, vendor credit) |
The server automatically refreshes OAuth tokens on each request and persists them back to your credential store (local file or AWS Secrets Manager).
npm run dev # Run in development mode
npm run build # Build
npm run typecheck # Type check
Run the qbo_authenticate tool to set up OAuth credentials (local mode only).
Authorization codes are only valid for a few minutes. Start the OAuth flow again.
qbo_authenticate.env file has QBO_CREDENTIAL_MODE=awsBe the first to review this server!
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace · Developer Tools
Scaffold, build, and publish TypeScript MCP servers to npm — conversationally
by mcp-marketplace · Finance
Free stock data and market news for any MCP-compatible AI assistant.
by Taylorwilsdon · Productivity
Control Gmail, Calendar, Docs, Sheets, Drive, and more from your AI