Connect a module
QuickBooks Online
ShopMCP uses Intuit OAuth 2.0 to connect one QuickBooks Online company at a time. Each approved company becomes its own connection and can be labelled, set primary, or disconnected.
1. Click Connect QuickBooks
Open Settings - Integrations and click Connect QuickBooks. You'll be redirected to Intuit's consent screen for the QuickBooks Online Accounting scope:
com.intuit.quickbooks.accounting— company info, customers, vendors, invoices, bills, payments, purchases, reports, chart of accounts, and related accounting entities.
2. Approve a company
After approval, Intuit redirects back with a realmId. ShopMCP exchanges the code, fetches QuickBooks CompanyInfo, and stores the OAuth tokens encrypted at rest.
Sandbox first
3. Ask accounting questions
- Show my QuickBooks company info.
- List customers with open balances.
- Find unpaid invoices over 30 days.
- Run a P&L for last quarter.
- Show aged receivables and aged payables.
- Show invoices and customers changed since yesterday.
4. Optional writes
Write tools only appear when the workspace Allow writestoggle is enabled and the global integration writes mode allows it. ShopMCP follows QuickBooks' accounting semantics: list records such as customers, vendors, items, accounts, classes, and employees are inactivated; supported transactions can be deleted or voided; invoices and other supported forms can be sent by email. Review every write intent before approving because QuickBooks changes affect live accounting records.
Purchase order payloads need valid accounts
APAccountRef and AccountBasedExpenseLineDetail.AccountRef. Item-based purchase order lines can also work, but only when the selected item is configured with the right purchasing/account context inside QuickBooks.json{ "VendorRef": { "value": "56", "name": "Bob's Burger Joint" }, "APAccountRef": { "value": "33", "name": "Accounts Payable (A/P)" }, "Line": [ { "DetailType": "AccountBasedExpenseLineDetail", "Amount": 1.23, "Description": "Purchase order line", "AccountBasedExpenseLineDetail": { "AccountRef": { "value": "69", "name": "Accounting" }, "TaxCodeRef": { "value": "NON" }, "BillableStatus": "NotBillable" } } ] }

