QuickBooks Online MCP
MCP server for QuickBooks Online. Manage customers, invoices, expenses, payments, and run financial reports.
Installation
Run the MCP server with npx:
npx @wyre-technology/qbo-mcp Or install the package:
npm install @wyre-technology/qbo-mcp Claude Desktop Configuration
Add to your claude_desktop_config.json:
{
"mcpServers": {
"qbo": {
"command": "npx",
"args": [
"@wyre-technology/qbo-mcp"
],
"env": {
"QBO_ACCESS_TOKEN": "your-qbo-access-token",
"QBO_REALM_ID": "your-qbo-realm-id"
}
}
}
} Authentication
| Variable | Required | Description |
|---|---|---|
QBO_ACCESS_TOKEN | Yes | OAuth 2.0 access token for QuickBooks Online |
QBO_REALM_ID | Yes | Your QuickBooks Online company ID (realm ID) |
Getting Credentials
Vendor portal: https://developer.intuit.com/
Prerequisites
- QuickBooks Online subscription (any tier)
- Intuit Developer account at https://developer.intuit.com/
- Awareness that QBO uses OAuth 2.0; you create a developer app to issue tokens
Steps
- Sign in to your Intuit Developer account at https://developer.intuit.com/.
- Navigate to Dashboard → Apps → Create an app.
- Select "QuickBooks Online and Payments" as the scope.
- Configure the app: name, target environment (Sandbox for testing, Production for live), and OAuth 2.0 redirect URI per your deployment.
- In the app's "Keys & OAuth" section, note the Client ID and Client Secret.
- Walk through the OAuth 2.0 authorization flow to obtain an access_token + refresh_token.
- QBO access tokens expire after 1 hour; the refresh_token (valid ~100 days) is used to issue new access tokens.
- See https://developer.intuit.com/app/developer/qbo/docs/develop/authentication-and-authorization/oauth-2.0 for the canonical flow.
- Set QBO_ACCESS_TOKEN and QBO_REALM_ID (the QuickBooks Online company ID — visible during OAuth callback as "realmId").
Required Scopes / Permissions
com.intuit.quickbooks.accounting (for accounting entities — Items, Customers, Invoices, etc.)com.intuit.quickbooks.payments (only if using payment endpoints)
Credential Format
Access token is a JWT-like string (long, base64-ish). Realm ID is a numeric company ID (e.g., "1234567890").
Rotation
Access token refreshes every hour via the refresh_token. Refresh_token rotates every ~100 days — store the latest refresh_token to maintain access. Gateway should implement automatic token refresh.
Architecture
Single TypeScript MCP server supporting both stdio and Streamable HTTP transports.
Available Tools (20)
Tools are organized into 5 domains:
Customers
Manage customer records.
| Tool | Description |
|---|---|
List customers | List customers with filtering |
Get customer | Get customer details |
Create customer | Create a new customer |
Search customers | Search customers by name or email |
Invoices
Create and manage invoices.
| Tool | Description |
|---|---|
List invoices | List invoices with filtering |
Get invoice | Get invoice details |
Create invoice | Create a new invoice |
Send invoice | Email an invoice to a customer |
Expenses
View purchases and bills.
| Tool | Description |
|---|---|
List purchases | List expense purchases |
List bills | List vendor bills |
Get purchase | Get purchase details |
Get bill | Get bill details |
Payments
Record and view customer payments.
| Tool | Description |
|---|---|
List payments | List payments received |
Get payment | Get payment details |
Create payment | Record a customer payment |
Reports
Generate financial reports.
| Tool | Description |
|---|---|
Profit & Loss | Generate a P&L report |
Balance Sheet | Generate a balance sheet report |
Aged Receivables | Generate aged receivables report |
Aged Payables | Generate aged payables report |
Customer Sales | Generate customer sales report |