Skip to main content
Glama
laf-rge

QuickBooks MCP

by laf-rge

QuickBooks MCP Server

An MCP server for QuickBooks Online — built for bookkeepers, CFOs, and accountants who use AI assistants in their daily workflow.

Ask your AI assistant to pull a P&L report, create a journal entry, or investigate an account balance — using plain language, not API payloads.

Why This Server?

Intuit provides an official MCP server that's a solid starting point for developers exploring the QuickBooks API. This server takes a different approach: it's designed for financial professionals working in production books.

Use natural language, not internal IDs

Intuit's server requires QuickBooks internal IDs for every reference — you need to look up a vendor's ID before creating a bill. This server resolves names automatically:

"Create a bill for PG&E, $450 to Utilities, dated 2025-01-15"
→ Vendor, account, and department names are resolved automatically

Financial reports built in

This is the only QuickBooks MCP server with report tools. Pull a P&L, Balance Sheet, or Trial Balance — broken down by month, department, or class — without leaving your AI conversation.

Safe by default

Every create and edit operation defaults to draft/preview mode. You see exactly what will be written to your books before committing. No accidental journal entries or misclassified expenses.

One query tool instead of dozens

Instead of separate search tools for each entity type, a single SQL-like query tool works across all QuickBooks entities. AI assistants write SQL naturally, and QuickBooks validates it — no field whitelists to maintain.

"SELECT * FROM Purchase WHERE TxnDate >= '2025-01-01' AND TxnDate <= '2025-01-31'"

Production-ready credential management

Store credentials locally for personal use, or in AWS Secrets Manager for shared environments. OAuth tokens refresh automatically and persist across sessions.

At a glance

Intuit Official

This Server

Audience

Developers exploring the API

Bookkeepers, CFOs, accountants

Name resolution

Requires internal QB IDs

Resolves names automatically

Financial reports

None

P&L, Balance Sheet, Trial Balance

Write safety

Executes immediately

Draft preview by default

Query approach

Entity-specific search tools

SQL-like queries across all entities

Credentials

Local .env file

Local file or AWS Secrets Manager

Distribution

Clone from GitHub

npx quickbooks-mcp

Related MCP server: penni-mcp

Prerequisites

Installation Options

Choose the setup that fits your use case:

Setup

Best For

NPM Install

Quick setup, using your own QuickBooks app

Local Checkout

Development, customization

AWS Mode

Shared/production environments


Option 1: NPM Install

The simplest way to get started. Credentials are stored locally on your machine.

1. Create a QuickBooks App

  1. Go to developer.intuit.com and sign in

  2. Create a new app (or select an existing one)

  3. Go to "Keys & credentials"

  4. Note your Client ID and Client Secret

  5. Under "Redirect URIs", add: https://developer.intuit.com/v2/OAuth2Playground/RedirectUrl

2. Add to Claude Code

Add to your project's .mcp.json:

{
  "mcpServers": {
    "quickbooks": {
      "command": "npx",
      "args": ["-y", "quickbooks-mcp"]
    }
  }
}

3. Configure Credentials

Create ~/.quickbooks-mcp/credentials.json:

{
  "client_id": "your_client_id",
  "client_secret": "your_client_secret"
}

4. Authenticate

Once Claude Code is running, use the qbo_authenticate tool:

  1. Call qbo_authenticate with no arguments to get an authorization URL

  2. Open the URL in your browser and authorize the app

  3. Copy the code and realmId from the redirect URL

  4. Call qbo_authenticate again with the authorization code and realm ID

Your OAuth tokens will be saved and automatically refreshed.


Option 2: Local Checkout

For development or customization.

1. Create a QuickBooks App

Follow the same steps as Option 1 above.

2. Clone and Build

git clone https://github.com/laf-rge/quickbooks-mcp.git
cd quickbooks-mcp
npm install
npm run build

3. Add to Claude Code

Add to your project's .mcp.json:

{
  "mcpServers": {
    "quickbooks": {
      "command": "node",
      "args": ["/path/to/quickbooks-mcp/dist/index.js"]
    }
  }
}

4. Configure Credentials

Create ~/.quickbooks-mcp/credentials.json with your client credentials (same as Option 1), then run qbo_authenticate to complete the OAuth flow.


Option 3: AWS Mode

For shared or production environments. Stores credentials in AWS Secrets Manager.

1. Create AWS Resources

Create the secret in Secrets Manager:

aws secretsmanager create-secret \
  --name prod/qbo \
  --secret-string '{
    "client_id": "your_client_id",
    "client_secret": "your_client_secret",
    "access_token": "your_access_token",
    "refresh_token": "your_refresh_token",
    "redirect_url": "https://developer.intuit.com/v2/OAuth2Playground/RedirectUrl"
  }'

Store Company ID in SSM Parameter Store:

aws ssm put-parameter \
  --name /prod/qbo/company_id \
  --value "your_company_id" \
  --type SecureString

2. Configure the Server

Create a .env file in the quickbooks-mcp directory:

QBO_CREDENTIAL_MODE=aws
AWS_REGION=us-east-2
QBO_SECRET_NAME=prod/qbo
QBO_COMPANY_ID_PARAM=/prod/qbo/company_id

Note: Due to a known Claude Code bug, environment variables from .mcp.json are not reliably passed to MCP servers. The .env file workaround is required.

3. Add to Claude Code

{
  "mcpServers": {
    "quickbooks": {
      "command": "node",
      "args": ["/path/to/quickbooks-mcp/dist/index.js"]
    }
  }
}

4. IAM Permissions

The server needs these AWS permissions:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue",
        "secretsmanager:PutSecretValue"
      ],
      "Resource": "arn:aws:secretsmanager:*:*:secret:prod/qbo*"
    },
    {
      "Effect": "Allow",
      "Action": ["ssm:GetParameter"],
      "Resource": "arn:aws:ssm:*:*:parameter/prod/qbo/*"
    }
  ]
}

Inline Output Mode

By default, large responses (reports, query results) are written to /tmp files and the server returns a file path. This works well for Claude Code in terminal environments but breaks in Claude Desktop and plugin environments where the model cannot read from /tmp.

Set QBO_INLINE_OUTPUT=true to return all responses inline instead.

Option A — via .env file (recommended for local checkout):

Create a .env file in the quickbooks-mcp directory:

QBO_INLINE_OUTPUT=true

Option B — via .mcp.json env block (recommended for NPM install):

{
  "mcpServers": {
    "quickbooks": {
      "command": "npx",
      "args": ["-y", "quickbooks-mcp"],
      "env": {
        "QBO_CREDENTIAL_MODE": "local",
        "QBO_INLINE_OUTPUT": "true"
      }
    }
  }
}

Note: Due to a known Claude Code bug, environment variables from .mcp.json are not reliably passed to MCP servers in some configurations. If Option B doesn't work, use the .env file workaround.


Environment Variables

Variable

Default

Description

QBO_CREDENTIAL_MODE

local

Credential storage: local or aws

QBO_CLIENT_ID

-

QuickBooks app Client ID (local mode)

QBO_CLIENT_SECRET

-

QuickBooks app Client Secret (local mode)

QBO_CREDENTIAL_FILE

~/.quickbooks-mcp/credentials.json

Custom credential file path. A leading ~ is expanded to your home directory, so it works in an MCP client's JSON env block where no shell is present to expand it.

QBO_INLINE_OUTPUT

false

Return responses inline instead of writing to /tmp files. Required when using Claude Desktop or plugin environments where file-based output is not accessible to the model.

QBO_SANDBOX

false

Use QuickBooks sandbox environment. Also switches the "View in QuickBooks" deep links to app.sandbox.qbo.intuit.com so they cannot open the production company.

AWS_REGION

us-east-2

AWS region (aws mode)

QBO_SECRET_NAME

prod/qbo

Secrets Manager secret name (aws mode)

QBO_COMPANY_ID_PARAM

/prod/qbo/company_id

SSM parameter path (aws mode)


Available Tools

Tool

Description

Setup

qbo_authenticate

Set up OAuth credentials (local mode only)

get_company_info

Get connected company information

Query & Reports

query

Run SQL-like queries against any QuickBooks entity

list_accounts

List chart of accounts with filtering

get_profit_loss

Profit & Loss report (by month, department, class, etc.)

get_balance_sheet

Balance Sheet report

get_trial_balance

Trial Balance report (flags: true adds a close-review pass for wrong-side and uncategorized/suspense balances)

get_report

Any of 24 other QuickBooks reports — A/R and A/P aging, customer and vendor balances, transaction lists, general ledger, journal, sales by customer/item/class/department, cash flow, and the detail variants

query_account_transactions

All transactions affecting a specific account (13 posting entity types, paginated, optional sub-account rollup; see docs/entity-coverage.md for limits)

account_period_summary

