Provider REST API

Finance

Connect Claude to QuickBooks Online

Read a QuickBooks company: invoices, bills, customers, vendors, the chart of accounts, and the two headline reports. Toolspoke puts 10 of its actions behind one MCP endpoint that Claude, Cursor, and Codex all speak.

Connection
Provider REST API
Authentication
Sign in with Intuit
Actions exposed
10
Cost per call (typical)
1 credit
Adapter
Maintained by Toolspoke

Connected in three steps

  1. 1

    Install QuickBooks Online

    Open the marketplace in your workspace, add QuickBooks Online to the project your agents work in, and it appears on the gateway immediately.

  2. 2

    Connect the credential

    Authenticate with sign in with intuit. Where to get one, and what it has to be able to reach, is the next section.

  3. 3

    Point your agent at the gateway

    Give your client one address, https://toolspoke.com/mcp. Claude Code takes it as a command, Claude and Claude Desktop add it as a custom connector, and Cursor, Codex and VS Code each read it from a config file of their own.

.mcp.json
{
  "mcpServers": {
    "toolspoke": {
      "type": "http",
      "url": "https://toolspoke.com/mcp"
    }
  }
}

One block covers every tool you have installed. QuickBooks Online shows up in the client as soon as your policy allows it, and so does everything else you install later.

Where the address goes, per client

Claude Code

Run it in your project, then /mcp to sign in

claude mcp add --transport http toolspoke https://toolspoke.com/mcp
Claude and Claude Desktop

Settings, then Connectors, then Add custom connector

https://toolspoke.com/mcp
Cursor

~/.cursor/mcp.json, or .cursor/mcp.json for one project

{ "mcpServers": { "toolspoke": { "url": "https://toolspoke.com/mcp" } } }
Codex

~/.codex/config.toml

[mcp_servers.toolspoke]
url = "https://toolspoke.com/mcp"
VS Code

.vscode/mcp.json, or the MCP: Add Server command

{ "servers": { "toolspoke": { "type": "http", "url": "https://toolspoke.com/mcp" } } }

What QuickBooks Online asks for

Sign in with Intuit. You provide it once, when you install the connector. Toolspoke encrypts it at rest and decrypts it only for the length of a single call, and the gateway attaches it to the outbound request itself, so it is never part of the arguments an agent sends.

Company (realm) IDRequired
The QuickBooks company this connection reads. Intuit returns it as a realmId query parameter on the OAuth redirect when you authorise the app, and it also appears under Account and settings → Billing & subscription as the Company ID. Every route here is scoped to it.
1234567890123456789

What Claude can do in QuickBooks Online

10 actions, each one declared and named by the connector rather than discovered at runtime. A workspace policy grants a person all of them, a hand-picked selection, everything on the read side, everything on the write side, or none.

Reads
10Reads
Writes
0Writes
Destructive
0Destructive

Reads

10

Fetches data and changes nothing.

  • get_company_info

    Return the company this connection is pointed at: its legal and trading name, address, country, fiscal year start, industry and the currencies it is set up for. Intuit's route repeats the realm id inside the path, which is its own shape rather than a mistake here. This is the connection test - it needs nothing, costs nothing, names no customer, and it is the one call that proves the sign-in and the realm id resolve to a company file this grant can read.

  • list_accounts

    Return the chart of accounts: every account with its name, number, type, sub-type, classification and current balance. This is the company's accounting structure rather than anybody's data, so its response is kept in the audit log - an agent reasoning about where a figure came from needs the account list in front of it. The statement behind this is fixed and returns the first 100 accounts; for a filtered or paged version, use run_query with your own SELECT.

  • list_invoices

    Return the first 100 invoices in the company, with the customer each one is for, its amount, its balance still due and its line items. QuickBooks has no REST listing route, so this is the query endpoint with a statement this connector fixed - the caller cannot change it, which is what keeps this a read while run_query is a write. For a date range, a status filter, ordering or paging past the first 100, use run_query with your own SELECT. Its response is kept out of the audit log because an invoice names a real customer and what they were charged.

  • get_invoice

    Fetch one invoice by its QuickBooks id, with its full line items, the customer reference, the terms, the due date and the balance outstanding. Ids come from list_invoices or from run_query. Its response is kept out of the audit log - it names a customer and the amounts between you.

  • list_bills

    Return the first 100 bills - what suppliers have invoiced this company - with the vendor, the amount, the due date, the balance outstanding and the expense lines. Like the other listings here this is the query endpoint with a fixed statement; use run_query for a filtered, ordered or paged version. Kept out of the audit log because a bill names a real supplier and what is owed to them.

  • list_vendors

    Return the first 100 vendors - the suppliers this company buys from - with their display names, contact details, addresses, terms and open balances. Use it to turn a supplier name into the vendor id a bill references. Fixed statement, as with the other listings; use run_query to filter or page. Kept out of the audit log because it is a list of real counterparties and their contact details.

  • get_customer

    Fetch one customer by their QuickBooks id, with their display name, contact details, billing and shipping addresses, payment terms, tax settings and current balance. Ids come from an invoice's CustomerRef, or from run_query with a SELECT over Customer. Its response is kept out of the audit log - it is one named person or company and their details.

  • run_query

    Run a QuickBooks query statement and return the matching records. This is the general read for anything the fixed listings above do not cover: filters, date ranges, ordering, paging past the first 100, and every entity this connector exposes no operation for. IT REACHES FURTHER THAN THE OTHER READS. One free-text statement gets at every entity in the company file, employees, payroll items and time activities included, so a workspace that wants an agent held to the named listings should exclude this action by name with a selected-action grant rather than rely on the read/write line. It is classified a read because that is what it is: the query language is SELECT only, this is a GET, and creating or editing a record goes through routes this connector does not expose at all. The statement is masked before the call is logged, because a WHERE clause routinely carries a customer's name or email. Syntax notes, because it is not SQL: no JOIN, no GROUP BY, no OR, no column projections - SELECT * or SELECT COUNT(*) only. Paging is STARTPOSITION then MAXRESULTS, in that order, at the end of the statement; MAXRESULTS defaults to 100 and caps at 1000.

  • get_profit_and_loss

    Run the Profit and Loss report and return QuickBooks' report structure of columns and rows. Every parameter is optional. Give start_date and end_date as YYYY-MM-DD for an explicit range, or date_macro for a named period such as "Last Fiscal Year" or "This Month-to-date" - if the dates are left out, the macro is what QuickBooks uses. summarize_column_by breaks the report into columns by Month, Quarter, Year, Customers, Vendors, Classes or Departments. accounting_method switches between Cash and Accrual. The response is aggregate figures with no customer or supplier named in it, which is why, unlike the invoice and customer reads here, it is kept in the audit log: a number an agent reported should be checkable afterwards.

  • get_balance_sheet

    Run the Balance Sheet report and return QuickBooks' report structure of columns and rows. Every parameter is optional, and the same date rule applies as on the Profit and Loss: give start_date and end_date, or a date_macro that stands in when they are omitted. A balance sheet is a position rather than a flow, so summarize_column_by is usually left alone or set to a period to compare positions over time. Aggregate figures, no counterparties, so the response is kept in the audit log.

