# io.github.laf-rge/quickbooks-mcp (npm · quickbooks-mcp)

MCP server for QuickBooks Online API integration

- Trust score: 64/100 (medium)
- Change this week: +40
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `quickbooks-mcp`: 64/100 (this document), [markdown](https://verifymcp.io/servers/laf-rge-quickbooks-mcp/quickbooks-mcp.md), [page](https://verifymcp.io/servers/laf-rge-quickbooks-mcp/quickbooks-mcp)

## Channel facts

- Registry: `npm`
- Package: `quickbooks-mcp`
- Version: `0.7.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 80/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known high-severity CVE affects uuid 8.3.2, reached via node-quickbooks > uuid. A fixed version is available.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (198 of 199), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 2 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 6564 tokens (~182/item across 36 items; 36 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add laf-rge-quickbooks-mcp -- npx -y quickbooks-mcp
```

### Codex

```bash
codex mcp add laf-rge-quickbooks-mcp -- npx -y quickbooks-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "laf-rge-quickbooks-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "quickbooks-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add laf-rge-quickbooks-mcp --command npx --arg -y --arg quickbooks-mcp
```

### Hermes

```yaml
mcp_servers:
  laf-rge-quickbooks-mcp:
    command: "npx"
    args: ["-y", "quickbooks-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "laf-rge-quickbooks-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "quickbooks-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 64, +44)

- [security regression] CVE-2026-41650 affects this package: high
- [security regression] CVE-2026-41907 affects this package: high
- [security regression] CVE-2026-27601 affects this package: high
- [security regression] Known CVEs: unverified → fail
- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [functional regression] Security disclosure: fail → unverified
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Stability: unverified → 0.20
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Schema quality: unverified → excellent
- [functional] Licence: MIT

### 2026-07-31 (score 20, +12)

- [security improvement] Malware scan: unverified → pass
- [security] First check of Stability: unverified
- [functional regression] Dependency health: partial → unverified
- [functional] First check of Capabilities: unverified
- [functional] Package version: 0.5.2 → 0.7.1
- [functional] Package version: 0.5.2 → 0.6.0
- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 8, −35)

- [security regression] Malware scan: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Dependency health: unverified → partial

### 2026-07-28 (score 43, +19)

- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: unverified
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: fail

### 2026-07-27 (score 24)

First indexed and scored.

## MCP tools (36)

### `qbo_authenticate` (~128 tokens)

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).

Input parameters:

- `authorization_code` (string): Authorization code from the QuickBooks OAuth callback URL (the 'code' parameter)
- `realm_id` (string): Company/realm ID from the callback URL (the 'realmId' parameter). Required when providing authorization_code.

### `get_company_info` (~18 tokens)

Get information about the connected QuickBooks company.

### `query` (~191 tokens)

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\''

Input parameters:

- `query` (string, required): The SQL-like query string, e.g. SELECT * FROM Bill WHERE TxnDate >= '2026-01-01'. Any queryable QBO entity works. Add MAXRESULTS N to limit results (default: 1000). Most transaction fields (Departmen…

### `list_accounts` (~116 tokens)

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.

Input parameters:

- `account_type` (string): Optional filter by account type (e.g., 'Bank', 'Expense', 'Income', 'Other Current Asset', 'Fixed Asset', 'Other Current Liability', 'Equity')
- `active_only` (boolean): If true, only return active accounts (default: true)

### `get_profit_loss` (~148 tokens)

Get a Profit and Loss (Income Statement) report. Can be broken down by department/location.

Input parameters:

- `accounting_method` (string): Accounting method: 'Accrual' (default) or 'Cash'
- `department` (string): Filter to a specific department/location ID
- `end_date` (string): End date in YYYY-MM-DD format
- `start_date` (string): Start date in YYYY-MM-DD format
- `summarize_by` (string): How to summarize columns: 'Total' (default), 'Month', 'Week', 'Days', 'Quarter', 'Year', 'Customers', 'Vendors', 'Classes', 'Departments', 'Employees', 'ProductsAndServices'

### `get_balance_sheet` (~136 tokens)

Get a Balance Sheet report. Can be broken down by department/location.

Input parameters:

- `accounting_method` (string): Accounting method: 'Accrual' (default) or 'Cash'
- `as_of_date` (string): Report as of this date in YYYY-MM-DD format (defaults to today)
- `department` (string): Filter to a specific department/location ID
- `summarize_by` (string): How to summarize columns: 'Total' (default), 'Month', 'Week', 'Days', 'Quarter', 'Year', 'Customers', 'Vendors', 'Classes', 'Departments', 'Employees', 'ProductsAndServices'

### `get_trial_balance` (~90 tokens)

Get a Trial Balance report. Useful for month-end close and reconciliation. Note: Trial Balance does not support department/location breakdown in QuickBooks Online.

Input parameters:

- `accounting_method` (string): Accounting method: 'Accrual' (default) or 'Cash'
- `end_date` (string): End date in YYYY-MM-DD format
- `start_date` (string): Start date in YYYY-MM-DD format

### `query_account_transactions` (~262 tokens)

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.

Input parameters:

- `account` (string, required): Account name, number (AcctNum), or ID. Examples: 'Tips', '2320', '116'
- `department` (string): Filter to specific department/location (optional)
- `end_date` (string): End date YYYY-MM-DD (default: today)
- `include_subaccounts` (boolean): Also match transactions posting to sub-accounts of this account (default: false). Needed to reconcile against account_period_summary, which always rolls sub-accounts into the parent.
- `limit` (number): Max transactions returned in detail. Totals always cover the whole period regardless of this.
- `offset` (number): Skip this many transactions (default: 0). Page through long results using the offset the previous call reports.
- `start_date` (string): Start date YYYY-MM-DD (default: start of year)

### `account_period_summary` (~132 tokens)

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.

Input parameters:

- `account` (string, required): Account name, number (AcctNum), or ID
- `accounting_method` (string): Accounting method: 'Accrual' (default) or 'Cash'
- `department` (string): Filter to specific department/location (optional)
- `end_date` (string): End date YYYY-MM-DD (default: today)
- `start_date` (string): Start date YYYY-MM-DD (default: start of year)

### `create_journal_entry` (~160 tokens)

Create a journal entry. Accepts account/department names (will lookup IDs automatically). Validates debits=credits before creating. Returns entry details and a link to view in QuickBooks.

Input parameters:

- `doc_number` (string): Journal number (shown as 'Journal no.' in QuickBooks). If not specified, QuickBooks will auto-assign the next number.
- `draft` (boolean): If true, validate and show preview without creating (default: true)
- `lines` (array, required): Array of line items. Provide account_name OR account_id (name preferred). Optionally provide department_name OR department_id.
- `memo` (string): Private memo for the journal entry
- `txn_date` (string, required): Transaction date in YYYY-MM-DD format

### `get_journal_entry` (~50 tokens)

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.

Input parameters:

- `id` (string, required): The journal entry ID

### `edit_journal_entry` (~163 tokens)

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. Validates debits=credits before saving.

Input parameters:

- `doc_number` (string): New journal number (optional)
- `draft` (boolean): If true, validate and show preview without saving (default: true)
- `id` (string, required): Journal entry ID to edit
- `lines` (array): Line modifications. Provide line_id to update existing line, omit to add new line.
- `memo` (string): New private memo (optional)
- `txn_date` (string): New transaction date in YYYY-MM-DD format (optional)

### `create_bill` (~294 tokens)

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.

Input parameters:

- `ap_account` (string): Accounts Payable account name or number (optional, defaults to standard AP)
- `department_id` (string): Header-level department/location ID (use if you already know it, otherwise use department_name)
- `department_name` (string): Header-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID.
- `doc_number` (string): Reference number for the bill (optional)
- `draft` (boolean): If true, validate and show preview without creating (default: true)
- `due_date` (string): Due date in YYYY-MM-DD format (optional)
- `lines` (array, required): Array of expense line items. Provide account_name OR account_id (name preferred).
- `memo` (string): Private memo for the bill
- `txn_date` (string, required): Transaction date in YYYY-MM-DD format
- `vendor_id` (string): Vendor ID (use if you already know it, otherwise use vendor_name)
- `vendor_name` (string): Vendor display name (e.g., 'Simplisafe', 'PG&E'). Will be looked up to get ID.

### `get_bill` (~51 tokens)

Fetch a single bill by ID with full details including SyncToken (needed for edits). Returns vendor, date, due date, amount, AP account, line details.

Input parameters:

- `id` (string, required): The bill ID

### `edit_bill` (~230 tokens)

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. Note: DepartmentRef is header-level only — lines do not support department.

Input parameters:

- `department_name` (string): Header-level department/location name (auto-resolved to ID)
- `doc_number` (string): Reference number for the bill (optional)
- `draft` (boolean): If true, validate and show preview without saving (default: true)
- `due_date` (string): New due date in YYYY-MM-DD format (optional)
- `id` (string, required): Bill ID to edit
- `lines` (array): Line modifications. Provide line_id to update existing, omit to add new.
- `memo` (string): New private memo (optional)
- `txn_date` (string): New transaction date in YYYY-MM-DD format (optional)
- `vendor_name` (string): New vendor display name (e.g., 'Simplisafe', 'PG&E'). Auto-resolved to ID.

### `get_expense` (~61 tokens)

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.

Input parameters:

- `id` (string, required): The expense (Purchase) ID

### `edit_expense` (~229 tokens)

Modify an existing expense (Purchase). Can update date, memo, payment account, and/or lines. Note: PaymentType (Cash/Check/CreditCard) cannot be changed after creation.

Input parameters:

- `department_name` (string): Header-level department/location name (auto-resolved to ID)
- `draft` (boolean): If true, validate and show preview without saving (default: true)
- `entity_id` (string): Payee/vendor ID (use if you already know it, otherwise use entity_name)
- `entity_name` (string): Payee/vendor display name (e.g., 'Cozzini Bros., Inc.'). Will be looked up to get ID.
- `id` (string, required): Expense (Purchase) ID to edit
- `lines` (array): Line modifications. Provide line_id to update existing, omit to add new.
- `memo` (string): New private memo (optional)
- `payment_account` (string): New payment account name/number (Bank or Credit Card account)
- `txn_date` (string): New transaction date in YYYY-MM-DD format (optional)

### `create_expense` (~331 tokens)

Create an expense (Purchase). Accepts account/department/vendor names (will lookup IDs automatically). Covers Cash, Check, and Credit Card payment types. Note: PaymentType cannot be changed after creation. DepartmentRef is header-level only. Returns expense details and a link to view in QuickBooks.

Input parameters:

- `department_id` (string): Header-level department/location ID (use if you already know it, otherwise use department_name)
- `department_name` (string): Header-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID.
- `doc_number` (string): Reference number for the expense (optional)
- `draft` (boolean): If true, validate and show preview without creating (default: true)
- `entity_id` (string): Payee/vendor ID (use if you already know it, otherwise use entity_name)
- `entity_name` (string): Payee/vendor display name (e.g., 'Simplisafe', 'PG&E'). Will be looked up to get ID.
- `lines` (array, required): Array of expense line items. Provide account_name OR account_id (name preferred).
- `memo` (string): Private memo for the expense
- `payment_account` (string, required): Bank or credit card account name or number (e.g., 'PLAT BUS CHECKING', '5752'). Will be looked up to get ID.
- `payment_type` (string, required): Payment method: 'Cash', 'Check', or 'CreditCard'. Cannot be changed after creation.
- `txn_date` (string, required): Transaction date in YYYY-MM-DD format

### `get_sales_receipt` (~58 tokens)

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.

Input parameters:

- `id` (string, required): The sales receipt ID

### `edit_sales_receipt` (~182 tokens)

Modify an existing sales receipt. Can update date, memo, 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.

Input parameters:

- `department_name` (string): Header-level department/location name (auto-resolved to ID)
- `deposit_to_account` (string): New deposit account name/number (Bank account)
- `draft` (boolean): If true, validate and show preview without saving (default: true)
- `id` (string, required): Sales receipt ID to edit
- `lines` (array): Line modifications. Provide line_id to update existing line, omit to add new line.
- `memo` (string): New private memo (optional)
- `txn_date` (string): New transaction date in YYYY-MM-DD format (optional)

### `create_sales_receipt` (~288 tokens)

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.

Input parameters:

- `customer_id` (string): Customer ID (use if you already know it, otherwise use customer_name)
- `customer_name` (string): Customer display name (e.g., 'Cash Sales'). Will be looked up to get ID.
- `department_id` (string): Header-level department/location ID (use if you already know it, otherwise use department_name)
- `department_name` (string): Header-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID.
- `deposit_to_account` (string): Bank account name or number to deposit into (e.g., 'Undeposited Funds', '1000'). Will be looked up to get ID.
- `doc_number` (string): Reference number for the sales receipt (optional)
- `draft` (boolean): If true, validate and show preview without creating (default: true)
- `lines` (array, required): Array of line items. Each line references an item (product/service). Provide item_name OR item_id (name preferred).
- `memo` (string): Private memo for the sales receipt
- `txn_date` (string, required): Transaction date in YYYY-MM-DD format

### `create_invoice` (~434 tokens)

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.

Input parameters:

- `allow_online_ach_payment` (boolean): Allow customer to pay this invoice via bank transfer (ACH) online. Must be explicitly set — company defaults do not apply via API.
- `allow_online_credit_card_payment` (boolean): Allow customer to pay this invoice with a credit card online. Must be explicitly set — company defaults do not apply via API.
- `bill_email` (string): Email address to send the invoice to. Required if you want QuickBooks to email the invoice.
- `customer_id` (string): Customer ID (use if you already know it, otherwise use customer_name)
- `customer_memo` (string): Customer-facing message visible on the invoice
- `customer_name` (string): Customer display name (e.g., 'Cash Sales'). Will be looked up to get ID.
- `department_id` (string): Header-level department/location ID (use if you already know it, otherwise use department_name)
- `department_name` (string): Header-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID.
- `doc_number` (string): Reference number for the invoice (optional)
- `draft` (boolean): If true, validate and show preview without creating (default: true)
- `due_date` (string): Due date in YYYY-MM-DD format (optional)
- `lines` (array, required): Array of line items. Each line references an item (product/service). Provide item_name OR item_id (name preferred).
- `memo` (string): Private memo for the invoice (internal, not visible to customer)
- `sales_term_ref` (string): Payment terms name (e.g., 'Net 30', 'Due on receipt'). Will be looked up to get ID.
- `txn_date` (string, required): Transaction date in YYYY-MM-DD format

### `get_invoice` (~56 tokens)

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.

Input parameters:

- `id` (string, required): The invoice ID

### `edit_invoice` (~306 tokens)

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.

Input parameters:

- `allow_online_ach_payment` (boolean): Allow customer to pay via bank transfer (ACH) online
- `allow_online_credit_card_payment` (boolean): Allow customer to pay with credit card online
- `bill_email` (string): New email address to send the invoice to
- `customer_memo` (string): New customer-facing message visible on the invoice
- `customer_name` (string): New customer display name (auto-resolved to ID)
- `department_name` (string): Header-level department/location name (auto-resolved to ID)
- `draft` (boolean): If true, validate and show preview without saving (default: true)
- `due_date` (string): New due date in YYYY-MM-DD format (optional)
- `id` (string, required): Invoice ID to edit
- `lines` (array): Line modifications. Provide line_id to update existing line, omit to add new line.
- `memo` (string): New private memo (optional)
- `sales_term_ref` (string): Payment terms name (e.g., 'Net 30'). Auto-resolved to ID.
- `txn_date` (string): New transaction date in YYYY-MM-DD format (optional)

### `create_deposit` (~242 tokens)

Create a bank deposit. Accepts account/department/vendor names (will lookup IDs automatically). Lines represent the sources of the deposit — amounts can be positive (income) or negative (fees, deductions). QuickBooks computes the total from line amounts. Returns deposit details and a link to view in QuickBooks.

Input parameters:

- `department_id` (string): Header-level department/location ID (use if you already know it, otherwise use department_name)
- `department_name` (string): Header-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID.
- `deposit_to_account` (string, required): Bank account name or number receiving the deposit (e.g., 'PLAT BUS CHECKING', '5752'). Will be looked up to get ID.
- `draft` (boolean): If true, validate and show preview without creating (default: true)
- `lines` (array, required): Array of deposit line items. Each line represents a source of the deposit. Amounts can be positive or negative.
- `memo` (string): Private memo for the deposit
- `txn_date` (string, required): Transaction date in YYYY-MM-DD format

### `get_deposit` (~53 tokens)

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.

Input parameters:

- `id` (string, required): The deposit ID

### `edit_deposit` (~313 tokens)

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).

Input parameters:

- `department_name` (string): Header-level department/location name (auto-resolved to ID)
- `deposit_to_account` (string): New deposit account name/number (Bank account)
- `draft` (boolean): If true, validate and show preview without saving (default: true)
- `expected_total` (number): Override total validation with this expected amount (for fixing corrupted deposits). Lines must sum to this value instead of current deposit total.
- `id` (string, required): Deposit ID to edit
- `lines` (array): IMPORTANT: You MUST include ALL existing lines with their line_ids. Lines without line_id are ADDED (not replaced). Lines not included are KEPT (not deleted). To 'delete' a line, set its amount to 0.…
- `memo` (string): New private memo (optional)
- `txn_date` (string): New transaction date in YYYY-MM-DD format (optional)

### `create_vendor_credit` (~258 tokens)

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.

Input parameters:

- `ap_account` (string): Accounts Payable account name or number (optional, defaults to standard AP)
- `department_id` (string): Header-level department/location ID (use if you already know it, otherwise use department_name)
- `department_name` (string): Header-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID.
- `doc_number` (string): Reference number for the vendor credit (optional)
- `draft` (boolean): If true, validate and show preview without creating (default: true)
- `lines` (array, required): Array of line items. Each line credits an expense account.
- `memo` (string): Private memo for the vendor credit
- `txn_date` (string, required): Transaction date in YYYY-MM-DD format
- `vendor_id` (string): Vendor ID (use if you already know it, otherwise use vendor_name)
- `vendor_name` (string): Vendor display name (e.g., 'Acme Corp'). Will be looked up to get ID.

### `get_vendor_credit` (~60 tokens)

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.

Input parameters:

- `id` (string, required): The vendor credit ID

### `edit_vendor_credit` (~192 tokens)

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. Note: DepartmentRef is header-level only — lines do not support department.

Input parameters:

- `doc_number` (string): New reference number (optional)
- `draft` (boolean): If true, validate and show preview without saving (default: true)
- `id` (string, required): Vendor Credit ID to edit
- `lines` (array): Line modifications. Provide line_id to update existing line, omit to add new line.
- `memo` (string): New private memo (optional)
- `txn_date` (string): New transaction date in YYYY-MM-DD format (optional)
- `vendor_name` (string): New vendor display name (auto-resolved to ID)

### `create_bill_payment` (~321 tokens)

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.

Input parameters:

- `bills` (array, required): Bills to pay. Each bill must belong to the vendor and have an open balance.
- `credits` (array): Vendor credits to apply against the bills (optional). Each credit must belong to the vendor and have remaining balance.
- `doc_number` (string): Reference number, e.g., check number or EFT reference (optional)
- `draft` (boolean): If true, validate and show preview without creating (default: true)
- `memo` (string): Private memo for the payment
- `payment_account` (string, required): Bank account name or number the payment is drawn from (e.g., 'PLAT BUS CHECKING', '5752'). Will be looked up to get ID.
- `txn_date` (string, required): Payment date in YYYY-MM-DD format (use the bank debit date for bank-feed matching)
- `vendor_id` (string): Vendor ID (use if you already know it, otherwise use vendor_name)
- `vendor_name` (string): Vendor display name (e.g., 'US Foods'). Will be looked up to get ID.

### `get_bill_payment` (~68 tokens)

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).

Input parameters:

- `id` (string, required): The bill payment ID

### `delete_entity` (~133 tokens)

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.

Input parameters:

- `confirm` (boolean): If true, execute the deletion. If false (default), show a preview of what will be deleted.
- `entity_type` (string, required): The type of entity to delete.
- `id` (string, required): The entity ID to delete.

### `create_customer` (~385 tokens)

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.

Input parameters:

- `bill_address` (object): Billing address (optional)
- `bill_with_parent` (boolean): If true, invoices for this sub-customer are billed to the parent (default: false)
- `company_name` (string): Company name (optional)
- `display_name` (string, required): Primary display name (must be unique in QuickBooks)
- `draft` (boolean): If true, validate and show preview without creating (default: true)
- `email` (string): Primary email address (optional)
- `family_name` (string): Last/family name (optional)
- `given_name` (string): First/given name (optional)
- `job` (boolean): Mark this customer as a job (default: false). Jobs track work for a parent customer.
- `middle_name` (string): Middle name (optional)
- `mobile` (string): Mobile phone number (optional)
- `notes` (string): Notes about the customer (optional)
- `parent_ref` (string): Parent customer name or ID to create a sub-customer or job. Will be looked up to get ID.
- `phone` (string): Primary phone number (optional)
- `preferred_delivery_method` (string): How invoices are delivered: Print, Email, or None
- `sales_term_ref` (string): Default payment terms name (e.g., 'Net 30'). Will be looked up to get ID.
- `ship_address` (object): Shipping address (optional, same shape as bill_address)
- `suffix` (string): Name suffix, e.g., 'Jr.' (optional)
- `taxable` (boolean): Whether the customer is taxable (optional)

### `get_customer` (~56 tokens)

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.

Input parameters:

- `id` (string, required): The customer ID

### `edit_customer` (~369 tokens)

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).

Input parameters:

- `active` (boolean): Set to false to deactivate customer (QuickBooks equivalent of delete)
- `bill_address` (object): New billing address
- `bill_with_parent` (boolean): Bill this sub-customer with its parent
- `company_name` (string): New company name
- `display_name` (string): New display name (must be unique in QuickBooks)
- `draft` (boolean): If true, validate and show preview without saving (default: true)
- `email` (string): New primary email address
- `family_name` (string): New last/family name
- `given_name` (string): New first/given name
- `id` (string, required): Customer ID to edit
- `job` (boolean): Mark as a job (tracks work for a parent customer)
- `middle_name` (string): New middle name
- `mobile` (string): New mobile phone number
- `notes` (string): New notes about the customer
- `parent_ref` (string): Parent customer name or ID (makes this a sub-customer). Auto-resolved to ID.
- `phone` (string): New primary phone number
- `preferred_delivery_method` (string): How invoices are delivered: Print, Email, or None
- `sales_term_ref` (string): Default payment terms name (e.g., 'Net 30'). Auto-resolved to ID.
- `ship_address` (object): New shipping address
- `suffix` (string): New name suffix
- `taxable` (boolean): Whether the customer is taxable

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/laf-rge-quickbooks-mcp/quickbooks-mcp#diagnostics

## Score history

- 2026-08-03: 64
- 2026-08-02: 64
- 2026-08-01: 20
- 2026-07-31: 20
- 2026-07-30: 8
- 2026-07-28: 43
- 2026-07-27: 24

## Links

- npm package: https://www.npmjs.com/package/quickbooks-mcp
- Socket report: https://socket.dev/npm/package/quickbooks-mcp
- Repository: https://github.com/laf-rge/quickbooks-mcp
- Changelog RSS feed: https://verifymcp.io/servers/laf-rge-quickbooks-mcp/quickbooks-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/laf-rge-quickbooks-mcp/quickbooks-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/laf-rge-quickbooks-mcp/quickbooks-mcp
