# QuickBooks Desktop (nuget · DevWithMJ.QuickBooks.Mcp)

Read QuickBooks Desktop data and, if enabled, make safe changes. Windows only.

- Trust score: 79/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- mcpb · `win-x64`: 10/100, [markdown](https://verifymcp.io/servers/devwithmj-quickbooks-mcp/quickbooks-mcp-win-x64.md), [page](https://verifymcp.io/servers/devwithmj-quickbooks-mcp/quickbooks-mcp-win-x64)
- mcpb · `win-x86`: 10/100, [markdown](https://verifymcp.io/servers/devwithmj-quickbooks-mcp/quickbooks-mcp-win-x86.md), [page](https://verifymcp.io/servers/devwithmj-quickbooks-mcp/quickbooks-mcp-win-x86)
- npm · `@devwithmj/quickbooks-mcp`: 50/100, [markdown](https://verifymcp.io/servers/devwithmj-quickbooks-mcp/devwithmj-quickbooks-mcp.md), [page](https://verifymcp.io/servers/devwithmj-quickbooks-mcp/devwithmj-quickbooks-mcp)
- nuget · `DevWithMJ.QuickBooks.Mcp`: 79/100 (this document), [markdown](https://verifymcp.io/servers/devwithmj-quickbooks-mcp/devwithmj-quickbooks-mcp-2.md), [page](https://verifymcp.io/servers/devwithmj-quickbooks-mcp/devwithmj-quickbooks-mcp-2)

## Channel facts

- Registry: `nuget`
- Package: `DevWithMJ.QuickBooks.Mcp`
- Version: `0.1.6`
- 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-11-05.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - No production dependencies, so there is no dependency health to assess.
- **Provenance & Transparency**: 48/100
  - Source repository is publicly reachable at the declared URL.
  - Build provenance not yet verified.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 17 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 5005 tokens (~116/item across 43 items; 41 tools + 2 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 60/100
  - Stability observed for 18 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.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "get_bills_to_pay" implies "pay" and declares readOnlyHint instead, contradicting what its own name says it does.
  - An AI judge read all 43 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the QuickBooks Desktop MCP server?

QuickBooks Desktop runs locally as a NuGet package, launched with dnx DevWithMJ.QuickBooks.Mcp@0.1.6 --yes. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add devwithmj-quickbooks-mcp -- dnx DevWithMJ.QuickBooks.Mcp@0.1.6 --yes
```

### Cursor

```json
{
  "mcpServers": {
    "devwithmj-quickbooks-mcp": {
      "command": "dnx",
      "args": [
        "DevWithMJ.QuickBooks.Mcp@0.1.6",
        "--yes"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "devwithmj-quickbooks-mcp": {
      "command": "dnx",
      "args": [
        "DevWithMJ.QuickBooks.Mcp@0.1.6",
        "--yes"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add devwithmj-quickbooks-mcp -- dnx DevWithMJ.QuickBooks.Mcp@0.1.6 --yes
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "devwithmj-quickbooks-mcp": {
      "type": "local",
      "command": [
        "dnx",
        "DevWithMJ.QuickBooks.Mcp@0.1.6",
        "--yes"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  devwithmj-quickbooks-mcp:
    command: "dnx"
    args: ["DevWithMJ.QuickBooks.Mcp@0.1.6", "--yes"]
```

### Netclaw

```json
{
  "McpServers": {
    "devwithmj-quickbooks-mcp": {
      "Transport": "stdio",
      "Command": "dnx",
      "Arguments": [
        "DevWithMJ.QuickBooks.Mcp@0.1.6",
        "--yes"
      ]
    }
  }
}
```

### Other

```json
{
  "mcpServers": {
    "devwithmj-quickbooks-mcp": {
      "command": "dnx",
      "args": [
        "DevWithMJ.QuickBooks.Mcp@0.1.6",
        "--yes"
      ]
    }
  }
}
```

## 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-11-04 (score 79, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-25 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-22 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-20 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (41)

### `search_employees` (~159 tokens)

Search employees by name. Payroll fields are included only if the QuickBooks user may see them.

Input parameters:

- `active` (string|null): active (default), inactive or all.
- `cursor` (string|null): next_cursor from the previous call.
- `fields` (array|null): Return only these fields.
- `fullNames` (array|null): Exact full names.
- `ids` (array|null): ListID values.
- `includeCustomFields` (boolean): Also return custom fields (DataExt).
- `maxResults` (integer|null): Page size (default 50, max 500).
- `modifiedFrom` (string|null): Modified on or after this date (yyyy-MM-dd).
- `nameContains` (string|null): Name contains this text.

### `search_sales_transactions` (~220 tokens)

Search sales transactions of one type: Invoice, SalesReceipt, CreditMemo, Estimate, SalesOrder, ReceivePayment, ARRefundCreditCard, Charge or Deposit.

Input parameters:

- `cursor` (string|null): next_cursor from the previous call.
- `customer` (string|null): Customer full name on the transaction.
- `dateFrom` (string|null): Transaction date on or after (yyyy-MM-dd).
- `dateTo` (string|null): Transaction date on or before (yyyy-MM-dd).
- `fields` (array|null): Return only these fields, e.g. TxnDate, RefNumber, BalanceRemaining.
- `ids` (array|null): TxnID values.
- `includeCustomFields` (boolean): Also return custom fields (DataExt).
- `includeLineItems` (boolean): Include line items.
- `includeLinkedTxns` (boolean): Include linked transactions, e.g. payments applied to an invoice.
- `maxResults` (integer|null): Page size (default 50, max 500).
- `type` (string, required): Transaction type.

### `open_in_quickbooks` (~109 tokens)

Open a record in the QuickBooks window for the user to look at; changes nothing, and QuickBooks must be open.

Input parameters:

- `id` (string, required): ListID (lists) or TxnID (transactions), from a search tool.
- `recordType` (string, required): Kind of record: Customer, Vendor, Employee, Account, Item (any item type), OtherName, or a transaction such as Invoice, Bill, Check, Estimate, SalesOrder, PurchaseOrder, JournalEntry.

### `get_profit_and_loss` (~173 tokens)

Get the profit and loss (income statement) for a period, optionally by month, class or job.

Input parameters:

- `basis` (string|null): Accrual or Cash; default is the company setting.
- `dateMacro` (string|null): Period macro like ThisMonth, LastMonth, ThisQuarterToDate, ThisYearToDate, LastYear. Or use from/to.
- `format` (string): json (default) or markdown table.
- `from` (string|null): Period start (yyyy-MM-dd).
- `layout` (string): Standard (default), ByClass, ByJob, PrevYearComp or YTDComp.
- `summarizeColumnsBy` (string|null): Column grouping such as Month, Quarter, Year or TotalOnly.
- `to` (string|null): Period end (yyyy-MM-dd).

### `search_setup_lists` (~153 tokens)

Search a setup list: Class, Currency, StandardTerms, DateDrivenTerms, PaymentMethod, ShipMethod, CustomerMsg, SalesTaxCode, SalesRep, Template, UnitOfMeasureSet, Vehicle, BillingRate, PriceLevel, WorkersCompCode, CustomerType, VendorType or JobType.

Input parameters:

- `active` (string|null): active (default), inactive or all.
- `cursor` (string|null): next_cursor from the previous call.
- `fields` (array|null): Return only these fields.
- `list` (string, required): Which list to search.
- `maxResults` (integer|null): Page size (default 50, max 500).
- `nameContains` (string|null): Name contains this text.

### `get_preferences` (~28 tokens)

Get the company preferences (accounting, sales tax, multi-currency, time tracking and more).

### `search_customers` (~171 tokens)

Search customers and jobs by name. Jobs are customers whose FullName is Customer:Job.

Input parameters:

- `active` (string|null): active (default), inactive or all.
- `cursor` (string|null): next_cursor from the previous call.
- `fields` (array|null): Return only these fields, e.g. Name, Balance.
- `fullNames` (array|null): Exact full names, like Smith:Kitchen Remodel.
- `ids` (array|null): ListID values.
- `includeCustomFields` (boolean): Also return custom fields (DataExt).
- `maxResults` (integer|null): Page size (default 50, max 500).
- `modifiedFrom` (string|null): Modified on or after this date (yyyy-MM-dd).
- `nameContains` (string|null): Name contains this text.

### `search_activities` (~172 tokens)

Search time entries (TimeTracking), vehicle mileage (VehicleMileage) or to-dos (ToDo).

Input parameters:

- `cursor` (string|null): next_cursor from the previous call.
- `dateFrom` (string|null): Date on or after (yyyy-MM-dd); not for ToDo.
- `dateTo` (string|null): Date on or before (yyyy-MM-dd); not for ToDo.
- `ids` (array|null): TxnID (time, mileage) or ListID (to-do) values.
- `maxResults` (integer|null): Page size (default 50, max 500).
- `name` (string|null): TimeTracking: employee, vendor or customer full name. ToDo: name contains this text.
- `type` (string, required): TimeTracking, VehicleMileage or ToDo.

### `get_account_tax_lines` (~31 tokens)

Get the income tax form lines that accounts can be assigned to, as set up in the company file.

### `get_company` (~25 tokens)

Get the company name, address and other details of the open QuickBooks company file.

### `search_names` (~108 tokens)

Search customers, vendors, employees and other names at once by name. Use when you do not know which list a name is in.

Input parameters:

- `active` (string|null): active (default), inactive or all.
- `cursor` (string|null): next_cursor from the previous call.
- `fields` (array|null): Return only these fields.
- `maxResults` (integer|null): Page size (default 50, max 500).
- `nameContains` (string|null): Name contains this text.

### `get_host_info` (~24 tokens)

Get the QuickBooks product, version and the qbXML versions it supports.

### `query_records` (~390 tokens)

Search any QuickBooks entity (Customer, Invoice, Bill...) with filters; returns records and a next_cursor.

Input parameters:

- `accountName` (string|null): Transactions only: account full name.
- `active` (string|null): Lists only: active (default), inactive or all.
- `cursor` (string|null): next_cursor from the previous call; repeat the same filters.
- `entity` (string, required): Entity name, e.g. Customer, Vendor, Employee, Account, Item, Class, Invoice, Bill, Check, Estimate, SalesOrder, PurchaseOrder, JournalEntry.
- `entityName` (string|null): Transactions only: customer, vendor or employee full name.
- `fields` (array|null): Return only these fields, e.g. Name, Balance. Saves tokens.
- `fullNames` (array|null): Exact full names (lists only), like Smith:Kitchen Remodel.
- `ids` (array|null): ListID values (lists) or TxnID values (transactions).
- `includeCustomFields` (boolean): Also return custom fields (DataExt).
- `includeLineItems` (boolean): Transactions only: include line items.
- `includeLinkedTxns` (boolean): Transactions only: include linked transactions.
- `maxResults` (integer|null): Page size (default 50, max 500).
- `modifiedFrom` (string|null): Last modified on or after this date (yyyy-MM-dd).
- `modifiedTo` (string|null): Last modified on or before this date (yyyy-MM-dd).
- `nameContains` (string|null): Lists only: name contains this text.
- `nameStartsWith` (string|null): Lists only: name starts with this text.
- `txnDateFrom` (string|null): Transactions only: transaction date on or after (yyyy-MM-dd).
- `txnDateTo` (string|null): Transactions only: transaction date on or before (yyyy-MM-dd).

### `get_payments_to_deposit` (~29 tokens)

Get payments and sales receipts received but not yet deposited (Undeposited Funds).

### `get_company_activity` (~35 tokens)

Get when the company file was last changed. Cheap to call, so use it to check whether anything changed before re-reading data.

### `get_deleted_records` (~105 tokens)

Get list items (customers, items...) or transactions deleted since a time. Voided transactions are not deletions; they show up as changes.

Input parameters:

- `kind` (string, required): list for list items, transaction for transactions.
- `since` (string, required): Deleted on or after this time, yyyy-MM-dd or yyyy-MM-ddTHH:mm:ss.
- `types` (array|null): Only these types, e.g. ["Customer"] or ["Invoice", "Bill"]; default all.

### `search_inventory_transactions` (~133 tokens)

Search inventory transactions of one type: InventoryAdjustment, TransferInventory or BuildAssembly.

Input parameters:

- `cursor` (string|null): next_cursor from the previous call.
- `dateFrom` (string|null): Transaction date on or after (yyyy-MM-dd).
- `dateTo` (string|null): Transaction date on or before (yyyy-MM-dd).
- `ids` (array|null): TxnID values.
- `includeLineItems` (boolean): Include line items.
- `maxResults` (integer|null): Page size (default 50, max 500).
- `type` (string, required): InventoryAdjustment, TransferInventory or BuildAssembly.

### `get_event_subscriptions` (~76 tokens)

Get the data event, UI event or UI extension subscriptions (or pending data event recovery info) registered by one subscriber application.

Input parameters:

- `kind` (string, required): DataEventSubscription, UIEventSubscription, UIExtensionSubscription or DataEventRecoveryInfo.
- `subscriberId` (string, required): The subscriber's GUID, as the application registered it.

### `get_contractor_tax_mappings` (~68 tokens)

Get which accounts feed which boxes of the 1099 forms.

Input parameters:

- `boxes` (array|null): Only these boxes, e.g. BOX1, BOX7.
- `formType` (string|null): Form type, e.g. 1099-MISC; default all.

### `get_aged_receivables` (~107 tokens)

Get the accounts receivable aging (who owes money and how overdue it is), as a summary or detail table.

Input parameters:

- `asOfDate` (string|null): Age as of this date (yyyy-MM-dd); default today.
- `customers` (array|null): Only these customers (full names).
- `detail` (boolean): true for invoice-level detail, false (default) for one row per customer.
- `format` (string): json (default) or markdown table.

### `get_barcodes` (~52 tokens)

Look up bar codes and the items they belong to. Give bar code values, or none to list the bar codes in the company file.

Input parameters:

- `values` (array|null): Bar code values to look up.

### `search_other_names` (~112 tokens)

Search other names (people paid who are not vendors or employees) or leads.

Input parameters:

- `active` (string|null): active (default), inactive or all.
- `cursor` (string|null): next_cursor from the previous call.
- `fields` (array|null): Return only these fields.
- `kind` (string): OtherName (default) or Lead.
- `maxResults` (integer|null): Page size (default 50, max 500).
- `nameContains` (string|null): Name contains this text.

### `search_inventory_sites` (~90 tokens)

Search inventory sites (warehouses and locations) by name. Needs QuickBooks Enterprise with advanced inventory.

Input parameters:

- `active` (string|null): active (default), inactive or all.
- `cursor` (string|null): next_cursor from the previous call.
- `maxResults` (integer|null): Page size (default 50, max 500).
- `nameContains` (string|null): Name contains this text.

### `get_custom_field_definitions` (~73 tokens)

List the custom fields (data extensions) defined in the company file and which kinds of record they apply to. To see their values, search with includeCustomFields=true.

Input parameters:

- `appliesTo` (string|null): Only fields assigned to this kind of record, e.g. Customer, Vendor, Item, Invoice.

### `search_vendors` (~145 tokens)

Search vendors by name.

Input parameters:

- `active` (string|null): active (default), inactive or all.
- `cursor` (string|null): next_cursor from the previous call.
- `fields` (array|null): Return only these fields.
- `fullNames` (array|null): Exact full names.
- `ids` (array|null): ListID values.
- `includeCustomFields` (boolean): Also return custom fields (DataExt).
- `maxResults` (integer|null): Page size (default 50, max 500).
- `modifiedFrom` (string|null): Modified on or after this date (yyyy-MM-dd).
- `nameContains` (string|null): Name contains this text.

### `search_purchase_transactions` (~247 tokens)

Search purchase and banking transactions of one type: Bill, BillPaymentCheck, BillPaymentCreditCard, PurchaseOrder, ItemReceipt, VendorCredit, Check, CreditCardCharge, CreditCardCredit, SalesTaxPaymentCheck, Transfer or JournalEntry.

Input parameters:

- `account` (string|null): Account full name on the transaction.
- `cursor` (string|null): next_cursor from the previous call.
- `dateFrom` (string|null): Transaction date on or after (yyyy-MM-dd).
- `dateTo` (string|null): Transaction date on or before (yyyy-MM-dd).
- `fields` (array|null): Return only these fields, e.g. TxnDate, RefNumber, AmountDue.
- `ids` (array|null): TxnID values.
- `includeCustomFields` (boolean): Also return custom fields (DataExt).
- `includeLineItems` (boolean): Include line items.
- `includeLinkedTxns` (boolean): Include linked transactions.
- `maxResults` (integer|null): Page size (default 50, max 500).
- `type` (string, required): Transaction type.
- `vendor` (string|null): Vendor (or payee) full name on the transaction.

### `get_aged_payables` (~107 tokens)

Get the accounts payable aging (what the company owes vendors and how overdue it is), as a summary or detail table.

Input parameters:

- `asOfDate` (string|null): Age as of this date (yyyy-MM-dd); default today.
- `detail` (boolean): true for bill-level detail, false (default) for one row per vendor.
- `format` (string): json (default) or markdown table.
- `vendors` (array|null): Only these vendors (full names).

### `get_sales_tax_returns` (~31 tokens)

Get the sales tax returns in the company file. Needs a company file with the sales tax return feature.

### `get_sales_tax_payable` (~46 tokens)

Get the sales tax payable to each tax agency as of a date.

Input parameters:

- `asOfDate` (string|null): As of this date (yyyy-MM-dd); default today.

### `search_transactions` (~129 tokens)

Search transactions of all types at once by date, name or account. Returns summaries; use the typed search tools for full detail.

Input parameters:

- `account` (string|null): Account full name.
- `cursor` (string|null): next_cursor from the previous call.
- `dateFrom` (string|null): Transaction date on or after (yyyy-MM-dd).
- `dateTo` (string|null): Transaction date on or before (yyyy-MM-dd).
- `maxResults` (integer|null): Page size (default 50, max 500).
- `name` (string|null): Customer, vendor or employee full name.

### `get_report` (~357 tokens)

Get any other QuickBooks report by type, e.g. SalesByCustomerSummary, CustomerBalanceSummary, VendorBalanceSummary, ExpenseByVendorSummary, SalesByItemDetail, OpenInvoices, TxnListByDate, JobProfitabilitySummary, TimeByName, ProfitAndLossBudgetVsActual.

Input parameters:

- `accounts` (array|null): Only these accounts (full names).
- `basis` (string|null): Accrual or Cash.
- `budgetCriterion` (string|null): Budget reports: Accounts, AccountsAndClasses or AccountsAndCustomers.
- `classes` (array|null): Only these classes (full names).
- `dateMacro` (string|null): Period macro like ThisMonth. Or use from/to.
- `fiscalYear` (integer|null): Budget reports (required for them): fiscal year, e.g. 2025.
- `format` (string): json (default) or markdown table.
- `from` (string|null): Period start (yyyy-MM-dd).
- `includeColumns` (array|null): Detail and custom reports: extra columns such as Amount, Date, Memo, Name, Num, Balance.
- `items` (array|null): Only these items (full names).
- `names` (array|null): Only these customers, vendors or employees (full names).
- `postingStatus` (string|null): Posting, NonPosting or Either.
- `reportType` (string, required): Report type name; an unknown name returns the full list.
- `summarizeColumnsBy` (string|null): Column grouping such as Month, Customer, Class or TotalOnly.
- `summarizeRowsBy` (string|null): Custom reports: row grouping such as Account, Customer, Item or Month.
- `to` (string|null): Period end (yyyy-MM-dd).

### `get_sales_tax_return_lines` (~52 tokens)

Get the lines of the sales tax return for the given tax agencies. Needs a company file with the sales tax return feature.

Input parameters:

- `taxAgencies` (array, required): Full names of the tax agency vendors.

### `get_balance_sheet` (~107 tokens)

Get the balance sheet as of the end of a period.

Input parameters:

- `basis` (string|null): Accrual or Cash.
- `dateMacro` (string|null): Period macro like ThisMonthToDate or LastYear. Or use to.
- `format` (string): json (default) or markdown table.
- `layout` (string): Standard (default), Summary, PrevYearComp or ByClass.
- `to` (string|null): Report as of this date (yyyy-MM-dd).

### `search_items` (~221 tokens)

Search items by name, optionally of one type; inventory items include quantities on hand.

Input parameters:

- `active` (string|null): active (default), inactive or all.
- `cursor` (string|null): next_cursor from the previous call.
- `fields` (array|null): Return only these fields, e.g. Name, QuantityOnHand.
- `fullNames` (array|null): Exact full names, like Parent:Child.
- `ids` (array|null): ListID values.
- `includeCustomFields` (boolean): Also return custom fields (DataExt).
- `itemType` (string|null): Limit to one type: Service, NonInventory, Inventory, InventoryAssembly, OtherCharge, Discount, SalesTax, SalesTaxGroup, Group, Subtotal, Payment or FixedAsset. Omit for all types.
- `maxResults` (integer|null): Page size (default 50, max 500).
- `modifiedFrom` (string|null): Modified on or after this date (yyyy-MM-dd).
- `nameContains` (string|null): Name contains this text.

### `get_general_ledger` (~120 tokens)

Get the general ledger (every posting by account) for a period. Can be large; filter by account.

Input parameters:

- `accounts` (array|null): Only these accounts (full names).
- `basis` (string|null): Accrual or Cash.
- `dateMacro` (string|null): Period macro like LastMonth. Or use from/to.
- `format` (string): json (default) or markdown table.
- `from` (string|null): Period start (yyyy-MM-dd).
- `to` (string|null): Period end (yyyy-MM-dd).

### `get_assemblies_can_build` (~64 tokens)

Get how many units of an inventory assembly can be built from the components on hand.

Input parameters:

- `asOfDate` (string|null): As of this date (yyyy-MM-dd); default today.
- `assembly` (string, required): Full name of the inventory assembly item.

### `get_bills_to_pay` (~83 tokens)

Get the unpaid bills for one vendor, with the credits available to apply.

Input parameters:

- `apAccount` (string|null): Only bills posted to this accounts payable account (full name).
- `dueDate` (string|null): Bills due on or before this date (yyyy-MM-dd).
- `vendor` (string, required): Full name of the vendor (or other payee).

### `get_trial_balance` (~93 tokens)

Get the trial balance for a period.

Input parameters:

- `basis` (string|null): Accrual or Cash.
- `dateMacro` (string|null): Period macro like ThisYearToDate. Or use from/to.
- `format` (string): json (default) or markdown table.
- `from` (string|null): Period start (yyyy-MM-dd).
- `to` (string|null): Period end (yyyy-MM-dd).

### `get_item_sites` (~132 tokens)

Get quantities on hand, on order and on sales orders per item and inventory site. Filter by item type, or by one item and/or one site.

Input parameters:

- `active` (string|null): active (default), inactive or all.
- `item` (string|null): Full name of one item.
- `itemType` (string|null): Limit to a kind of item: Inventory, Assembly, InventoryAndAssembly, NonInventory, Service, ...; not with item or site.
- `maxResults` (integer): Maximum rows (default 100).
- `site` (string|null): Full name of one inventory site.

### `get_changes_since` (~147 tokens)

Get records created or modified since a time, for several entity types at once, plus next_since to use on the next sync. Pair with get_deleted_records to catch removals.

Input parameters:

- `entities` (array, required): Entity types to check, at most 10, e.g. ["Customer", "Vendor", "Item", "Invoice", "Bill"].
- `maxResults` (integer|null): Records per entity (default 50, max 500). A next_cursor in an entity result means more; repeat with search tools and the cursor.
- `since` (string, required): Changes on or after this time, yyyy-MM-dd or yyyy-MM-ddTHH:mm:ss (company local time).

### `search_accounts` (~107 tokens)

Search the chart of accounts by name. Returns account type, number and balance.

Input parameters:

- `active` (string|null): active (default), inactive or all.
- `cursor` (string|null): next_cursor from the previous call.
- `fields` (array|null): Return only these fields, e.g. Name, AccountType, Balance.
- `maxResults` (integer|null): Page size (default 50, max 500).
- `nameContains` (string|null): Name contains this text.

## Diagnostics

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

## Score history

- 2026-11-05: 79
- 2026-11-04: 79
- 2026-11-03: 78
- 2026-11-02: 78
- 2026-11-01: 77
- 2026-10-31: 77
- 2026-10-30: 76
- 2026-10-29: 76
- 2026-10-28: 75
- 2026-10-27: 75
- 2026-10-26: 74
- 2026-10-25: 74
- 2026-10-24: 73
- 2026-10-23: 73
- 2026-10-22: 73
- 2026-10-21: 72
- 2026-10-20: 72
- 2026-10-19: 71
- 2026-10-18: 71

## Common questions

### What is the QuickBooks Desktop MCP server?

QuickBooks Desktop is an MCP server listed in the public MCP registry as io.github.devwithmj/quickbooks-mcp. Read QuickBooks Desktop data and, if enabled, make safe changes. Windows only. This page covers its NuGet package (DevWithMJ.QuickBooks.Mcp).

### Is the QuickBooks Desktop MCP server safe to use?

QuickBooks Desktop scores 79 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the QuickBooks Desktop MCP server expose?

QuickBooks Desktop exposes 41 tools: search_employees, search_sales_transactions, open_in_quickbooks, get_profit_and_loss, search_setup_lists, and 36 more. Their descriptions and schemas cost roughly 4,831 tokens of context every time the server is loaded.

### Is the QuickBooks Desktop MCP server still maintained?

QuickBooks Desktop is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the QuickBooks Desktop MCP server under?

QuickBooks Desktop declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- NuGet package: https://www.nuget.org/packages/DevWithMJ.QuickBooks.Mcp
- Socket report: https://socket.dev/nuget/package/DevWithMJ.QuickBooks.Mcp
- Repository: https://github.com/devwithmj/quickbooks-mcp
- Changelog RSS feed: https://verifymcp.io/servers/devwithmj-quickbooks-mcp/devwithmj-quickbooks-mcp-2.xml
- Changelog JSON feed: https://verifymcp.io/servers/devwithmj-quickbooks-mcp/devwithmj-quickbooks-mcp-2.json
- HTML version of this page: https://verifymcp.io/servers/devwithmj-quickbooks-mcp/devwithmj-quickbooks-mcp-2