Period summary for an account (opening/closing balance, debits, credits, count)

Journal Entries

create_journal_entry

Create a journal entry (validates debits = credits; lines take entity_name/entity_type)

get_journal_entry

Fetch a journal entry by ID

edit_journal_entry

Modify an existing journal entry

Bills

create_bill

Create a vendor bill (lines take customer_name)

get_bill

Fetch a bill by ID

edit_bill

Modify an existing bill

Expenses

create_expense

Create an expense (Cash, Check, or Credit Card; payee may be a vendor, customer, or employee)

get_expense

Fetch an expense by ID

edit_expense

Modify an existing expense

Sales Receipts

create_sales_receipt

Create a sales receipt with item lines

get_sales_receipt

Fetch a sales receipt by ID

edit_sales_receipt

Modify an existing sales receipt

Invoices

create_invoice

Create an invoice with item lines (customer required)

get_invoice

Fetch an invoice by ID

edit_invoice

Modify an existing invoice

Deposits

create_deposit

Create a bank deposit (lines take entity_name/entity_type)

get_deposit

Fetch a deposit by ID

edit_deposit

Modify an existing deposit (lines take entity_name/entity_type)

Vendor Credits

create_vendor_credit

Create a vendor credit (lines take customer_name)

get_vendor_credit

Fetch a vendor credit by ID

edit_vendor_credit

Modify an existing vendor credit

Bill Payments

create_bill_payment

Pay bills and apply vendor credits (the QBO "check" / pay-bills flow)

receive_payment

Record a customer payment against open invoices (A/R counterpart to create_bill_payment); each line defaults to the invoice's open balance

create_transfer

Move money between two of the company's own accounts (bank↔bank, credit-card paydown)

get_bill_payment

Fetch a bill payment by ID; flags unapplied amounts

Delete

delete_entity

Delete any transaction (journal entry, bill, invoice, deposit, sales receipt, expense, vendor credit, bill payment)

Naming Vendors, Customers, and Employees

Every write tool that can attribute a line or a header to a name list accepts a name and resolves it to an ID, the same way account_name and department_name do. Which parameter you get depends on what QuickBooks will actually store there:

Parameter

Where it applies

Accepts

entity_name + entity_type

create_deposit / edit_deposit lines, create_journal_entry / edit_journal_entry lines, create_expense / edit_expense header payee

Vendor, Customer, or Employee. entity_type defaults to Vendor.

customer_name

create_bill / edit_bill, create_expense / edit_expense, create_vendor_credit / edit_vendor_credit lines

Customer only — QuickBooks stores a CustomerRef on these lines and has no vendor or employee option.

vendor_name

create_bill, create_vendor_credit, create_bill_payment headers

Vendor only.

customer_name (header)

create_invoice, create_sales_receipt

Customer only. Their item lines have no per-line entity.

Each also has an _id form (entity_id, customer_id) if you already know the internal ID. On edit tools, the rule for line parameters is:

  • omit the parameter and a line addressed by line_id keeps the entity it already has;

  • name one and it is set or replaced;

  • pass an empty string (entity_name: "") and it is cleared.

See docs/quickbooks-api-limitations.md for the underlying QBO field shapes, which are not uniform.

Parameter Names Are Enforced

Arguments are checked against the schema each tool advertises, before anything runs. An unknown parameter is an error that names the closest valid one, a missing required parameter is an error, and an edit_* call with no field to change is an error rather than a write that reports success.

The alternative is silence. A handler reads the parameters it knows about, so a misspelled one is simply absent: a create call that puts the date under the wrong key posts on today's date, an as-of report asked for a date range returns today's balances, and an edit whose fields are all misspelled comes back "updated successfully" having changed nothing. None of those raise anything for the caller to notice.

Relatedly, when QuickBooks accepts an update without advancing the record's SyncToken — meaning the payload matched what was already stored — the edit tools report no change instead of success.


Token Refresh

The server automatically refreshes OAuth tokens on each request and persists them back to your credential store (local file or AWS Secrets Manager).


Development

npm run dev      # Run in development mode
npm run build    # Build
npm run typecheck # Type check
npm test         # Run the test suite

Tests live in tests/, mirroring src/. They are TypeScript, compiled by tsconfig.test.json into dist-test/ and run by Node's built-in test runner — no test framework dependency. Type errors in a test are build failures, so a test referencing a renamed export fails loudly rather than silently skipping. Anything needing a QuickBooks client passes a hand-written stand-in covering just the calls under test, so the suite runs offline with no credentials.


Troubleshooting

"QuickBooks credentials not configured"

Run the qbo_authenticate tool to set up OAuth credentials (local mode only).

"Authorization code expired"

Authorization codes are only valid for a few minutes. Start the OAuth flow again.

Token refresh fails

  • Check that your refresh token hasn't expired (~100 days)

  • Verify your client credentials are correct

  • Try re-authenticating with qbo_authenticate

AWS credential errors

  • Ensure .env file has QBO_CREDENTIAL_MODE=aws

  • Check your AWS credentials and permissions

  • Verify the secret and parameter names match your configuration

Available Tools

36 tools
account_period_summaryB

Get a period summary for an account: opening balance, total debits/credits, closing balance, and transaction count. Uses the General Ledger report. Supports department filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesAccount name, number (AcctNum), or ID
start_dateNoStart date YYYY-MM-DD (default: start of year)
end_dateNoEnd date YYYY-MM-DD (default: today)
departmentNoFilter to specific department/location (optional)
accounting_methodNoAccounting method: 'Accrual' (default) or 'Cash'

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully cover behavioral traits. It discloses that the tool is read-only and mentions the report source, but does not describe error handling, permission requirements, response format, or what happens if the account is invalid. The description is insufficient for an agent to understand side effects or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary purpose, and avoids unnecessary words. It could be slightly more structured by breaking down the outputs explicitly, but it is concise and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema and annotations, the description should explain the return format more completely. It lists the output fields (opening balance, etc.) but does not specify whether the result is a single object or list, data types, or pagination. For a summary tool with 5 parameters, the description provides adequate but not thorough context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for all 5 parameters. The description adds minimal extra meaning beyond the schema (e.g., 'supports department filtering' is already in the schema). According to guidelines, baseline is 3 when coverage is high, and the description does not significantly enhance parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets a period summary for an account, specifying the exact outputs (opening balance, total debits/credits, closing balance, transaction count), and distinguishes it from sibling tools like 'query_account_transactions' and other summary tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions it uses the General Ledger report and supports department filtering, but provides no explicit guidance on when to use this tool versus alternatives like 'get_balance_sheet' or 'query_account_transactions'. It lacks usage context or when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_billA

Create a vendor bill. Accepts vendor/account/department names (will lookup IDs automatically). Note: DepartmentRef is header-level only — for multi-department splits, create separate bills (one per department). Returns bill details and a link to view in QuickBooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
vendor_nameNoVendor display name (e.g., 'Simplisafe', 'PG&E'). Will be looked up to get ID.
vendor_idNoVendor ID (use if you already know it, otherwise use vendor_name)
txn_dateYesTransaction date in YYYY-MM-DD format
due_dateNoDue date in YYYY-MM-DD format (optional)
department_nameNoHeader-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID.
department_idNoHeader-level department/location ID (use if you already know it, otherwise use department_name)
ap_accountNoAccounts Payable account name or number (optional, defaults to standard AP)
memoNoPrivate memo for the bill
doc_numberNoReference number for the bill (optional)
linesYesArray of expense line items. Provide account_name OR account_id (name preferred).
draftNoIf true, validate and show preview without creating (default: true)

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses auto-lookup behavior and the header-only department constraint. However, it does not mention authentication requirements, potential side effects of creation, or error handling behavior, leaving gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, each earning its place. The first sentence states the core purpose and auto-lookup feature. The second delivers a critical constraint and return info. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 11 parameters and no output schema, the description provides a good overview, including a key constraint. It could be more complete by detailing the return format (e.g., what fields are in 'bill details') and the draft parameter's behavior beyond 'validate and show preview'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage with descriptions for all parameters. The description adds value by explaining the auto-lookup mechanism and the department constraint, which are not fully captured in individual parameter descriptions. This goes beyond a baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a vendor bill' and mentions key capabilities like auto-lookup of names. However, it does not explicitly differentiate from sibling tools like create_bill_payment or create_expense, leaving some ambiguity about when to use this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides specific guidance: for multi-department splits, create separate bills. It also explains the draft parameter. However, it lacks comparative guidance on when to use this tool versus other creation tools (e.g., create_expense, create_journal_entry), which limits decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_bill_paymentA

