# quickbooks-mcp [Health: Active]

**Category:** 💰 Finance & Fintech  
**Repository:** https://github.com/laf-rge/quickbooks-mcp  
**GitHub Stars:** 14  
**npm Downloads (last month):** 1248  
**Views:** 2  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/quickbooks-mcp

## Description
MCP server for QuickBooks Online API integration

## Tools
Capabilities this server exposes over MCP:

- **qbo_authenticate** — Authenticate with QuickBooks using OAuth (local credential mode only). Step 1: Call with no arguments to get the authorization URL. Step 2: After authorizing in browser, call with authorization_code and realm_id from the callback URL. This tool only works when QBO_CREDENTIAL_MODE is 'local' (the default).
- **get_company_info** — Get information about the connected QuickBooks company.
- **query** — Execute a QuickBooks query using SQL-like syntax. Supports querying any entity type (Customer, Vendor, Invoice, Bill, Account, Item, Department, etc.). Results are written to a file to preserve context. Defaults to MAXRESULTS 1000 if not specified. Examples: 'SELECT * FROM Customer', 'SELECT * FROM SalesReceipt WHERE TxnDate >= \'2025-11-01\' AND TxnDate <= \'2025-11-30\''
- **list_accounts** — List all accounts in the chart of accounts. Returns AcctNum (the user-facing account number), Name, AccountType, AccountSubType, and CurrentBalance. Use AcctNum to reference accounts in other queries or operations.
- **get_profit_loss** — Get a Profit and Loss (Income Statement) report. Can be broken down by department/location.
- **get_balance_sheet** — Get a Balance Sheet report. Can be broken down by department/location.
- **get_report** — Run a QuickBooks report that has no dedicated tool: A/R and A/P aging, customer and vendor balances, transaction lists, general ledger, journal, sales by customer/item/class/department, cash flow, and detail variants. Answers what is outstanding and how old it is, which the entity query tools cannot — a report sees postings that carry no account reference in entity JSON. Profit and Loss, Balance Sheet and Trial Balance have their own tools.
- **get_trial_balance** — Get a Trial Balance report. Useful for month-end close and reconciliation. Note: Trial Balance does not support department/location breakdown in QuickBooks Online.
- **query_account_transactions** — Query all transactions affecting a specific account, across all 13 posting transaction types. Returns a consolidated list with date, type, amount (debit/credit), and description. Useful for investigating account balance discrepancies. Note: the A/R side of invoices, credit memos, and payments has no account reference in QBO's data model and cannot appear here — use account_period_summary for A/R totals.
- **account_period_summary** — Get a period summary for an account: opening balance, total debits/credits, closing balance, and transaction count. Uses the General Ledger report. Supports department filtering.
- **create_journal_entry** — Create a journal entry. Accepts account/department/entity names (will lookup IDs automatically). Validates debits=credits before creating. Lines may carry an entity (vendor, customer, or employee) — QuickBooks requires one on any line posting to Accounts Receivable or Accounts Payable. Returns entry details and a link to view in QuickBooks.
- **get_journal_entry** — Fetch a single journal entry by ID with full details including SyncToken (needed for edits). Returns formatted summary and writes full object to temp file.
- **edit_journal_entry** — Modify an existing journal entry. Can update date, memo, doc_number, and/or lines. For lines: provide line_id to update existing line, omit line_id to add new line, set delete=true to remove a line. A line_id preserves the line's existing entity unless entity_name/entity_id is given; pass entity_name: "" to clear it. Validates debits=credits before saving.
- **create_bill** — Create a vendor bill. Accepts vendor/account/department names (will lookup IDs automatically). Note: DepartmentRef is header-level only — for multi-department splits, create separate bills (one per department). Returns bill details and a link to view in QuickBooks.
- **get_bill** — Fetch a single bill by ID with full details including SyncToken (needed for edits). Returns vendor, date, due date, amount, AP account, line details.
- **edit_bill** — Modify an existing bill. Can update vendor, date, due date, memo, and/or lines. For lines: provide line_id to update existing line, omit to add new line, set delete=true to remove. A line_id preserves the line's existing customer unless customer_name/customer_id is given; pass customer_name: "" to clear it. Note: DepartmentRef is header-level only — lines do not support department.
- **get_expense** — Fetch a single expense (Purchase) by ID with full details including SyncToken. Covers Expenses, Checks, and Credit Card charges. Returns payment type, account, date, amount, line details.
- **edit_expense** — Modify an existing expense (Purchase). Can update date, memo, payment account, payee, and/or lines. The payee may be a vendor, customer, or employee — set entity_type to say which (defaults to Vendor). Note: PaymentType (Cash/Check/CreditCard) cannot be changed after creation.
- **create_expense** — Create an expense (Purchase). Accepts account/department/payee names (will lookup IDs automatically). Covers Cash, Check, and Credit Card payment types. The payee may be a vendor, customer, or employee — set entity_type to say which (defaults to Vendor). Note: PaymentType cannot be changed after creation. DepartmentRef is header-level only. Returns expense details and a link to view in QuickBooks.
- **get_sales_receipt** — Fetch a single sales receipt by ID with full details including SyncToken (needed for edits). Returns customer, date, deposit account, department, line details with items/qty/price.
- **edit_sales_receipt** — Modify an existing sales receipt. Can update date, memo, customer, deposit account, department, and/or lines. For lines: provide line_id to update existing line, omit line_id to add new line (requires item_name), set delete=true to remove.
- **create_sales_receipt** — Create a sales receipt. Accepts item/customer/department names (will lookup IDs automatically). Lines reference items (products/services) not accounts. Returns receipt details and a link to view in QuickBooks.
- **create_invoice** — Create an invoice. Accepts item/customer/department names (will lookup IDs automatically). Either customer_name or customer_id is REQUIRED — invoices must have a customer. Lines use SalesItemLineDetail (product/service references, not accounts). Returns invoice details and a link to view in QuickBooks.
- **get_invoice** — Fetch a single invoice by ID with full details including SyncToken (needed for edits). Returns customer, date, due date, balance, department, line details with items/qty/price.
- **edit_invoice** — Modify an existing invoice. Can update date, due date, memo, customer, department, terms, email, online payment settings, and/or lines. For lines: provide line_id to update existing line, omit line_id to add new line (requires item_name), set delete=true to remove.
- **create_deposit** — Create a bank deposit. Accepts account/department/entity names (will lookup IDs automatically). Lines represent the sources of the deposit — amounts can be positive (income) or negative (fees, deductions). Each line may name the vendor, customer, or employee it came from via entity_name/entity_type. QuickBooks computes the total from line amounts. Returns deposit details and a link to view in QuickBooks.
- **get_deposit** — Fetch a single deposit by ID with full details including SyncToken (needed for edits). Returns deposit account, date, memo, and line details showing source accounts and amounts.
- **edit_deposit** — Modify an existing deposit. Can update date, memo, deposit account, department, and/or lines. CRITICAL for line changes: The QB Deposit API does NOT replace lines - it merges them. Lines WITH line_id update existing lines. Lines WITHOUT line_id are ADDED as new. Lines NOT included are KEPT unchanged. To 'delete' a line, you must include ALL existing lines with their line_ids and set unwanted lines to amount: 0. Line amounts must sum to the original deposit total (use expected_total to override for corrupted deposits). Entity (vendor/customer/employee) can be set on any line, new or existing, via entity_name/entity_type; a line_id with no entity input keeps whatever entity the line already had.
- **create_vendor_credit** — Create a vendor credit. Accepts vendor/account/department names (will lookup IDs automatically). Lines represent credit amounts applied to expense accounts. Returns credit details and a link to view in QuickBooks.
- **get_vendor_credit** — Fetch a single vendor credit by ID with full details including SyncToken (needed for edits). Returns vendor, date, memo, ref number, AP account, and line details showing expense accounts and amounts.
- **edit_vendor_credit** — Modify an existing vendor credit. Can update vendor, date, memo, ref number, and/or lines. For lines: provide line_id to update existing line, omit line_id to add new line (requires amount and account_name), set delete=true to remove. A line_id preserves the line's existing customer unless customer_name/customer_id is given; pass customer_name: "" to clear it. Note: DepartmentRef is header-level only — lines do not support department.
- **create_bill_payment** — Create a bill payment (the QBO 'check' / 'pay bills' flow). Pays one or more existing bills and optionally applies vendor credits, clearing Accounts Payable. Use this to record vendor ACH/EFT debits or checks so the bank feed can match them — especially when a bank charge equals bills minus credit memos. Amounts default to each bill's open balance and each credit's remaining balance. Returns payment details and a link to view in QuickBooks.
- **create_transfer** — Move money between two of the company's own accounts (QuickBooks 'Transfer') — bank to bank, or a credit-card paydown. Use this rather than create_expense, which would book the outflow as an expense and never touch the receiving account, or create_journal_entry, which posts the right result but does not read as a transfer in the register or the bank-feed match screen. Defaults to draft: true for a preview.
- **receive_payment** — Record a customer payment against one or more open invoices (QuickBooks 'Receive Payment'), clearing Accounts Receivable. This is the A/R counterpart to create_bill_payment. Not a deposit — create_deposit banks money without settling an invoice — and not a sales receipt, which records a sale that was paid outright and never had an invoice. Defaults to draft: true for a preview.
- **get_bill_payment** — Fetch a single bill payment by ID with full details including SyncToken. Shows vendor, date, pay type, bank account, linked bills/credits with applied amounts, and flags any unapplied amount (payment total not matching net applied lines).
- **delete_entity** — Permanently delete a QuickBooks transaction. Supports journal entries, bills, invoices, deposits, sales receipts, expenses, vendor credits, bill payments, and attachments. Uses a two-step flow: first call previews what will be deleted, second call with confirm=true executes the deletion. Note: Customers cannot be deleted — use edit_customer with active=false to deactivate instead.
- **create_customer** — Create a customer or sub-customer. Accepts name parts, contact info, addresses, and hierarchy settings. Use parent_ref to create sub-customers or jobs. Returns customer details and a link to view in QuickBooks.
- **get_customer** — Fetch a single customer by ID with full details including SyncToken (needed for edits). Returns name, contact info, addresses, balance, hierarchy (parent/sub-customer), and active status.
- **edit_customer** — Modify an existing customer. Can update name, contact info, addresses, notes, taxable status, active status, hierarchy (parent/sub-customer), delivery method, and payment terms. Set active=false to deactivate (QuickBooks equivalent of delete).
- **create_vendor** — Create a vendor.
- **edit_vendor** — Sparse-update a vendor: only fields passed change; bill_address merges into the stored address. active=false deactivates. Read vendors with query (SELECT * FROM Vendor WHERE ...).

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "quickbooks-mcp": {
    "command": "npx",
    "args": ["-y","quickbooks-mcp"],
    "env": {
      "QBO_CREDENTIAL_MODE": "",
      "QBO_CLIENT_ID": "",
      "QBO_CLIENT_SECRET": "",
      "QBO_CREDENTIAL_FILE": "",
      "QBO_INLINE_OUTPUT": "",
      "QBO_SANDBOX": "",
      "AWS_REGION": "",
      "QBO_SECRET_NAME": ""
    }
  }
}
```

**Requires environment variables:** `QBO_CREDENTIAL_MODE`, `QBO_CLIENT_ID`, `QBO_CLIENT_SECRET`, `QBO_CREDENTIAL_FILE`, `QBO_INLINE_OUTPUT`, `QBO_SANDBOX`, `AWS_REGION`, `QBO_SECRET_NAME` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What quickbooks-mcp does

The quickbooks-mcp MCP server exposes QuickBooks Online operations to an MCP-compatible AI assistant. It is aimed at accounting workflows that require both read access and controlled changes, including financial reporting, transaction investigation, account analysis, and document creation.

Read operations include company details, chart-of-accounts listings, SQL-like queries across QuickBooks entities, and standard reports. The reporting tools cover Profit & Loss, Balance Sheet, Trial Balance, and 24 additional report types, including aging, customer and vendor balances, transaction listings, general ledger, journal, sales, cash flow, and detail reports.

Write tools cover journal entries, vendor bills, expenses, sales receipts, and invoices. Each of those record types also has retrieval and editing support where listed. References can use names such as vendors, accounts, customers, and departments rather than requiring every QuickBooks internal ID.

## How it works

The server communicates with QuickBooks Online through an OAuth application created in the Intuit developer portal. In local mode, client credentials and OAuth state are stored on the local machine; tokens are refreshed automatically. The `qbo_authenticate` tool starts and completes the local authorization flow.

For shared or production deployments, credentials can be read from AWS Secrets Manager, while the QuickBooks company ID is stored in AWS Systems Manager Parameter Store. The server can run from the published npm package or from a cloned and built checkout.

Large reports and query results are written to `/tmp` by default, with the resulting path returned to the client. Setting `QBO_INLINE_OUTPUT=true` returns response content directly, which is needed for environments that cannot read local temporary files.

## Setup and configuration

A QuickBooks Developer account, a QuickBooks app, and Node.js 18 or newer are prerequisites. The app needs the OAuth redirect URI specified by the project. For a local installation, install the package with `npx` or build the repository, create a credentials file under `~/.quickbooks-mcp/`, and call `qbo_authenticate` from the connected MCP client.

AWS mode requires a Secrets Manager secret containing the QuickBooks credentials and tokens, an SSM parameter containing the company ID, suitable IAM permissions, and environment settings selecting AWS credential storage. The server also supports the QuickBooks sandbox through `QBO_SANDBOX=true`.

## Tools and capabilities

The quickbooks-mcp MCP server provides tools for:

- Company information, chart-of-accounts filtering, and cross-entity SQL-like queries.
- Profit & Loss, Balance Sheet, Trial Balance, and other QuickBooks reports.
- Account transaction history and period summaries, including optional sub-account rollups.
- Journal entry creation, retrieval, and editing, with debit-credit validation.
- Bill, expense, sales receipt, and invoice creation, retrieval, and editing.
- Draft or preview behavior for create and edit operations before changes are committed.

The `get_trial_balance` tool can add a review pass for wrong-side balances and uncategorized or suspense balances. Account transaction coverage is limited to the posting entity types supported by the tool and is paginated.

## Limitations and notes

Local OAuth setup is supported through `qbo_authenticate`; AWS mode uses stored credentials instead. Temporary-file output can be unsuitable for Claude Desktop and plugin environments unless inline output is enabled.

The server requires QuickBooks Online and does not describe support for QuickBooks Desktop. AWS deployments additionally depend on the stated Secrets Manager, SSM, and IAM configuration. Review the documented entity coverage before relying on account transaction queries for a particular posting type.

_Full upstream README: https://allmcps.com/mcp/quickbooks-mcp/readme_

