Skip to main content
Glama
amin-ale

QuickBooks Online MCP Server

by amin-ale

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
QBO_SCOPESNoSpace-separated OAuth scopes. Defaults to com.intuit.quickbooks.accounting.
QBO_REALM_IDNoThe QuickBooks company ID (realm ID).
QBO_CLIENT_IDNoThe client ID from the Intuit Developer portal.
QBO_ENVIRONMENTNoThe QuickBooks environment: 'sandbox' or 'production'.sandbox
QBO_MAX_RETRIESNoMaximum number of retries on rate limits or server errors.
QBO_REDIRECT_URINoThe redirect URI for OAuth, must match the one configured in Intuit.http://localhost:8765/callback
QBO_CLIENT_SECRETNoThe client secret from the Intuit Developer portal.
QBO_REQUESTS_PER_MINUTENoMaximum number of API requests per minute.
QBO_REQUESTS_PER_SECONDNoMaximum number of API requests per second.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
create_customerA

Create a customer in the connected QuickBooks Online company. Use it before invoicing someone who is not on file yet, and run search_customers first so you do not create a second record for an existing customer. Write operation: it adds one Customer and changes nothing else. Not idempotent, because QuickBooks rejects a duplicate DisplayName with error 6240 rather than returning the existing customer. Returns the created customer with its new Id and SyncToken, or ok=false with an error and a suggested fix.

get_customerA

Read one customer by QuickBooks Id, including contact details, billing address, open balance, and the current SyncToken. Use it to inspect a customer, and to obtain the SyncToken that update_customer and delete_customer require. Read-only: nothing in the company file changes. The Id must already exist; an unknown Id returns ok=false with status 404, so resolve names through search_customers or list_customers first.

update_customerA

Update an existing customer. Use it to correct contact details, addresses, or the display name. Write operation that overwrites the fields you supply on the live record and leaves omitted fields unchanged, so it is a sparse update rather than a replacement. Not idempotent: a successful write increments the SyncToken, so the same call cannot be replayed. Requires the Id plus the SyncToken from a fresh get_customer; a stale token fails with error 5010.

delete_customerA

Deactivate a customer. QuickBooks Online has no hard delete for customers, so this sets Active to false, which hides the customer from pick lists while keeping their invoices, payments, and history intact. Use it to retire a customer, not to erase data. Write operation and not idempotent: it needs the SyncToken from a fresh get_customer, and that token changes on success. Deactivated customers remain readable through search_customers with active=false.

list_customersA

List customers, most recently updated first, one page at a time. Use it to browse the roster or to find an Id when you have nothing to filter on; prefer search_customers when you do. Read-only. Paging is caller-driven through start_position and max_results, and the result reports how many rows came back, so keep requesting pages until fewer than max_results rows are returned. Both active and inactive customers are included.

search_customersA

Find customers by display-name prefix, exact primary email, or active flag. Use it to turn a name or email an agent was given into a customer Id, and to check for an existing record before create_customer. Read-only. Filters combine with AND, and name_contains is a prefix match because the QuickBooks query language only supports a trailing wildcard. Calling it with no filters returns the whole roster one page at a time.

create_invoiceA

Create an invoice for an existing customer with one or more line items. Use it after resolving the customer Id with search_customers or create_customer. Write operation with real accounting effect: it posts a receivable against the company file. Not idempotent, so calling it twice bills the customer twice. Every line needs an amount, and a line without an item_id falls back to the default sales item. QuickBooks assigns the DocNumber, totals, and (unless due_date is given) the due date from the customer's payment terms.

get_invoiceA

Read one invoice by QuickBooks Id, including its lines, totals, remaining balance, due date, and the current SyncToken. Use it to check whether an invoice is still open, and to obtain the SyncToken that update_invoice and delete_invoice require. Read-only. An unknown Id returns ok=false with status 404; find the Id with search_invoices (which also matches on DocNumber) or list_invoices.

update_invoiceA

Replace the contents of an existing invoice. Use it to correct amounts, dates, or the billing customer. Write operation that overwrites the live record: the line array is replaced wholesale, so send every line the invoice should end with or the omitted ones are dropped and the total changes. Not idempotent, and it requires the Id plus the SyncToken from a fresh get_invoice; a stale token fails with error 5010. Payments already linked to the invoice are not adjusted.

delete_invoiceA

Delete an invoice permanently from the company file. Use it only for an invoice raised in error: this server cannot undo it, and voiding or issuing a credit memo is usually the correct accounting action for an invoice the customer has already seen. Write operation and not idempotent: it needs the SyncToken from a fresh get_invoice, and a repeat call for the same Id fails because the invoice no longer exists. Payments linked to it lose that link.

list_invoicesA

List invoices, most recent transaction date first, one page at a time. Use it to review recent billing when you have nothing to filter on; prefer search_invoices when you can filter by customer, date, or document number. Read-only. Paging is caller-driven through start_position and max_results, so keep requesting pages until fewer than max_results rows come back. Paid and unpaid invoices are both included; read the Balance field to tell them apart.

search_invoicesA

Find invoices by customer Id, transaction-date range, or document number. Use it to answer what a customer was billed in a period, or to turn a document number into an invoice Id. Read-only. Filters combine with AND and the date bounds are inclusive. Payment status cannot be filtered here: read the Balance field on each result, where zero means settled.

create_paymentA

Record a payment received from a customer, optionally applied against a specific invoice. Use it once the money has actually arrived, after confirming the invoice Id with get_invoice or search_invoices. Write operation with real accounting effect: it posts cash against the customer and reduces the linked invoice balance. Not idempotent, so a repeated call records a second payment. Supplying invoice_id links the whole total_amount to that invoice; omitting it leaves an unapplied credit on the customer.

get_paymentA

Read one payment by QuickBooks Id, including the total, transaction date, linked transactions, and the current SyncToken. Use it to confirm which invoice a payment was applied to, and to obtain the SyncToken that update_payment and delete_payment require. Read-only. An unknown Id returns ok=false with status 404; find the Id with search_payments or list_payments.

update_paymentA

Replace the contents of an existing payment. Use it to correct an amount, a date, or the invoice a payment was applied to. Write operation that overwrites the live record: the amount and linked transactions are replaced with what you send, so leaving invoice_id out unlinks the payment and reopens that invoice's balance. Not idempotent, and it requires the Id plus the SyncToken from a fresh get_payment; a stale token fails with error 5010.

delete_paymentA

Delete a payment permanently from the company file. Use it only for a payment recorded in error, and expect any invoice it settled to go back to unpaid for that amount. This server cannot undo the deletion. Write operation and not idempotent: it needs the SyncToken from a fresh get_payment, and a repeat call for the same Id fails because the payment no longer exists.

list_paymentsA

List payments, most recent transaction date first, one page at a time. Use it to review recent cash receipts when you have nothing to filter on; prefer search_payments when you can filter by customer or date. Read-only. Paging is caller-driven through start_position and max_results, so keep requesting pages until fewer than max_results rows come back.

search_paymentsA

Find payments by customer Id or transaction-date range. Use it to reconcile what a customer has paid over a period, or to locate the payment that settled an invoice. Read-only. Filters combine with AND and the date bounds are inclusive. Which invoice a payment was applied to is not a filter: read the LinkedTxn entries on each result.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
company-profileCompany profile and legal address for the connected QuickBooks Online realm.
receivables-summaryAccounts-receivable summary: open invoice count and outstanding balance by status.
customers-summaryRoster summary of active customers with their outstanding balances.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/amin-ale/mcp-quickbooks'

If you have feedback or need assistance with the MCP directory API, please join our Discord server