Create a bill payment (the QBO 'check' / 'pay bills' flow). Pays one or more existing bills and optionally applies vendor credits, clearing Accounts Payable. Use this to record vendor ACH/EFT debits or checks so the bank feed can match them — especially when a bank charge equals bills minus credit memos. Amounts default to each bill's open balance and each credit's remaining balance. Returns payment details and a link to view in QuickBooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
vendor_nameNoVendor display name (e.g., 'US Foods'). Will be looked up to get ID.
vendor_idNoVendor ID (use if you already know it, otherwise use vendor_name)
payment_accountYesBank account name or number the payment is drawn from (e.g., 'PLAT BUS CHECKING', '5752'). Will be looked up to get ID.
txn_dateYesPayment date in YYYY-MM-DD format (use the bank debit date for bank-feed matching)
memoNoPrivate memo for the payment
doc_numberNoReference number, e.g., check number or EFT reference (optional)
billsYesBills to pay. Each bill must belong to the vendor and have an open balance.
creditsNoVendor credits to apply against the bills (optional). Each credit must belong to the vendor and have remaining balance.
draftNoIf true, validate and show preview without creating (default: true)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses key behaviors: it pays bills and applies credits, defaults amounts to open/remaining balances, supports a draft mode, and returns payment details and a link. It could mention it reduces bill balances, but overall it is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences that are dense with information, front-loaded with the purpose and flow. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 params, nested objects), the description covers the overall flow, defaults, use case, and return value. It lacks explicit mention of vendor consistency constraints but otherwise is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds minimal extra meaning beyond the schema, though it contextualizes the draft parameter's purpose. The default amount behavior is already in the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a bill payment, explains it as the QBO 'check/pay bills' flow, and specifies it pays bills and applies vendor credits to clear AP. This distinguishes it from siblings like create_bill or create_expense.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete guidance: 'Use this to record vendor ACH/EFT debits or checks so the bank feed can match them — especially when a bank charge equals bills minus credit memos.' It implies it's for paying existing bills but doesn't explicitly exclude other scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_customerA

Create a customer or sub-customer. Accepts name parts, contact info, addresses, and hierarchy settings. Use parent_ref to create sub-customers or jobs. Returns customer details and a link to view in QuickBooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
display_nameYesPrimary display name (must be unique in QuickBooks)
given_nameNoFirst/given name (optional)
middle_nameNoMiddle name (optional)
family_nameNoLast/family name (optional)
suffixNoName suffix, e.g., 'Jr.' (optional)
company_nameNoCompany name (optional)
emailNoPrimary email address (optional)
phoneNoPrimary phone number (optional)
mobileNoMobile phone number (optional)
bill_addressNoBilling address (optional)
ship_addressNoShipping address (optional, same shape as bill_address)
notesNoNotes about the customer (optional)
taxableNoWhether the customer is taxable (optional)
parent_refNoParent customer name or ID to create a sub-customer or job. Will be looked up to get ID.
jobNoMark this customer as a job (default: false). Jobs track work for a parent customer.
bill_with_parentNoIf true, invoices for this sub-customer are billed to the parent (default: false)
preferred_delivery_methodNoHow invoices are delivered: Print, Email, or None
sales_term_refNoDefault payment terms name (e.g., 'Net 30'). Will be looked up to get ID.
draftNoIf true, validate and show preview without creating (default: true)

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It mentions returns details and a link, but does not disclose behaviors like uniqueness enforcement, failure modes, authentication needs, or rate limits. The draft mode effect is not described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences efficiently covering purpose, inputs, and output. Front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 19 parameters and no output schema, description covers input types and return value but lacks edge cases (e.g., duplicate display_name, unresolved parent_ref, draft mode impact). Adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all parameters. Description adds grouping context ('name parts, contact info, addresses') and mentions parent_ref for sub-customers, but does not significantly surpass schema details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Create a customer or sub-customer' and specifies accepted inputs (name parts, contact info, addresses, hierarchy settings). It distinguishes from sibling tools like edit_customer by focusing on creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage for creation and sub-customers, but does not explicitly state when to use this tool versus alternatives (e.g., edit_customer for updates). No exclusion criteria provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_depositA

Create a bank deposit. Accepts account/department/vendor names (will lookup IDs automatically). Lines represent the sources of the deposit — amounts can be positive (income) or negative (fees, deductions). QuickBooks computes the total from line amounts. Returns deposit details and a link to view in QuickBooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
deposit_to_accountYesBank account name or number receiving the deposit (e.g., 'PLAT BUS CHECKING', '5752'). Will be looked up to get ID.
txn_dateYesTransaction date in YYYY-MM-DD format
linesYesArray of deposit line items. Each line represents a source of the deposit. Amounts can be positive or negative.
department_nameNoHeader-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID.
department_idNoHeader-level department/location ID (use if you already know it, otherwise use department_name)
memoNoPrivate memo for the deposit
draftNoIf true, validate and show preview without creating (default: true)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses key behaviors: automatic ID lookup, line item computation of total by QuickBooks, and return of deposit details with a link. However, it does not mention authorization requirements, error handling, or reversibility, which are non-critical but would enhance transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (three sentences) and front-loaded with the primary action. Every sentence adds distinct information without redundancy. It efficiently covers the tool's purpose, key parameters, and output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with 7 parameters and no output schema, the description adequately explains the return value (details and link) and covers the behavior of line items. It lacks error condition details or validation notes, but overall provides sufficient context for the agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the auto-lookup for names, the sign convention for amounts (positive income, negative fees), and that QuickBooks computes totals. This provides meaning beyond the schema field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a bank deposit' with a specific verb and resource. It distinguishes itself from sibling tools (e.g., create_invoice, create_bill) by focusing on deposits. The additional detail about accepting names and auto-lookup reinforces its unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly indicates usage (recording bank deposits) and highlights the auto-lookup feature, but does not explicitly state when to use it versus alternatives like create_sales_receipt or create_expense. No exclusion criteria are provided, which is a minor gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_expenseA

Create an expense (Purchase). Accepts account/department/vendor names (will lookup IDs automatically). Covers Cash, Check, and Credit Card payment types. Note: PaymentType cannot be changed after creation. DepartmentRef is header-level only. Returns expense details and a link to view in QuickBooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
payment_typeYesPayment method: 'Cash', 'Check', or 'CreditCard'. Cannot be changed after creation.
payment_accountYesBank or credit card account name or number (e.g., 'PLAT BUS CHECKING', '5752'). Will be looked up to get ID.
txn_dateYesTransaction date in YYYY-MM-DD format
entity_nameNoPayee/vendor display name (e.g., 'Simplisafe', 'PG&E'). Will be looked up to get ID.
entity_idNoPayee/vendor ID (use if you already know it, otherwise use entity_name)
department_nameNoHeader-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID.
department_idNoHeader-level department/location ID (use if you already know it, otherwise use department_name)
memoNoPrivate memo for the expense
doc_numberNoReference number for the expense (optional)
linesYesArray of expense line items. Provide account_name OR account_id (name preferred).
draftNoIf true, validate and show preview without creating (default: true)

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses immutability of payment_type, that department is header-level only, auto-lookup of IDs, and returns expense details with a link to QuickBooks. No contradictory information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, each adding distinct information. No redundant or filler content. Front-loaded with primary purpose. Very concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters and no output schema, the description covers the general flow, key constraints, auto-lookup behavior, draft mode, and return value (details + link). Sufficient for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, but description adds significant value: explains auto-lookup behavior for names, confirms immutability of payment_type, and clarifies that department is header-level. Example placeholders like 'Simplisafe' and 'PLAT BUS CHECKING' help the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with 'Create an expense (Purchase)' – clear verb+resource. Distinguishes from siblings like create_bill, create_deposit by specifying accepted payment types (Cash, Check, CreditCard) and providing a sample description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides context: accepts names for lookup, covers three payment types, notes that PaymentType cannot be changed after creation, and DepartmentRef is header-level only. However, it does not explicitly differentiate from alternatives like create_bill, which may be used for similar purposes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_invoiceA