What it will not do

Enforced by the gateway rather than left to convention, which is why each of these can be stated flatly.

It cannot call anything else
The 10 actions above are the whole of it. A call to any other name is refused before it reaches QuickBooks Online rather than forwarded on, and connecting your account does not add to the list: it is fixed by the connector, not discovered at run time.
It only reads
Every action here reads. Nothing this connector can do changes anything in QuickBooks Online.
It reaches no further than your credential
Toolspoke holds no access to QuickBooks Online of its own. Every call carries the credential you stored and nothing besides, so whatever that credential cannot reach, this connector cannot reach either.
It never hears from QuickBooks Online
Nothing is pushed to it. There is no webhook, no subscription and no polling, so this connector cannot notice by itself that something changed in QuickBooks Online. An agent has to ask.
It does not smooth over provider limits
Toolspoke does not retry, queue or back off around QuickBooks Online's own rate limits. A call that QuickBooks Online refuses comes back to the agent as a failed call.

Before you connect it

What can Claude do in QuickBooks Online?

10 named actions: 10 that only read. They include get_company_info, list_accounts and list_invoices. Nothing outside that list is reachable: the connector declares each operation by name rather than proxying whatever an agent asks for.

What credentials does the QuickBooks Online connector need?

Sign in with Intuit. The connector asks for company (realm) id. Values are encrypted at rest and attached to the outbound request by the gateway, so they are never part of the arguments an agent sends and never reach the audit log.

Does the QuickBooks Online connector work with Cursor and Codex, or only Claude?

Any client that speaks MCP, and every one of them gets the same 10 actions. There is a single address, https://toolspoke.com/mcp. Claude Code adds it with claude mcp add --transport http, Claude and Claude Desktop take it as a custom connector in settings, Cursor reads it from .cursor/mcp.json, Codex from ~/.codex/config.toml, and VS Code from .vscode/mcp.json. Each of them signs in to the gateway itself, so there is no key to paste.

What does the QuickBooks Online connector not do?

The 10 actions above are the whole of it. A call to any other name is refused before it reaches QuickBooks Online rather than forwarded on, and connecting your account does not add to the list: it is fixed by the connector, not discovered at run time. Every action here reads. Nothing this connector can do changes anything in QuickBooks Online. Toolspoke holds no access to QuickBooks Online of its own. Every call carries the credential you stored and nothing besides, so whatever that credential cannot reach, this connector cannot reach either. Nothing is pushed to it. There is no webhook, no subscription and no polling, so this connector cannot notice by itself that something changed in QuickBooks Online. An agent has to ask. Toolspoke does not retry, queue or back off around QuickBooks Online's own rate limits. A call that QuickBooks Online refuses comes back to the agent as a failed call.

Can I limit which actions an agent can call?

Yes, in two places. The project switches QuickBooks Online's actions on and off one at a time, for everyone in the project at once, and the screen groups them by read, write and destructive so turning off everything that deletes is one click. An individual agent key can then be narrowed further, to particular toolkits in a project and to particular actions in a toolkit. Whatever it was granted, a key never reaches a project its owner cannot.

What gets recorded when an agent calls QuickBooks Online?

Every attempt, with the agent that made it and the person that agent belongs to, the full request payload, the response payload, the status, the duration, and the credits spent. Values whose key names a secret are masked out before the record is shown to anyone. An operation the connector marks as not retained never has its response body written at all, so the gateway keeps no second copy of what was read.