Connects Claude directly to QuickBooks Online via the Intuit REST API with OAuth2 authentication. The free tier gives you read access to invoices, expenses, account balances, transactions, and customer data. Premium tier adds P&L, balance sheet, cash flow reports, AR/AP aging, and write operations like creating invoices, recording payments, and logging expenses. Tokens are encrypted at rest with auto-refresh, and rate limiting is built in. Setup requires creating a QuickBooks developer app, running an OAuth flow to get your realm ID, and dropping credentials into your Claude Desktop config. If you're doing bookkeeping through natural language instead of clicking through the QuickBooks UI, this handles the API plumbing.
Public tool metadata for what this MCP can expose to an agent.
QUICKBOOKS_CREATE_ACCOUNTCreate a new account in QuickBooks with the given parameters.4 paramsCreate a new account in QuickBooks with the given parameters.
namestringaccount_typestringBank · Other Current Asset · Fixed Asset · Other Asset · Accounts Receivable · Equityaccount_numberstringaccount_sub_typestringCashOnHand · Checking · MoneyMarket · RentsHeldInTrust · Savings · TrustAccountsQUICKBOOKS_CREATE_CUSTOMERCreate a new customer in QuickBooks with the given parameters.6 paramsCreate a new customer in QuickBooks with the given parameters.
titlestringsuffixstringgiven_namestringfamily_namestringmiddle_namestringdisplay_namestringQUICKBOOKS_CREATE_EMPLOYEECreate a new employee in QuickBooks.3 paramsCreate a new employee in QuickBooks.
given_namestringfamily_namestringprimary_addrobjectQUICKBOOKS_CREATE_INVOICETool to create a new invoice in QuickBooks. Use after confirming customer and item details.3 paramsTool to create a new invoice in QuickBooks. Use after confirming customer and item details.
linesarraycustomer_idstringminorversionintegerQUICKBOOKS_CREATE_VENDORCreate a new vendor in QuickBooks with the given details.6 paramsCreate a new vendor in QuickBooks with the given details.
titlestringsuffixstringgiven_namestringfamily_namestringmiddle_namestringdisplay_namestringQUICKBOOKS_CUSTOMER_BALANCE_DETAILGenerate a balance detail report for a customer in QuickBooks with the given customer ID.13 paramsGenerate a balance detail report for a customer in QuickBooks with the given customer ID.
arpaidstringAll · Paid · Unpaidcolumnsstringcustom1stringshipviastringsort_bystringterm_idsarraysort_orderstringascend · descendend_duedatestringreport_datestringaging_methodstringReport_Date · Currentcustomer_idsarraystart_duedatestringdepartment_idsarrayQUICKBOOKS_CUSTOMER_BALANCE_REPORTGenerate a balance report for a customer in QuickBooks with the given customer ID.8 paramsGenerate a balance report for a customer in QuickBooks with the given customer ID.
arpaidstringAll · Paid · Unpaiddate_macrostringToday · Yesterday · This Week · Last Week · This Week-to-date · Last Week-to-datesort_orderstringascend · descendreport_datestringcustomer_idsarraydepartment_idsarrayaccounting_methodstringCash · Accrualsummarize_column_bystringTotal · Month · Week · Days · Quarter · YearQUICKBOOKS_LIST_INVOICESTool to list invoices via QuickBooks Query endpoint. Use when retrieving invoices with optional pagination and custom fields.3 paramsTool to list invoices via QuickBooks Query endpoint. Use when retrieving invoices with optional pagination and custom fields.
fieldsarraymax_resultsintegerstart_positionintegerQUICKBOOKS_QUERY_ACCOUNTQuery an account in QuickBooks with the given parameters.1 paramsQuery an account in QuickBooks with the given parameters.
querystringQUICKBOOKS_READ_ACCOUNTRead an account in QuickBooks with the given account ID.1 paramsRead an account in QuickBooks with the given account ID.
account_idstringQUICKBOOKS_READ_CUSTOMERRead a customer in QuickBooks with the given customer ID.1 paramsRead a customer in QuickBooks with the given customer ID.
customer_idstringQUICKBOOKS_READ_EMPLOYEERead an employee's details in QuickBooks with the given employee ID.1 paramsRead an employee's details in QuickBooks with the given employee ID.
employee_idstringQUICKBOOKS_READ_INVOICETool to fetch a QuickBooks invoice by ID or the most recent if no ID provided. Use when needing full invoice details including metadata and sync token.2 paramsTool to fetch a QuickBooks invoice by ID or the most recent if no ID provided. Use when needing full invoice details including metadata and sync token.
invoice_idstringminorversionintegerQUICKBOOKS_READ_VENDORRead a vendor in QuickBooks with the given vendor ID.1 paramsRead a vendor in QuickBooks with the given vendor ID.
vendor_idstringQUICKBOOKS_UPDATE_FULL_INVOICETool to fully replace an Invoice. Use when you need to update all aspects of an existing invoice in a single operation.3 paramsTool to fully replace an Invoice. Use when you need to update all aspects of an existing invoice in a single operation.
invoiceobjectrequestidstringminorversionintegerQUICKBOOKS_UPDATE_SPARSE_INVOICETool to perform a sparse update of an existing invoice. Use when you need to update only specific invoice fields without overwriting other data.1 paramsTool to perform a sparse update of an existing invoice. Use when you need to update only specific invoice fields without overwriting other data.
invoiceobjectQUICKBOOKS_VENDOR_BALANCE_DETAILGenerate a balance detail report for a vendor in QuickBooks with the given vendor ID.12 paramsGenerate a balance detail report for a vendor in QuickBooks with the given vendor ID.
appaidstringAll · Paid · Unpaidsort_bystringterm_idsarraydate_macrostringToday · Yesterday · This Week · Last Week · This Week-to-date · Last Week-to-datesort_orderstringascend · descendvendor_idsarrayend_duedatestringreport_datestringduedate_macrostringToday · Yesterday · This Week · Last Week · This Week-to-date · Last Week-to-datestart_duedatestringdepartment_idsarrayaccounting_methodstringCash · AccrualQUICKBOOKS_VENDOR_BALANCE_REPORTGet the balance report of a vendor in QuickBooks with the given vendor ID.9 paramsGet the balance report of a vendor in QuickBooks with the given vendor ID.
qzurlstringappaidstringAll · Paid · Unpaiddate_macrostringToday · Yesterday · This Week · Last Week · This Week-to-date · Last Week-to-datesort_orderstringascend · descendvendor_idsarrayreport_datestringdepartment_idsarrayaccounting_methodstringCash · Accrualsummarize_column_bystringTotal · Month · Week · Days · Quarter · YearConnect Claude Desktop and Claude Code to QuickBooks Online for natural-language accounting. Ask questions about invoices, expenses, reports, and more using plain English.
An MCP (Model Context Protocol) server that gives Claude direct access to your QuickBooks Online data. Instead of logging into QuickBooks and clicking through reports, just ask Claude:
"Show me all overdue invoices sorted by amount" "What's our P&L this quarter?" "Create an invoice for Acme Corp for $2,500"
The server handles OAuth authentication, API calls, rate limiting, and data formatting.
pip install quickbooks-mcp
Or install from source:
git clone https://github.com/nyxtools/quickbooks-mcp-server.git
cd quickbooks-mcp-server
pip install -e .
http://localhost:8080/callback as a Redirect URIexport QBO_CLIENT_ID='your_client_id'
export QBO_CLIENT_SECRET='your_client_secret'
python scripts/setup_oauth.py
This opens your browser, authorizes with QuickBooks, and stores tokens locally (encrypted). Note the Realm ID it prints at the end.
export QBO_REALM_ID='your_realm_id'
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"quickbooks": {
"command": "quickbooks-mcp",
"env": {
"QBO_CLIENT_ID": "your_client_id",
"QBO_CLIENT_SECRET": "your_client_secret",
"QBO_REALM_ID": "your_realm_id"
}
}
}
}
Config file locations:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.jsonRestart Claude Desktop and try:
"What are my current bank account balances?"
| Tool | Description |
|---|---|
list_invoices | List and filter invoices by status, date, customer |
get_invoice_details | Full invoice details with line items and payment history |
get_overdue_invoices | All overdue invoices sorted by days past due |
list_expenses | List expenses with date, vendor, amount, and category filters |
get_top_expenses | Top expenses grouped by category or vendor for any period |
get_account_balances | Current balances for Bank, Credit Card, or all accounts |
get_account_transactions | Recent transactions for any account with date filters |
search_customers | Search customers by name or email with contact info |
get_customer_summary | Customer financial summary: invoiced, paid, outstanding |
| Tool | Description |
|---|---|
get_profit_and_loss | P&L report for any period with income/expense breakdown |
get_balance_sheet | Balance sheet as of any date (assets, liabilities, equity) |
get_cash_flow | Cash flow statement (operating, investing, financing) |
get_accounts_receivable_aging | AR aging by customer (current/30/60/90+ days) |
get_accounts_payable_aging | AP aging by vendor (current/30/60/90+ days) |
create_invoice | Create invoices with line items, due dates, and memos |
record_payment | Record payments against invoices with method and reference |
create_expense | Record expenses with vendor, amount, category, and date |
get_financial_health | Key ratios: current ratio, DSO, burn rate, runway |
compare_periods | Side-by-side period comparison with % changes |
Get a premium license at nyxtools.dev/quickbooks-mcp
Set it in your environment:
export LICENSE_KEY='your_license_key'
"Show me all invoices from January" "Which invoices are overdue? Show me the worst ones first" "Get the details for invoice #1042" "Show me open invoices for Acme Corp"
"What did we spend this month?" "Show me our top 10 expense categories this quarter" "How much have we spent at Amazon this year?"
"What are our bank balances?" "Show me the last 20 transactions in checking" "What's the balance on our company credit card?"
"Find the customer John Smith" "Give me a financial summary for customer 456" "Search for customers with outstanding balances"
"Show me the P&L for this quarter" "Pull up the balance sheet" "How's our cash flow this month?" "Show me the AR aging report" "Who are our slowest-paying customers?"
"Create an invoice for customer 123: Website Design $2,500, Hosting $150/month, due net-30" "Record a $1,000 check payment on invoice #1042" "Record a $250 expense to Office Depot for supplies, paid by credit card on March 15"
"How healthy are our finances? Show me key ratios" "Compare this month to last month" "How did this quarter compare to the same quarter last year?"
All configuration is via environment variables:
| Variable | Required | Default | Description |
|---|---|---|---|
QBO_CLIENT_ID | Yes | QuickBooks OAuth2 Client ID | |
QBO_CLIENT_SECRET | Yes | QuickBooks OAuth2 Client Secret | |
QBO_REALM_ID | Yes | QuickBooks Company/Realm ID | |
QBO_REDIRECT_URI | No | http://localhost:8080/callback | OAuth redirect URI |
LICENSE_KEY | No | Premium license key | |
QBO_SANDBOX | No | false | Use sandbox environment |
TOKEN_STORE_PATH | No | ~/.quickbooks-mcp/tokens.json | Token storage location |
LOG_LEVEL | No | INFO | Logging level |
# Clone and install with dev dependencies
git clone https://github.com/nyxtools/quickbooks-mcp-server.git
cd quickbooks-mcp-server
pip install -e ".[dev]"
# Run tests
pytest
# Run with coverage
pytest --cov=quickbooks_mcp
# Lint
ruff check src/ tests/
# Type check
mypy src/
quickbooks-mcp-server/
src/quickbooks_mcp/
auth/ # OAuth2 flow and encrypted token storage
client/ # QBO REST API client with rate limiting
tools/ # MCP tool implementations (19 tools)
utils/ # Money (Decimal), formatting, license validation
server.py # MCP server setup and tool registration
config.py # Environment-based configuration
scripts/
setup_oauth.py # Interactive OAuth setup
examples/ # Config examples and usage guide
tests/ # Pytest test suite
Run the OAuth setup:
python scripts/setup_oauth.py
Your refresh token may have expired. Re-run OAuth setup.
Verify your app has com.intuit.quickbooks.accounting scope.
The server handles rate limiting automatically. If you see this error, wait 60 seconds.
Some tools require a license key. Get one here or set LICENSE_KEY in your environment.
For testing without affecting real data:
export QBO_SANDBOX=true
Use your Development keys (not Production) from the Intuit developer dashboard.
MIT License. See LICENSE for details.
Copyright (c) 2026 NyxTools
io.github.shelvick/shopify-subscription-reconciliation
zleventer/google-ads-mcp
csoai-org/meok-stripe-acp-checkout-mcp
io.github.mharnett/google-ads
csoai-org/stripe-billing-mcp
co.pipeboard/google-ads-mcp