Create an invoice. Accepts item/customer/department names (will lookup IDs automatically). Either customer_name or customer_id is REQUIRED — invoices must have a customer. Lines use SalesItemLineDetail (product/service references, not accounts). Returns invoice details and a link to view in QuickBooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
txn_dateYesTransaction date in YYYY-MM-DD format
customer_nameNoCustomer display name (e.g., 'Cash Sales'). Will be looked up to get ID.
customer_idNoCustomer ID (use if you already know it, otherwise use customer_name)
due_dateNoDue date in YYYY-MM-DD format (optional)
department_nameNoHeader-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID.
department_idNoHeader-level department/location ID (use if you already know it, otherwise use department_name)
memoNoPrivate memo for the invoice (internal, not visible to customer)
customer_memoNoCustomer-facing message visible on the invoice
bill_emailNoEmail address to send the invoice to. Required if you want QuickBooks to email the invoice.
sales_term_refNoPayment terms name (e.g., 'Net 30', 'Due on receipt'). Will be looked up to get ID.
allow_online_credit_card_paymentNoAllow customer to pay this invoice with a credit card online. Must be explicitly set — company defaults do not apply via API.
allow_online_ach_paymentNoAllow customer to pay this invoice via bank transfer (ACH) online. Must be explicitly set — company defaults do not apply via API.
doc_numberNoReference number for the invoice (optional)
linesYesArray of line items. Each line references an item (product/service). Provide item_name OR item_id (name preferred).
draftNoIf true, validate and show preview without creating (default: true)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses automatic ID lookups, draft mode behavior, and that online payment flags must be explicitly set (company defaults don't apply). This adds significant behavioral context beyond the schema, though rate limits or auth needs are not mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact (4 sentences) and front-loaded with the core purpose. Every sentence adds value, with no redundant information. It is efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (15 parameters, no output schema), the description covers key aspects: mandatory fields, lookup behavior, line item requirements, draft mode, and online payment flag handling. It could mention error handling for failed lookups, but overall it is thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds critical meaning: explains the lookup mechanism for names, the requirement for customer, the line item structure (SalesItemLineDetail), and the draft default. This goes beyond the schema descriptions, providing essential context for correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create an invoice' and specifies it accepts names for automatic ID lookup. This differentiates it from sibling tools like create_sales_receipt, establishing a distinct verb+resource scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states that either customer_name or customer_id is REQUIRED, and that lines use SalesItemLineDetail rather than accounts, providing clear context. However, it does not explicitly list when not to use this tool or name alternatives beyond what is implied by sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_journal_entryB

Create a journal entry. Accepts account/department names (will lookup IDs automatically). Validates debits=credits before creating. Returns entry details and a link to view in QuickBooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
txn_dateYesTransaction date in YYYY-MM-DD format
memoNoPrivate memo for the journal entry
linesYesArray of line items. Provide account_name OR account_id (name preferred). Optionally provide department_name OR department_id.
draftNoIf true, validate and show preview without creating (default: true)
doc_numberNoJournal number (shown as 'Journal no.' in QuickBooks). If not specified, QuickBooks will auto-assign the next number.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the transparency burden. It discloses key behaviors: auto-lookup of account/department names, validation of debits=credits, and return of entry details with a link. However, it omits behaviors like draft flag behavior and permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: purpose, feature, output. No fluff or redundancy. Front-loaded with the action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (5 parameters, no output schema), the description covers key aspects but misses the behavior of the 'draft' parameter and does not fully describe the return value structure beyond 'details and a link'. Schema coverage helps, but the description could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by clarifying that account and department names can be used (auto-lookup), which is not evident from the schema alone. Other parameters are adequately described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a journal entry, distinguishing it from sibling tools like create_invoice or create_bill. It mentions validation and automatic lookup, which adds specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The description implies it is for journal entries, but does not provide criteria or exclusions relative to other creation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_sales_receiptA

Create a sales receipt. Accepts item/customer/department names (will lookup IDs automatically). Lines reference items (products/services) not accounts. Returns receipt details and a link to view in QuickBooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
txn_dateYesTransaction date in YYYY-MM-DD format
customer_nameNoCustomer display name (e.g., 'Cash Sales'). Will be looked up to get ID.
customer_idNoCustomer ID (use if you already know it, otherwise use customer_name)
deposit_to_accountNoBank account name or number to deposit into (e.g., 'Undeposited Funds', '1000'). Will be looked up to get ID.
department_nameNoHeader-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID.
department_idNoHeader-level department/location ID (use if you already know it, otherwise use department_name)
memoNoPrivate memo for the sales receipt
doc_numberNoReference number for the sales receipt (optional)
linesYesArray of line items. Each line references an item (product/service). Provide item_name OR item_id (name preferred).
draftNoIf true, validate and show preview without creating (default: true)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that it accepts names for auto-lookup and returns receipt details and a link. However, it does not mention side effects (e.g., recording a transaction), prerequisites (e.g., authentication), or error handling (e.g., what happens if lookup fails).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long, each sentence carrying distinct value: purpose, key behavior, and output. No redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 10 parameters, no output schema, and no annotations, the description covers the main behaviors and output. However, it omits mention of the draft parameter's default (true), which is important for understanding the tool's validation mode. Overall, it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so each parameter is already described. The description adds value by highlighting the auto-lookup pattern and the critical distinction that lines should refer to items, not accounts. This is additional context beyond the schema's individual descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a sales receipt, emphasizes that lines reference items (products/services) not accounts, and distinguishes from siblings like edit_sales_receipt and get_sales_receipt. It also mentions automatic ID lookup and returns details and a link.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a key guideline: lines reference items not accounts, which helps avoid misuse. It also mentions the automatic ID lookup feature. However, it does not explicitly contrast with similar tools like create_invoice or explain when to choose this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_vendor_creditA

Create a vendor credit. Accepts vendor/account/department names (will lookup IDs automatically). Lines represent credit amounts applied to expense accounts. Returns credit details and a link to view in QuickBooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
vendor_nameNoVendor display name (e.g., 'Acme Corp'). Will be looked up to get ID.
vendor_idNoVendor ID (use if you already know it, otherwise use vendor_name)
txn_dateYesTransaction date in YYYY-MM-DD format
department_nameNoHeader-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID.
department_idNoHeader-level department/location ID (use if you already know it, otherwise use department_name)
ap_accountNoAccounts Payable account name or number (optional, defaults to standard AP)
memoNoPrivate memo for the vendor credit
doc_numberNoReference number for the vendor credit (optional)
linesYesArray of line items. Each line credits an expense account.
draftNoIf true, validate and show preview without creating (default: true)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description notes that the tool performs automatic name-to-ID lookups and returns credit details plus a QuickBooks link, which adds useful behavioral context. However, it does not disclose whether the operation is destructive, idempotent, or requires specific permissions, leaving some gaps given the lack of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences that front-load the primary action and key features. Every sentence adds critical information without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (10 parameters, no output schema, no annotations), the description explains the basic concept and return value adequately. However, it omits details like error handling, the default for 'draft', or how to structure lines more precisely, leaving some gaps for a fully informed agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers 100% of parameters with descriptions, so the baseline is 3. The description enhances understanding by explaining that name fields are for automatic ID lookup and that lines represent credit amounts applied to expense accounts, adding value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Create a vendor credit') and specifies the key resource and behavior: accepting names with automatic ID lookup and representing lines as credit amounts applied to expense accounts. This distinctly sets it apart from sibling tools like create_bill or create_expense, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives (e.g., create_bill for vendor payments). While the name and context imply its use for vendor credits, an AI agent would benefit from additional context like 'Use this when you need to record a credit from a vendor, not an expense or bill.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_entityA

Permanently delete a QuickBooks transaction. Supports journal entries, bills, invoices, deposits, sales receipts, expenses, vendor credits, and bill payments. Uses a two-step flow: first call previews what will be deleted, second call with confirm=true executes the deletion. Note: Customers cannot be deleted — use edit_customer with active=false to deactivate instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
entity_typeYesThe type of entity to delete.
idYesThe entity ID to delete.
confirmNoIf true, execute the deletion. If false (default), show a preview of what will be deleted.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. It states the deletion is permanent, describes the two-step preview-and-confirm flow, and notes that customers cannot be deleted. However, it does not mention potential error states, idempotency, or whether the tool is safe to retry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: two sentences conveying purpose, supported types, usage flow, and an exclusion. No filler words. The important details are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, no output schema, and moderate complexity (two-step delete), the description covers the essential workflow and constraints. It could optionally describe what the preview returns, but the basic completeness is strong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage across all 3 parameters. The description adds value by explaining the two-step flow's relationship to the confirm parameter and listing the allowed entity types, which enriches understanding beyond the enum definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a concrete verb-resource pair: 'permanently delete a QuickBooks transaction.' It lists supported entity types (journal entries, bills, etc.) and distinguishes from the sibling tool edit_customer by explicitly stating customers cannot be deleted and must be deactivated instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: for deleting specific transaction types. It also tells when not to use it (for customers) and offers an alternative (edit_customer with active=false). The two-step flow is clearly described.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_billA

Modify an existing bill. Can update vendor, date, due date, memo, and/or lines. For lines: provide line_id to update existing line, omit to add new line, set delete=true to remove. Note: DepartmentRef is header-level only — lines do not support department.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesBill ID to edit
vendor_nameNoNew vendor display name (e.g., 'Simplisafe', 'PG&E'). Auto-resolved to ID.
txn_dateNoNew transaction date in YYYY-MM-DD format (optional)
due_dateNoNew due date in YYYY-MM-DD format (optional)
memoNoNew private memo (optional)
department_nameNoHeader-level department/location name (auto-resolved to ID)
doc_numberNoReference number for the bill (optional)
linesNoLine modifications. Provide line_id to update existing, omit to add new.
draftNoIf true, validate and show preview without saving (default: true)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses important behaviors: DepartmentRef is header-level only (lines don't support department), and line modifications (add, update, delete via line_id and delete flag). Also mentions draft mode for validation without saving. Lacks info on permanence or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise two-sentence description focusing on core function and key details. Front-loaded with purpose, followed by essential behavioral notes. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 9 parameters and no output schema, the description covers critical behaviors (line editing, department scoping, draft mode). Missing return value description, but overall adequate for a modification tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds significant value beyond schema: explains line modification logic (line_id for update, omit for add, delete=true to remove) and clarifies department scoping. All parameters have schema descriptions, but the description enhances understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Modify an existing bill' with specific updatable fields (vendor, date, due date, memo, lines). This clearly conveys the tool's function and distinguishes it from other edit tool siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like create_bill or delete_entity. The description implies 'edit an existing bill' but does not provide a clear when-to-use or when-not-to-use statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_customerA

Modify an existing customer. Can update name, contact info, addresses, notes, taxable status, active status, hierarchy (parent/sub-customer), delivery method, and payment terms. Set active=false to deactivate (QuickBooks equivalent of delete).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustomer ID to edit
display_nameNoNew display name (must be unique in QuickBooks)
given_nameNoNew first/given name
middle_nameNoNew middle name
family_nameNoNew last/family name
suffixNoNew name suffix
company_nameNoNew company name
emailNoNew primary email address
phoneNoNew primary phone number
mobileNoNew mobile phone number
bill_addressNoNew billing address
ship_addressNoNew shipping address
notesNoNew notes about the customer
taxableNoWhether the customer is taxable
activeNoSet to false to deactivate customer (QuickBooks equivalent of delete)
parent_refNoParent customer name or ID (makes this a sub-customer). Auto-resolved to ID.
jobNoMark as a job (tracks work for a parent customer)
bill_with_parentNoBill this sub-customer with its parent
preferred_delivery_methodNoHow invoices are delivered: Print, Email, or None
sales_term_refNoDefault payment terms name (e.g., 'Net 30'). Auto-resolved to ID.
draftNoIf true, validate and show preview without saving (default: true)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must cover behavior. It mentions auto-resolution for parent_ref and sales_term_ref, and draft mode validation, but lacks details on authentication, error states, or side effects beyond deactivation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences efficiently deliver purpose and key behavior. No wasted words; front-loaded with the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (21 params, nested objects, no output schema), the description covers core functionality but omits return value, error handling, and validation details. Draft mode is explained, which helps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds a summary of updatable fields and clarifies active's deactivation effect, but mostly overlaps with schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Modify' and the resource 'customer', listing specific fields. It distinguishes from siblings like create_customer and delete_entity, but could be more explicit about when to use this vs other edit tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some context (e.g., deactivation via active=false) but no explicit when-to-use or when-not-to-use guidance. It doesn't mention alternatives like delete+recreate or when to use draft mode.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_depositA

Modify an existing deposit. Can update date, memo, deposit account, department, and/or lines. CRITICAL for line changes: The QB Deposit API does NOT replace lines - it merges them. Lines WITH line_id update existing lines. Lines WITHOUT line_id are ADDED as new. Lines NOT included are KEPT unchanged. To 'delete' a line, you must include ALL existing lines with their line_ids and set unwanted lines to amount: 0. Line amounts must sum to the original deposit total (use expected_total to override for corrupted deposits).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDeposit ID to edit
txn_dateNoNew transaction date in YYYY-MM-DD format (optional)
memoNoNew private memo (optional)
deposit_to_accountNoNew deposit account name/number (Bank account)
department_nameNoHeader-level department/location name (auto-resolved to ID)
linesNoIMPORTANT: You MUST include ALL existing lines with their line_ids. Lines without line_id are ADDED (not replaced). Lines not included are KEPT (not deleted). To 'delete' a line, set its amount to 0. Line amounts must sum to original deposit total.
draftNoIf true, validate and show preview without saving (default: true)
expected_totalNoOverride total validation with this expected amount (for fixing corrupted deposits). Lines must sum to this value instead of current deposit total.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses the critical merge behavior of the QB Deposit API: lines are merged, not replaced. It explains how to delete lines by setting amount to 0 and the total validation, providing comprehensive behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the action, followed by important behavioral caveats. It could benefit from bullet points for readability, but it efficiently conveys critical information without unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters, 100% schema coverage, and no output schema or annotations, the description covers purpose, line merge behavior, total validation, and draft parameter. It is complete for a modification tool, though omitting return value description is acceptable without output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions, but the tool description adds essential context beyond the schema, especially for the lines parameter and expected_total. It clarifies the merge logic and override scenario, which is not evident from schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Modify an existing deposit' and lists the updatable fields (date, memo, deposit account, department, lines), distinguishing it from sibling tools like create_deposit and get_deposit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on line handling: how to update, add, and delete lines, and when to use expected_total for corrupted deposits. It lacks explicit when-not-to-use but provides sufficient context for correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_expenseA

Modify an existing expense (Purchase). Can update date, memo, payment account, and/or lines. Note: PaymentType (Cash/Check/CreditCard) cannot be changed after creation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExpense (Purchase) ID to edit
txn_dateNoNew transaction date in YYYY-MM-DD format (optional)
memoNoNew private memo (optional)
payment_accountNoNew payment account name/number (Bank or Credit Card account)
linesNoLine modifications. Provide line_id to update existing, omit to add new.
department_nameNoHeader-level department/location name (auto-resolved to ID)
entity_nameNoPayee/vendor display name (e.g., 'Cozzini Bros., Inc.'). Will be looked up to get ID.
entity_idNoPayee/vendor ID (use if you already know it, otherwise use entity_name)
draftNoIf true, validate and show preview without saving (default: true)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations were provided; the description adds a key behavioral constraint that PaymentType cannot be changed after creation. It does not disclose other side effects, permissions, or whether updates are immediately saved, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the purpose and essential fields, with a one-line note about an important restriction. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters and no output schema or annotations, the description is brief. It covers the core purpose and a key constraint, but omits details about the 'draft' parameter's behavior, how lines are manipulated, and the result of saving. The high schema coverage partially compensates, but the description could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters. The description lists updatable categories (date, memo, etc.) but adds little extra meaning beyond the schema, meeting the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states the verb 'Modify' and resource 'existing expense (Purchase)', and lists specific updatable fields. This clearly distinguishes it from sibling tools like create_expense or delete_entity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description indicates the tool is for modifying existing expenses and lists what can be updated, providing clear context. However, it does not explicitly state when to use versus alternatives like edit_bill or edit_invoice, though the resource name implicitly differentiates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_invoiceA

Modify an existing invoice. Can update date, due date, memo, customer, department, terms, email, online payment settings, and/or lines. For lines: provide line_id to update existing line, omit line_id to add new line (requires item_name), set delete=true to remove.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesInvoice ID to edit
txn_dateNoNew transaction date in YYYY-MM-DD format (optional)
due_dateNoNew due date in YYYY-MM-DD format (optional)
memoNoNew private memo (optional)
customer_memoNoNew customer-facing message visible on the invoice
bill_emailNoNew email address to send the invoice to
sales_term_refNoPayment terms name (e.g., 'Net 30'). Auto-resolved to ID.
allow_online_credit_card_paymentNoAllow customer to pay with credit card online
allow_online_ach_paymentNoAllow customer to pay via bank transfer (ACH) online
customer_nameNoNew customer display name (auto-resolved to ID)
department_nameNoHeader-level department/location name (auto-resolved to ID)
linesNoLine modifications. Provide line_id to update existing line, omit to add new line.
draftNoIf true, validate and show preview without saving (default: true)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Lists modifiable fields and line operations, but omits side effects (e.g., whether totals recalculate, permissions needed) and fails to clearly state that draft=true means no save (default behavior is preview only).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two-sentence description is concise, front-loads purpose, and avoids redundancy. Each sentence adds distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description does not mention return value or error handling. Covers main edit operations and line modifications, but missing key details about mutation effects and state changes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3). Description adds valuable context beyond schema for lines (update vs add vs delete) and draft behavior, justifying a higher score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Modify an existing invoice' and enumerates specific fields that can be updated. Differentiates from create_invoice and other edit tools by scope, but does not explicitly exclude using for other invoice types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides basic guidance for lines (update/add/delete) but lacks explicit when-to-use or when-not-to-use compared to siblings like edit_bill or create_invoice. No alternatives mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_journal_entryA

Modify an existing journal entry. Can update date, memo, doc_number, and/or lines. For lines: provide line_id to update existing line, omit line_id to add new line, set delete=true to remove a line. Validates debits=credits before saving.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesJournal entry ID to edit
txn_dateNoNew transaction date in YYYY-MM-DD format (optional)
memoNoNew private memo (optional)
doc_numberNoNew journal number (optional)
linesNoLine modifications. Provide line_id to update existing line, omit to add new line.
draftNoIf true, validate and show preview without saving (default: true)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full burden. It reveals validation (debits=credits) and draft preview behavior. However, it omits details on mutation side effects, reversibility, or required permissions, leaving gaps for a full understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief (4 sentences), front-loads the main purpose, and structures instructions logically. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (nested lines, validation), the description covers key aspects: field updates, line CRUD, and draft validation. However, it lacks return value expectations or error scenarios, which is acceptable given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all parameters (100% coverage), but the description adds significant value by explaining line modification patterns (update via line_id, add via omission, delete via delete flag). This goes beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool modifies an existing journal entry and lists updatable fields (date, memo, doc_number, lines). This distinguishes it from sibling tools like create_journal_entry (new) and get_journal_entry (read-only).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While the description implies use when editing existing entries, it lacks explicit guidance on when not to use it or alternatives. Sibling context (e.g., create_journal_entry for new entries) provides some differentiation, but the description itself does not clarify.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_sales_receiptA

Modify an existing sales receipt. Can update date, memo, deposit account, department, and/or lines. For lines: provide line_id to update existing line, omit line_id to add new line (requires item_name), set delete=true to remove.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSales receipt ID to edit
txn_dateNoNew transaction date in YYYY-MM-DD format (optional)
memoNoNew private memo (optional)
deposit_to_accountNoNew deposit account name/number (Bank account)
department_nameNoHeader-level department/location name (auto-resolved to ID)
linesNoLine modifications. Provide line_id to update existing line, omit to add new line.
draftNoIf true, validate and show preview without saving (default: true)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description covers line edit/add/delete logic and draft mode. Lacks info on idempotency, error handling, or full side effects, but adequate for mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences: general purpose then line details. No fluff, key information front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers main modifications adequately. Missing return value description and error conditions, but overall complete for a moderate-complexity tool with no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%. Description adds value by explaining line modification semantics (line_id, delete=true) and auto-resolution of item_name, going beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Modify an existing sales receipt' with specific fields (date, memo, deposit account, department, lines), distinguishing it from create and other edit tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives mentioned. Usage is implied by 'modify existing' but lacks guidance on choosing between edit and create or other edit tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_vendor_creditA

Modify an existing vendor credit. Can update vendor, date, memo, ref number, and/or lines. For lines: provide line_id to update existing line, omit line_id to add new line (requires amount and account_name), set delete=true to remove. Note: DepartmentRef is header-level only — lines do not support department.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVendor Credit ID to edit
vendor_nameNoNew vendor display name (auto-resolved to ID)
txn_dateNoNew transaction date in YYYY-MM-DD format (optional)
memoNoNew private memo (optional)
doc_numberNoNew reference number (optional)
linesNoLine modifications. Provide line_id to update existing line, omit to add new line.
draftNoIf true, validate and show preview without saving (default: true)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses behaviors: lines can be added, updated, or deleted via specific fields; DepartmentRef is header-level only. It does not mention permissions or return values, but covers key behavioral aspects well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with four sentences. It starts with the core purpose, then lists updatable fields, details line rules, and adds a constraint note. No redundant words; each sentence adds necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 7 params and no output schema, the description explains input behavior well. It covers line item operations and a key constraint. Missing response details (e.g., success confirmation or updated object) but otherwise complete given the QBO context and sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions. The description adds value beyond schema by providing line manipulation rules (requires amount and account_name for new lines, delete=true for removal) and a note about DepartmentRef constraint, which is not in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Modify an existing vendor credit') and the resource ('vendor credit'). It lists specific updatable fields (vendor, date, memo, ref number, and/or lines), distinguishing it from siblings like create_vendor_credit or get_vendor_credit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (modify existing) but lacks explicit when-to-use or when-not-to-use guidance. It does not contrast with alternatives like create_vendor_credit or other edit tools, though it provides specific line manipulation rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_balance_sheetB

Get a Balance Sheet report. Can be broken down by department/location.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_of_dateNoReport as of this date in YYYY-MM-DD format (defaults to today)
summarize_byNoHow to summarize columns: 'Total' (default), 'Month', 'Week', 'Days', 'Quarter', 'Year', 'Customers', 'Vendors', 'Classes', 'Departments', 'Employees', 'ProductsAndServices'
departmentNoFilter to a specific department/location ID
accounting_methodNoAccounting method: 'Accrual' (default) or 'Cash'

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description lacks disclosure about read-only behavior, constraints, pagination, or caching. Only states it can be broken down, which is a feature not a behavioral trait.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with purpose. No redundant words or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a financial report tool with 4 parameters and no output schema or annotations, the description is too brief. It omits output details, default behaviors, prerequisites, and error conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so description adds minimal value. The sentence 'Can be broken down by department/location' adds context to the 'department' parameter, but does not elaborate on other parameters like summarize_by or accounting_method.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: 'Get a Balance Sheet report.' Distinguishes from siblings like get_profit_loss by mentioning breakdown by department/location.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives. Only implies usage for balance sheet reports, but no guidance on when to prefer this over other reports or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_billA

Fetch a single bill by ID with full details including SyncToken (needed for edits). Returns vendor, date, due date, amount, AP account, line details.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe bill ID

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behavioral trait: returns SyncToken for edits. Lists returned fields (vendor, date, etc.). No annotations, so description carries full burden; adequately transparent for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words, action first. Ideal conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, description adequately specifies return fields. Lacks error handling or edge cases, but sufficient for a simple fetcher.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already describes 'id' as 'The bill ID' (100% coverage). Description adds no additional meaning beyond 'by ID', so baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a single bill by ID with full details, distinguishing it from list or query tools. Verb 'fetch' and resource 'bill' are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage before editing ('needed for edits'), but does not explicitly state when to use this over alternatives like query or list. No when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bill_paymentA

Fetch a single bill payment by ID with full details including SyncToken. Shows vendor, date, pay type, bank account, linked bills/credits with applied amounts, and flags any unapplied amount (payment total not matching net applied lines).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe bill payment ID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses what fields are returned (vendor, date, pay type, etc.) and mentions flagging unapplied amounts, but does not cover side effects, permissions, or idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The first sentence front-loads the main action and key detail (SyncToken), and the second lists contents concisely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple fetch tool with one parameter and no output schema, the description adequately covers what is returned. Minor omission: no mention of error cases or behavior when ID not found, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter 'id', and the description adds no additional meaning beyond what the schema already provides ('the bill payment ID'). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetch a single bill payment by ID with full details including SyncToken', specifying the verb, resource, and scope. It distinguishes from siblings like 'get_bill' by focusing on payments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for fetching a specific bill payment by ID but provides no explicit guidance on when to use it vs. alternatives, no when-not-to-use scenarios, and no context about prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_infoA

Get information about the connected QuickBooks company.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It indicates a read operation but lacks details on what information is returned, auth requirements, or any rate limits. The description is minimal and does not disclose behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no superfluous words. Every word contributes to the meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no parameters, the description is adequate but could mention the type of information returned (e.g., company name, address). It leaves the agent guessing about the output structure, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema coverage is 100% (vacuously). The description adds a slight semantic cue by specifying 'connected QuickBooks company,' implying no parameterization is needed. This is sufficient for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb "Get" and the resource "information about the connected QuickBooks company." It distinguishes from sibling tools like `get_bill` or `get_customer` by targeting general company info rather than a specific entity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving top-level company details, but provides no explicit guidance on when to use this tool versus alternatives like `query` or `list_accounts`. No exclusions or context are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_customerA

Fetch a single customer by ID with full details including SyncToken (needed for edits). Returns name, contact info, addresses, balance, hierarchy (parent/sub-customer), and active status.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe customer ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It accurately describes the read-only nature (Fetch) and specifies the fields returned. It includes the important behavioral detail that SyncToken is required for edits, adding value beyond a simple 'get' statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that packs essential information: purpose, return details, and a key usage hint. It is concise and front-loaded with the main action. Minor improvement could be splitting into two sentences for readability, but it is effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-ID tool with one parameter and no output schema, the description sufficiently covers the return values and hints at the editing workflow. It does not mention error handling or authentication, but given the tool's simplicity, it is adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with a description for 'id'. The description adds meaning by stating 'Fetch a single customer by ID', reinforcing that the ID identifies a customer, and mentions that the response includes SyncToken, which is relevant to the id's use in subsequent edits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetch a single customer by ID', specifying the verb and resource. It distinguishes from sibling tools like list_accounts or query, and from other get_* tools by mentioning customer-specific details like SyncToken, hierarchy, and balance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly notes that the returned SyncToken is 'needed for edits', which implies that this tool should be called before edit_customer. It provides clear context for when to use the tool, though it does not explicitly mention when not to use it or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_depositA

Fetch a single deposit by ID with full details including SyncToken (needed for edits). Returns deposit account, date, memo, and line details showing source accounts and amounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe deposit ID

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description adds behavioral context by mentioning SyncToken needed for edits and listing returned fields. Lacks disclosure of error handling or authorization requirements, though these are less critical for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, well-structured sentence front-loads the action and packs essential information without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one parameter, no output schema, and no annotations, the description adequately covers what the tool does and returns. It provides complete context for a simple fetch operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with basic 'id' description. Description adds purpose (fetch deposit details) but does not provide additional semantic meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Fetch a single deposit by ID' with specific verb and resource. It lists return details (deposit account, date, memo, line details) and distinguishes from sibling tools that list or query various entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage for retrieving deposit details and obtaining SyncToken for edits, providing clear context. However, it lacks explicit when-not-to-use or named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_expenseA

Fetch a single expense (Purchase) by ID with full details including SyncToken. Covers Expenses, Checks, and Credit Card charges. Returns payment type, account, date, amount, line details.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe expense (Purchase) ID

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided. The description uses 'Fetch' implying a read operation but does not confirm read-only behavior, mention error handling, permissions, or side effects. For a tool with no annotations, more transparency is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at two sentences, front-loading the main purpose. It could be slightly better structured but is not verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description specifies what is returned (payment type, account, date, amount, line details) and the types covered (Expenses, Checks, Credit Card charges). Although no output schema exists, the description provides a reasonable overview. Could be improved by clarifying differences from similar fetch tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single parameter 'id' described as 'The expense (Purchase) ID'. The description adds no additional meaning beyond 'by ID', so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Fetch'), the resource ('a single expense (Purchase)'), and the scope ('Covers Expenses, Checks, and Credit Card charges'). It also lists what is returned, distinguishing it from sibling tools like get_bill or get_deposit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing a single expense by ID, but does not explicitly state when to use versus siblings (e.g., get_bill for bills). No 'when not to use' or alternative tools mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_invoiceA

Fetch a single invoice by ID with full details including SyncToken (needed for edits). Returns customer, date, due date, balance, department, line details with items/qty/price.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe invoice ID

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. It correctly implies read-only operation but does not explicitly state non-destructive behavior or potential errors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with main action and key detail (SyncToken), then lists returned fields. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Only one parameter and no output schema; description is sufficient, listing key return data. Could mention edge cases (e.g., 404).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage 100%; description adds 'by ID' but no extra meaning beyond what schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it fetches a single invoice by ID, lists returned fields, and distinguishes from siblings like edit_invoice by noting SyncToken is needed for edits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies use before edit_invoice by highlighting SyncToken. Could explicitly contrast with query for listing, but context is clear for this simple fetch.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_journal_entryA

Fetch a single journal entry by ID with full details including SyncToken (needed for edits). Returns formatted summary and writes full object to temp file.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe journal entry ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses the side effect of writing to a temp file and the return of a formatted summary. This adds useful behavioral context beyond a simple fetch.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with key information front-loaded. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get tool with one parameter and no output schema, the description covers return details (formatted summary and temp file write). Could mention error behavior but is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single parameter 'id' described as 'The journal entry ID'. The description adds no extra semantics but is consistent with the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a single journal entry by ID, providing full details including SyncToken. It specifies the resource and action, distinguishing it from sibling tools like list or create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It indicates usage for edits by mentioning SyncToken is needed for edits. However, it does not explicitly exclude other use cases or compare with alternatives like query.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_profit_lossC

Get a Profit and Loss (Income Statement) report. Can be broken down by department/location.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNoStart date in YYYY-MM-DD format
end_dateNoEnd date in YYYY-MM-DD format
summarize_byNoHow to summarize columns: 'Total' (default), 'Month', 'Week', 'Days', 'Quarter', 'Year', 'Customers', 'Vendors', 'Classes', 'Departments', 'Employees', 'ProductsAndServices'
departmentNoFilter to a specific department/location ID
accounting_methodNoAccounting method: 'Accrual' (default) or 'Cash'

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It only notes the ability to break down by department/location, which is a behavioral trait. However, it does not disclose that the tool is likely read-only, safe, or any other behavioral aspects (e.g., no side effects, authentication needs). This is insufficient for a report tool where agents need to know it is a query operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at two sentences. The first sentence states the core purpose, and the second adds an optional capability. There is no redundant information, and every word serves a purpose. It is well-structured for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema and no annotations, the description provides minimal context. It does not explain the report format, that it is read-only, or what to expect in the response. For a financial report tool, agents need more context to use it correctly, especially since it lacks structured metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all five parameters with clear descriptions, achieving 100% coverage. The description adds minimal value, merely hinting at the department parameter by mentioning breakdown. The parameter semantics are adequately covered by the schema, so the description does not need to compensate significantly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool retrieves a Profit and Loss report, which is a standard financial statement. The mention of breakdown by department/location adds specificity, distinguishing it from generic report tools. However, it does not explicitly differentiate from sibling tools like get_balance_sheet or get_trial_balance, though the resource name is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as get_balance_sheet or get_trial_balance. There is no mention of prerequisites, context, or conditions. The description merely states what it does, leaving the agent to infer usage from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sales_receiptA

Fetch a single sales receipt by ID with full details including SyncToken (needed for edits). Returns customer, date, deposit account, department, line details with items/qty/price.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe sales receipt ID

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool returns full details including the SyncToken necessary for edits, and lists the return fields (customer, date, deposit account, department, line details). This is good transparency about the tool's behavior, though it does not mention potential errors or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise, with two sentences. The first sentence states the action and key detail (SyncToken for edits). The second lists what is returned. Every word earns its place, and it is front-loaded with the primary purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (one parameter, no output schema), the description is fairly complete. It explains what the tool does and what it returns. It could mention that the ID is required and must be valid, but overall it provides sufficient context for a straightforward fetch operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has only one parameter 'id' with a basic description. The description adds context by stating the ID is needed for fetching and that SyncToken is included for edits. However, with 100% schema coverage, the description adds minimal value beyond the schema. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a single sales receipt by ID, specifying the verb and resource. It distinguishes from sibling tools like create_sales_receipt and edit_sales_receipt by focusing on retrieval. Mentioning 'SyncToken needed for edits' provides additional context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for viewing or preparing to edit a sales receipt but does not explicitly differentiate when to use this tool over other similar get_* tools or provide alternative suggestions. The context is clear but lacks explicit guidance on when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_trial_balanceA

Get a Trial Balance report. Useful for month-end close and reconciliation. Note: Trial Balance does not support department/location breakdown in QuickBooks Online.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNoStart date in YYYY-MM-DD format
end_dateNoEnd date in YYYY-MM-DD format
accounting_methodNoAccounting method: 'Accrual' (default) or 'Cash'

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full burden of behavioral disclosure. It mentions a limitation (no department/location breakdown) but does not describe the return format, data freshness, or other behavioral aspects. The description adds some value but lacks comprehensive transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise with two sentences and a note, all front-loaded with essential information. No redundancy or wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple schema (3 string parameters, no enums, no output schema), the description is fairly complete. It covers use cases and a key limitation. However, it could mention default behavior for empty dates or result handling to be fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters (start_date, end_date, accounting_method) have clear descriptions in the input schema. The tool description adds no additional meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a Trial Balance report' and provides context about its usefulness for month-end close and reconciliation. However, it does not explicitly distinguish this tool from sibling report tools like get_balance_sheet or get_profit_loss, which share similar use cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies when to use the tool ('month-end close and reconciliation') and includes an important limitation (no department/location breakdown in QuickBooks Online). While it gives good context, it lacks explicit guidance on when not to use it or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vendor_creditA

Fetch a single vendor credit by ID with full details including SyncToken (needed for edits). Returns vendor, date, memo, ref number, AP account, and line details showing expense accounts and amounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe vendor credit ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It fully describes what is returned (SyncToken, vendor, date, etc.). It does not explicitly state it is a safe read-only operation, but the verb 'Fetch' implies no side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that lists the tool's function and output components with no extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple fetch-by-ID tool with no output schema, the description adequately covers what the tool returns. It could mention that only one record is returned, but this is implied. Missing details like error handling are acceptable for this simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'id' is described in the schema as 'The vendor credit ID'. The description adds 'by ID' but provides no additional semantics beyond what the schema already provides. With 100% schema coverage, baseline is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetch a single vendor credit by ID with full details including SyncToken (needed for edits)'. It specifies the verb 'Fetch', the resource 'vendor credit', and distinguishes from siblings like edit_vendor_credit by mentioning SyncToken for edits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage before editing by noting 'SyncToken (needed for edits)'. It does not explicitly state when not to use or provide alternatives, but given the context of sibling tools, the purpose is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_accountsA

List all accounts in the chart of accounts. Returns AcctNum (the user-facing account number), Name, AccountType, AccountSubType, and CurrentBalance. Use AcctNum to reference accounts in other queries or operations.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_typeNoOptional filter by account type (e.g., 'Bank', 'Expense', 'Income', 'Other Current Asset', 'Fixed Asset', 'Other Current Liability', 'Equity')
active_onlyNoIf true, only return active accounts (default: true)

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry full burden. It states the tool returns fields but does not disclose any behavioral traits such as pagination, rate limits, or authorization requirements. It implies a read operation but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no waste. The first sentence states the core purpose, and the second provides actionable guidance. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains return fields and usage. However, it lacks details on pagination or default behavior (e.g., account ordering). Still, it is sufficient for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers both parameters with descriptions (100% coverage), so baseline is 3. The description adds value by mentioning the specific returned fields and advising to use AcctNum for referencing, enhancing parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'all accounts in the chart of accounts', which is specific and distinct from sibling tools that deal with creation, editing, or other reports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates when to use the tool (to get account numbers for further operations) but does not explicitly state when not to use or compare to alternatives like 'query' or 'account_period_summary'. However, the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qbo_authenticateA

Authenticate with QuickBooks using OAuth (local credential mode only). Step 1: Call with no arguments to get the authorization URL. Step 2: After authorizing in browser, call with authorization_code and realm_id from the callback URL. This tool only works when QBO_CREDENTIAL_MODE is 'local' (the default).

ParametersJSON Schema
NameRequiredDescriptionDefault
authorization_codeNoAuthorization code from the QuickBooks OAuth callback URL (the 'code' parameter)
realm_idNoCompany/realm ID from the callback URL (the 'realmId' parameter). Required when providing authorization_code.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses two-step process, browser interaction, and mode restriction. Lacks explicit mention of return values (e.g., whether it returns success or token).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, no wasted words. Each sentence adds necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description covers process, parameters, and restrictions well. Could improve by stating output of each step, but still adequate for usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with descriptions. The description adds value by explaining the sequential usage and where to obtain the parameter values from the callback URL.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool authenticates with QuickBooks via OAuth, with a specific two-step process. No sibling tool does authentication, so distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly describes the two-step call sequence: first with no arguments to get authorization URL, second with authorization_code and realm_id from callback. Also states the credential mode restriction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

queryA

Execute a QuickBooks query using SQL-like syntax. Supports querying any entity type (Customer, Vendor, Invoice, Bill, Account, Item, Department, etc.). Results are written to a file to preserve context. Defaults to MAXRESULTS 1000 if not specified. Examples: 'SELECT * FROM Customer', 'SELECT * FROM SalesReceipt WHERE TxnDate >= '2025-11-01' AND TxnDate <= '2025-11-30''

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesThe SQL-like query string. Common entities: Customer, Vendor, Invoice, Bill, Account, Item, Department, JournalEntry, Purchase, Payment, SalesReceipt, Deposit. Add MAXRESULTS N to limit results (default: 1000). Note: Most transaction fields (DepartmentRef, AccountRef, Line) are not filterable. Error responses include valid filterable fields for the entity. Use query_account_transactions for account/department filtering.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses that results are written to a file, default MAXRESULTS is 1000, most transaction fields are not filterable, and error responses include valid filterable fields. This is valuable behavioral context, though it could mention if the operation is read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (three sentences plus an example) with no wasted words. It front-loads the action and resource, provides examples, and includes important constraints. Every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema), the description covers all necessary aspects: what it does, how to use it, defaults, limitations, and error handling. It is complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds the file-writing behavior and the hint about using 'query_account_transactions' for filtering, which adds value beyond the schema. However, the schema already covers entity types and MAXRESULTS, so the added value is moderate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Execute a QuickBooks query' and the resource 'using SQL-like syntax'. It lists supported entity types and provides examples. It also distinguishes from the sibling tool 'query_account_transactions' by directing account/department filtering there.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use (any entity type) and when not to (account/department filtering, directing to 'query_account_transactions'). Also mentions default MAXRESULTS and the note about non-filterable fields, guiding the agent on query construction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_account_transactionsA

