QuickBooks MCP
This QuickBooks MCP server enables financial professionals to manage QuickBooks Online using natural language through AI assistants. Key capabilities include:
Authentication & Setup: OAuth authentication with tokens stored locally or in AWS Secrets Manager (auto-refresh). Retrieve company info.
Querying & Reporting: Run SQL-like queries on any entity; list chart of accounts; generate Profit & Loss, Balance Sheet, and Trial Balance reports (with breakdowns by month, department, class, etc.); query account transactions and period summaries.
Transaction Management: Create, fetch, and edit a wide variety of transactions: journal entries, bills, expenses (cash/check/credit card), sales receipts, invoices, deposits, vendor credits, bill payments, and customers (including sub-customers/jobs). All operations support a default draft/preview mode for safety.
Automation & Safety: Automatic name resolution eliminates the need for internal QuickBooks IDs; deletion uses a two-step preview-and-confirm process.
Everything is designed for secure, efficient bookkeeping with minimal manual lookups.
Provides tools for interacting with QuickBooks Online, including financial reports (Profit & Loss, Balance Sheet, Trial Balance), journal entries, bills, expenses, account management, and SQL-like queries across all QuickBooks entities.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@QuickBooks MCPShow me last month's Profit and Loss"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 automaticallyFinancial 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 | Local file or AWS Secrets Manager |
Distribution | Clone from GitHub |
|
Related MCP server: penni-mcp
Prerequisites
QuickBooks Developer Account: Register at developer.intuit.com
Node.js 18+
Installation Options
Choose the setup that fits your use case:
Setup | Best For |
Quick setup, using your own QuickBooks app | |
Development, customization | |
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
Go to developer.intuit.com and sign in
Create a new app (or select an existing one)
Go to "Keys & credentials"
Note your Client ID and Client Secret
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:
Call
qbo_authenticatewith no arguments to get an authorization URLOpen the URL in your browser and authorize the app
Copy the
codeandrealmIdfrom the redirect URLCall
qbo_authenticateagain 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 build3. 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 SecureString2. 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_idNote: Due to a known Claude Code bug, environment variables from
.mcp.jsonare not reliably passed to MCP servers. The.envfile 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=trueOption 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.jsonare not reliably passed to MCP servers in some configurations. If Option B doesn't work, use the.envfile workaround.
Environment Variables
Variable | Default | Description |
|
| Credential storage: |
| - | QuickBooks app Client ID (local mode) |
| - | QuickBooks app Client Secret (local mode) |
|
| Custom credential file path. A leading |
|
| Return responses inline instead of writing to |
|
| Use QuickBooks sandbox environment. Also switches the "View in QuickBooks" deep links to |
|
| AWS region (aws mode) |
|
| Secrets Manager secret name (aws mode) |
|
| SSM parameter path (aws mode) |
Available Tools
Tool | Description |
Setup | |
| Set up OAuth credentials (local mode only) |
| Get connected company information |
Query & Reports | |
| Run SQL-like queries against any QuickBooks entity |
| List chart of accounts with filtering |
| Profit & Loss report (by month, department, class, etc.) |
| Balance Sheet report |
| Trial Balance 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 |
| All transactions affecting a specific account (13 posting entity types, paginated, optional sub-account rollup; see |
| Period summary for an account (opening/closing balance, debits, credits, count) |
Journal Entries | |
| Create a journal entry (validates debits = credits; lines take |
| Fetch a journal entry by ID |
| Modify an existing journal entry |
Bills | |
| Create a vendor bill (lines take |
| Fetch a bill by ID |
| Modify an existing bill |
Expenses | |
| Create an expense (Cash, Check, or Credit Card; payee may be a vendor, customer, or employee) |
| Fetch an expense by ID |
| Modify an existing expense |
Sales Receipts | |
| Create a sales receipt with item lines |
| Fetch a sales receipt by ID |
| Modify an existing sales receipt |
Invoices | |
| Create an invoice with item lines (customer required) |
| Fetch an invoice by ID |
| Modify an existing invoice |
Deposits | |
| Create a bank deposit (lines take |
| Fetch a deposit by ID |
| Modify an existing deposit (lines take |
Vendor Credits | |
| Create a vendor credit (lines take |
| Fetch a vendor credit by ID |
| Modify an existing vendor credit |
Bill Payments | |
| Pay bills and apply vendor credits (the QBO "check" / pay-bills flow) |
| Record a customer payment against open invoices (A/R counterpart to |
| Move money between two of the company's own accounts (bank↔bank, credit-card paydown) |
| Fetch a bill payment by ID; flags unapplied amounts |
Delete | |
| 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 |
|
| Vendor, Customer, or Employee. |
|
| Customer only — QuickBooks stores a |
|
| Vendor only. |
|
| 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_idkeeps 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 suiteTests 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
.envfile hasQBO_CREDENTIAL_MODE=awsCheck your AWS credentials and permissions
Verify the secret and parameter names match your configuration
Available Tools
36 toolsaccount_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.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Account name, number (AcctNum), or ID | |
| start_date | No | Start date YYYY-MM-DD (default: start of year) | |
| end_date | No | End date YYYY-MM-DD (default: today) | |
| department | No | Filter to specific department/location (optional) | |
| accounting_method | No | Accounting method: 'Accrual' (default) or 'Cash' |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_name | No | Vendor display name (e.g., 'Simplisafe', 'PG&E'). Will be looked up to get ID. | |
| vendor_id | No | Vendor ID (use if you already know it, otherwise use vendor_name) | |
| txn_date | Yes | Transaction date in YYYY-MM-DD format | |
| due_date | No | Due date in YYYY-MM-DD format (optional) | |
| department_name | No | Header-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID. | |
| department_id | No | Header-level department/location ID (use if you already know it, otherwise use department_name) | |
| ap_account | No | Accounts Payable account name or number (optional, defaults to standard AP) | |
| memo | No | Private memo for the bill | |
| doc_number | No | Reference number for the bill (optional) | |
| lines | Yes | Array of expense line items. Provide account_name OR account_id (name preferred). | |
| draft | No | If true, validate and show preview without creating (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_name | No | Vendor display name (e.g., 'US Foods'). Will be looked up to get ID. | |
| vendor_id | No | Vendor ID (use if you already know it, otherwise use vendor_name) | |
| payment_account | Yes | Bank account name or number the payment is drawn from (e.g., 'PLAT BUS CHECKING', '5752'). Will be looked up to get ID. | |
| txn_date | Yes | Payment date in YYYY-MM-DD format (use the bank debit date for bank-feed matching) | |
| memo | No | Private memo for the payment | |
| doc_number | No | Reference number, e.g., check number or EFT reference (optional) | |
| bills | Yes | Bills to pay. Each bill must belong to the vendor and have an open balance. | |
| credits | No | Vendor credits to apply against the bills (optional). Each credit must belong to the vendor and have remaining balance. | |
| draft | No | If true, validate and show preview without creating (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| display_name | Yes | Primary display name (must be unique in QuickBooks) | |
| given_name | No | First/given name (optional) | |
| middle_name | No | Middle name (optional) | |
| family_name | No | Last/family name (optional) | |
| suffix | No | Name suffix, e.g., 'Jr.' (optional) | |
| company_name | No | Company name (optional) | |
| No | Primary email address (optional) | ||
| phone | No | Primary phone number (optional) | |
| mobile | No | Mobile phone number (optional) | |
| bill_address | No | Billing address (optional) | |
| ship_address | No | Shipping address (optional, same shape as bill_address) | |
| notes | No | Notes about the customer (optional) | |
| taxable | No | Whether the customer is taxable (optional) | |
| parent_ref | No | Parent customer name or ID to create a sub-customer or job. Will be looked up to get ID. | |
| job | No | Mark this customer as a job (default: false). Jobs track work for a parent customer. | |
| bill_with_parent | No | If true, invoices for this sub-customer are billed to the parent (default: false) | |
| preferred_delivery_method | No | How invoices are delivered: Print, Email, or None | |
| sales_term_ref | No | Default payment terms name (e.g., 'Net 30'). Will be looked up to get ID. | |
| draft | No | If true, validate and show preview without creating (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| deposit_to_account | Yes | Bank account name or number receiving the deposit (e.g., 'PLAT BUS CHECKING', '5752'). Will be looked up to get ID. | |
| txn_date | Yes | Transaction date in YYYY-MM-DD format | |
| lines | Yes | Array of deposit line items. Each line represents a source of the deposit. Amounts can be positive or negative. | |
| department_name | No | Header-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID. | |
| department_id | No | Header-level department/location ID (use if you already know it, otherwise use department_name) | |
| memo | No | Private memo for the deposit | |
| draft | No | If true, validate and show preview without creating (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_type | Yes | Payment method: 'Cash', 'Check', or 'CreditCard'. Cannot be changed after creation. | |
| payment_account | Yes | Bank or credit card account name or number (e.g., 'PLAT BUS CHECKING', '5752'). Will be looked up to get ID. | |
| txn_date | Yes | Transaction date in YYYY-MM-DD format | |
| entity_name | No | Payee/vendor display name (e.g., 'Simplisafe', 'PG&E'). Will be looked up to get ID. | |
| entity_id | No | Payee/vendor ID (use if you already know it, otherwise use entity_name) | |
| department_name | No | Header-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID. | |
| department_id | No | Header-level department/location ID (use if you already know it, otherwise use department_name) | |
| memo | No | Private memo for the expense | |
| doc_number | No | Reference number for the expense (optional) | |
| lines | Yes | Array of expense line items. Provide account_name OR account_id (name preferred). | |
| draft | No | If true, validate and show preview without creating (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| txn_date | Yes | Transaction date in YYYY-MM-DD format | |
| customer_name | No | Customer display name (e.g., 'Cash Sales'). Will be looked up to get ID. | |
| customer_id | No | Customer ID (use if you already know it, otherwise use customer_name) | |
| due_date | No | Due date in YYYY-MM-DD format (optional) | |
| department_name | No | Header-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID. | |
| department_id | No | Header-level department/location ID (use if you already know it, otherwise use department_name) | |
| memo | No | Private memo for the invoice (internal, not visible to customer) | |
| customer_memo | No | Customer-facing message visible on the invoice | |
| bill_email | No | Email address to send the invoice to. Required if you want QuickBooks to email the invoice. | |
| sales_term_ref | No | Payment terms name (e.g., 'Net 30', 'Due on receipt'). Will be looked up to get ID. | |
| allow_online_credit_card_payment | No | Allow customer to pay this invoice with a credit card online. Must be explicitly set — company defaults do not apply via API. | |
| allow_online_ach_payment | No | Allow customer to pay this invoice via bank transfer (ACH) online. Must be explicitly set — company defaults do not apply via API. | |
| doc_number | No | Reference number for the invoice (optional) | |
| lines | Yes | Array of line items. Each line references an item (product/service). Provide item_name OR item_id (name preferred). | |
| draft | No | If true, validate and show preview without creating (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| txn_date | Yes | Transaction date in YYYY-MM-DD format | |
| memo | No | Private memo for the journal entry | |
| lines | Yes | Array of line items. Provide account_name OR account_id (name preferred). Optionally provide department_name OR department_id. | |
| draft | No | If true, validate and show preview without creating (default: true) | |
| doc_number | No | Journal number (shown as 'Journal no.' in QuickBooks). If not specified, QuickBooks will auto-assign the next number. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| txn_date | Yes | Transaction date in YYYY-MM-DD format | |
| customer_name | No | Customer display name (e.g., 'Cash Sales'). Will be looked up to get ID. | |
| customer_id | No | Customer ID (use if you already know it, otherwise use customer_name) | |
| deposit_to_account | No | Bank account name or number to deposit into (e.g., 'Undeposited Funds', '1000'). Will be looked up to get ID. | |
| department_name | No | Header-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID. | |
| department_id | No | Header-level department/location ID (use if you already know it, otherwise use department_name) | |
| memo | No | Private memo for the sales receipt | |
| doc_number | No | Reference number for the sales receipt (optional) | |
| lines | Yes | Array of line items. Each line references an item (product/service). Provide item_name OR item_id (name preferred). | |
| draft | No | If true, validate and show preview without creating (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_name | No | Vendor display name (e.g., 'Acme Corp'). Will be looked up to get ID. | |
| vendor_id | No | Vendor ID (use if you already know it, otherwise use vendor_name) | |
| txn_date | Yes | Transaction date in YYYY-MM-DD format | |
| department_name | No | Header-level department/location name (e.g., '20358', 'Cotati'). Will be looked up to get ID. | |
| department_id | No | Header-level department/location ID (use if you already know it, otherwise use department_name) | |
| ap_account | No | Accounts Payable account name or number (optional, defaults to standard AP) | |
| memo | No | Private memo for the vendor credit | |
| doc_number | No | Reference number for the vendor credit (optional) | |
| lines | Yes | Array of line items. Each line credits an expense account. | |
| draft | No | If true, validate and show preview without creating (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_type | Yes | The type of entity to delete. | |
| id | Yes | The entity ID to delete. | |
| confirm | No | If true, execute the deletion. If false (default), show a preview of what will be deleted. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Bill ID to edit | |
| vendor_name | No | New vendor display name (e.g., 'Simplisafe', 'PG&E'). Auto-resolved to ID. | |
| txn_date | No | New transaction date in YYYY-MM-DD format (optional) | |
| due_date | No | New due date in YYYY-MM-DD format (optional) | |
| memo | No | New private memo (optional) | |
| department_name | No | Header-level department/location name (auto-resolved to ID) | |
| doc_number | No | Reference number for the bill (optional) | |
| lines | No | Line modifications. Provide line_id to update existing, omit to add new. | |
| draft | No | If true, validate and show preview without saving (default: true) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Customer ID to edit | |
| display_name | No | New display name (must be unique in QuickBooks) | |
| given_name | No | New first/given name | |
| middle_name | No | New middle name | |
| family_name | No | New last/family name | |
| suffix | No | New name suffix | |
| company_name | No | New company name | |
| No | New primary email address | ||
| phone | No | New primary phone number | |
| mobile | No | New mobile phone number | |
| bill_address | No | New billing address | |
| ship_address | No | New shipping address | |
| notes | No | New notes about the customer | |
| taxable | No | Whether the customer is taxable | |
| active | No | Set to false to deactivate customer (QuickBooks equivalent of delete) | |
| parent_ref | No | Parent customer name or ID (makes this a sub-customer). Auto-resolved to ID. | |
| job | No | Mark as a job (tracks work for a parent customer) | |
| bill_with_parent | No | Bill this sub-customer with its parent | |
| preferred_delivery_method | No | How invoices are delivered: Print, Email, or None | |
| sales_term_ref | No | Default payment terms name (e.g., 'Net 30'). Auto-resolved to ID. | |
| draft | No | If true, validate and show preview without saving (default: true) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Deposit ID to edit | |
| txn_date | No | New transaction date in YYYY-MM-DD format (optional) | |
| memo | No | New private memo (optional) | |
| deposit_to_account | No | New deposit account name/number (Bank account) | |
| department_name | No | Header-level department/location name (auto-resolved to ID) | |
| lines | No | IMPORTANT: 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. | |
| draft | No | If true, validate and show preview without saving (default: true) | |
| expected_total | No | Override total validation with this expected amount (for fixing corrupted deposits). Lines must sum to this value instead of current deposit total. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Expense (Purchase) ID to edit | |
| txn_date | No | New transaction date in YYYY-MM-DD format (optional) | |
| memo | No | New private memo (optional) | |
| payment_account | No | New payment account name/number (Bank or Credit Card account) | |
| lines | No | Line modifications. Provide line_id to update existing, omit to add new. | |
| department_name | No | Header-level department/location name (auto-resolved to ID) | |
| entity_name | No | Payee/vendor display name (e.g., 'Cozzini Bros., Inc.'). Will be looked up to get ID. | |
| entity_id | No | Payee/vendor ID (use if you already know it, otherwise use entity_name) | |
| draft | No | If true, validate and show preview without saving (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Invoice ID to edit | |
| txn_date | No | New transaction date in YYYY-MM-DD format (optional) | |
| due_date | No | New due date in YYYY-MM-DD format (optional) | |
| memo | No | New private memo (optional) | |
| customer_memo | No | New customer-facing message visible on the invoice | |
| bill_email | No | New email address to send the invoice to | |
| sales_term_ref | No | Payment terms name (e.g., 'Net 30'). Auto-resolved to ID. | |
| allow_online_credit_card_payment | No | Allow customer to pay with credit card online | |
| allow_online_ach_payment | No | Allow customer to pay via bank transfer (ACH) online | |
| customer_name | No | New customer display name (auto-resolved to ID) | |
| department_name | No | Header-level department/location name (auto-resolved to ID) | |
| lines | No | Line modifications. Provide line_id to update existing line, omit to add new line. | |
| draft | No | If true, validate and show preview without saving (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Journal entry ID to edit | |
| txn_date | No | New transaction date in YYYY-MM-DD format (optional) | |
| memo | No | New private memo (optional) | |
| doc_number | No | New journal number (optional) | |
| lines | No | Line modifications. Provide line_id to update existing line, omit to add new line. | |
| draft | No | If true, validate and show preview without saving (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Sales receipt ID to edit | |
| txn_date | No | New transaction date in YYYY-MM-DD format (optional) | |
| memo | No | New private memo (optional) | |
| deposit_to_account | No | New deposit account name/number (Bank account) | |
| department_name | No | Header-level department/location name (auto-resolved to ID) | |
| lines | No | Line modifications. Provide line_id to update existing line, omit to add new line. | |
| draft | No | If true, validate and show preview without saving (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Vendor Credit ID to edit | |
| vendor_name | No | New vendor display name (auto-resolved to ID) | |
| txn_date | No | New transaction date in YYYY-MM-DD format (optional) | |
| memo | No | New private memo (optional) | |
| doc_number | No | New reference number (optional) | |
| lines | No | Line modifications. Provide line_id to update existing line, omit to add new line. | |
| draft | No | If true, validate and show preview without saving (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | No | Report as of this date in YYYY-MM-DD format (defaults to today) | |
| summarize_by | No | How to summarize columns: 'Total' (default), 'Month', 'Week', 'Days', 'Quarter', 'Year', 'Customers', 'Vendors', 'Classes', 'Departments', 'Employees', 'ProductsAndServices' | |
| department | No | Filter to a specific department/location ID | |
| accounting_method | No | Accounting method: 'Accrual' (default) or 'Cash' |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The bill ID |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The bill payment ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The customer ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The deposit ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The expense (Purchase) ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The invoice ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The journal entry ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Start date in YYYY-MM-DD format | |
| end_date | No | End date in YYYY-MM-DD format | |
| summarize_by | No | How to summarize columns: 'Total' (default), 'Month', 'Week', 'Days', 'Quarter', 'Year', 'Customers', 'Vendors', 'Classes', 'Departments', 'Employees', 'ProductsAndServices' | |
| department | No | Filter to a specific department/location ID | |
| accounting_method | No | Accounting method: 'Accrual' (default) or 'Cash' |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The sales receipt ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Start date in YYYY-MM-DD format | |
| end_date | No | End date in YYYY-MM-DD format | |
| accounting_method | No | Accounting method: 'Accrual' (default) or 'Cash' |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The vendor credit ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account_type | No | Optional filter by account type (e.g., 'Bank', 'Expense', 'Income', 'Other Current Asset', 'Fixed Asset', 'Other Current Liability', 'Equity') | |
| active_only | No | If true, only return active accounts (default: true) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| authorization_code | No | Authorization code from the QuickBooks OAuth callback URL (the 'code' parameter) | |
| realm_id | No | Company/realm ID from the callback URL (the 'realmId' parameter). Required when providing authorization_code. |
TDQS
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.
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.
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.
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.
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.
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''
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Account name, number (AcctNum), or ID. Examples: 'Tips', '2320', '116' | |
| start_date | No | Start date YYYY-MM-DD (default: start of year) | |
| end_date | No | End date YYYY-MM-DD (default: today) | |
| department | No | Filter to specific department/location (optional) |
TDQS
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.
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.
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.
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.
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.
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.
36 tool updates
v0.5.2- First observed
account_period_summary - First observed
create_bill - First observed
create_bill_payment - First observed
create_customer - First observed
create_deposit - First observed
create_expense - First observed
create_invoice - First observed
create_journal_entry - First observed
create_sales_receipt - First observed
create_vendor_credit - First observed
delete_entity - First observed
edit_bill - First observed
edit_customer - First observed
edit_deposit - First observed
edit_expense - First observed
edit_invoice - First observed
edit_journal_entry - First observed
edit_sales_receipt - First observed
edit_vendor_credit - First observed
get_balance_sheet - First observed
get_bill - First observed
get_bill_payment - First observed
get_company_info - First observed
get_customer - First observed
get_deposit - First observed
get_expense - First observed
get_invoice - First observed
get_journal_entry - First observed
get_profit_loss - First observed
get_sales_receipt - First observed
get_trial_balance - First observed
get_vendor_credit - First observed
list_accounts - First observed
qbo_authenticate - First observed
query - First observed
query_account_transactions
TDQS
Scored across 36 tools
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.
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.
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.
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
Related MCP Connectors
QuickBooks Online in Claude and ChatGPT: 221 tools, full ledger, multi-company, Canada + US, FR/EN.
AI Accountant for Quickbooks- recording, reconcile, month-end close
Connect Claude or Cursor to books, invoices, bills, payroll, and sealed closes.
AI agents for bookkeeping, reconciliation, and financial close for SMBs.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to query and manage QuickBooks Online data through natural language, including customers, invoices, bills, vendors, accounts, and financial reports.7MIT
- AlicenseAqualityDmaintenanceAI 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.638 npmMIT
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to QuickBooks Online, enabling management of invoices, customers, expenses, and reports through natural language.MIT
- AlicenseNot gradedqualityBmaintenanceEnables 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