Install
$ agentstack add mcp-laf-rge-quickbooks-mcp ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
QuickBooks MCP Server
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.
Why This Server?
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.
Use natural language, not internal IDs
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
Financial reports built in
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.
Safe by default
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.
One query tool instead of dozens
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 **Note**: Due to a [known Claude Code bug](https://github.com/anthropics/claude-code/issues/1254), environment variables from `.mcp.json` are not reliably passed to MCP servers. The `.env` file workaround is required.
### 3. Add to Claude Code
```json
{
"mcpServers": {
"quickbooks": {
"command": "node",
"args": ["/path/to/quickbooks-mcp/dist/index.js"]
}
}
}
4. IAM Permissions
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/*"
}
]
}
Inline Output Mode
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.json are not reliably passed to MCP servers in some configurations. If Option B doesn't work, use the .env file workaround.
Environment Variables
| 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) |
Available Tools
| 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 | | Bill Payments | | | create_bill_payment | Pay bills and apply vendor credits (the QBO "check" / pay-bills flow) | | get_bill_payment | Fetch a bill payment by ID; flags unapplied amounts | | Delete | | | delete_entity | Delete any transaction (journal entry, bill, invoice, deposit, sales receipt, expense, vendor credit, bill payment) |
Token Refresh
The server automatically refreshes OAuth tokens on each request and persists them back to your credential store (local file or AWS Secrets Manager).
Development
npm run dev # Run in development mode
npm run build # Build
npm run typecheck # Type check
Troubleshooting
"QuickBooks credentials not configured"
Run the qbo_authenticate tool to set up OAuth credentials (local mode only).
"Authorization code expired"
Authorization codes are only valid for a few minutes. Start the OAuth flow again.
Token refresh fails
- Check that your refresh token hasn't expired (~100 days)
- Verify your client credentials are correct
- Try re-authenticating with
qbo_authenticate
AWS credential errors
- Ensure
.envfile hasQBO_CREDENTIAL_MODE=aws - Check your AWS credentials and permissions
- Verify the secret and parameter names match your configuration
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: laf-rge
- Source: laf-rge/quickbooks-mcp
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.