Query all transactions affecting a specific account. Searches across JournalEntry, Purchase, Deposit, SalesReceipt, Bill, Invoice, and Payment. Returns consolidated list with date, type, amount (debit/credit), and description. Useful for investigating account balance discrepancies.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYesAccount name, number (AcctNum), or ID. Examples: 'Tips', '2320', '116'
start_dateNoStart date YYYY-MM-DD (default: start of year)
end_dateNoEnd date YYYY-MM-DD (default: today)
departmentNoFilter to specific department/location (optional)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It discloses that the tool searches across multiple transaction types and returns a consolidated list with specific fields. However, it lacks details on pagination, performance, or potential errors, which are important for a query tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three sentences, front-loading the purpose and providing key details. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the return values (date, type, amount, description). It covers the complexity of searching across multiple transaction types. However, it omits information about pagination, limits, or sorting, which are relevant for a query tool but not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds context by mentioning the transaction types searched, which indirectly relates to the `account` parameter, but does not provide additional semantic meaning beyond what the schema already offers. No extra parameter details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it queries all transactions affecting a specific account, lists the transaction types covered (JournalEntry, Purchase, etc.), and specifies the returned fields (date, type, amount). This distinguishes it from sibling tools like `get_bill` (single entity retrieval) or `list_accounts` (listing accounts).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates it is 'useful for investigating account balance discrepancies', providing clear context for when to use it. It does not explicitly state exclusions or alternatives, but the sibling context shows many `get_*` tools for individual transactions, making the use case clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 36 tool updatesv0.5.2
    • First observedaccount_period_summary
    • First observedcreate_bill
    • First observedcreate_bill_payment
    • First observedcreate_customer
    • First observedcreate_deposit
    • First observedcreate_expense
    • First observedcreate_invoice
    • First observedcreate_journal_entry
    • First observedcreate_sales_receipt
    • First observedcreate_vendor_credit
    • First observeddelete_entity
    • First observededit_bill
    • First observededit_customer
    • First observededit_deposit
    • First observededit_expense
    • First observededit_invoice
    • First observededit_journal_entry
    • First observededit_sales_receipt
    • First observededit_vendor_credit
    • First observedget_balance_sheet
    • First observedget_bill
    • First observedget_bill_payment
    • First observedget_company_info
    • First observedget_customer
    • First observedget_deposit
    • First observedget_expense
    • First observedget_invoice
    • First observedget_journal_entry
    • First observedget_profit_loss
    • First observedget_sales_receipt
    • First observedget_trial_balance
    • First observedget_vendor_credit
    • First observedlist_accounts
    • First observedqbo_authenticate
    • First observedquery
    • First observedquery_account_transactions

TDQS

A4/5.0

Scored across 36 tools

Disambiguation5/5

Each tool targets a distinct entity or operation (e.g., create_bill vs. create_invoice, get_balance_sheet vs. get_profit_loss). There is no overlap in purpose; even similar operations like edit_bill and edit_expense operate on different business objects. Clear disambiguation.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (create_bill, get_invoice, list_accounts). Minor deviations include query (no noun) and qbo_authenticate (prefix instead of verb), but these are isolated and still intuitive.

Tool Count5/5

With 36 tools covering CRUD for multiple financial entities, reports, and utilities, the count is appropriate for a comprehensive QuickBooks integration. Each tool addresses a specific need without unnecessary duplication.

Completeness5/5

The tool set covers the full lifecycle of core entities (customers, vendors, invoices, bills, payments, deposits, expenses, journal entries) with create, read, update, and delete operations. Reports and a generic query tool fill gaps, making it functionally complete for typical accounting workflows.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to query and manage QuickBooks Online data through natural language, including customers, invoices, bills, vendors, accounts, and financial reports.
    7
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    AI bookkeeper for small businesses that connects to QuickBooks Online. Enables users to query financial data like bank balances, P\&L reports, and invoices through natural language in Claude Desktop or Cursor.
    6
    38 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects AI assistants to QuickBooks Online, enabling management of invoices, customers, expenses, and reports through natural language.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables full CRUD operations on 29 QuickBooks Online entity types and 11 financial reports via natural language, allowing users to manage customers, invoices, payments, and more through MCP-compatible clients.
    Apache 2.0