Caribooks (QuickBooks Online)
Server Details
QuickBooks Online in Claude and ChatGPT: 221 tools, full ledger, multi-company, Canada + US, FR/EN.
Glama couldn't complete the latest health check. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- Uptime
- 51.8% over 43 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 229 tools
Tools follow a strict entity-based pattern, but there is large-scale overlap between parallel read paths (get_X vs search_X for ~30 entities) and between destructive paths (delete_X vs void_X). Descriptions explicitly clarify the intended precedence (search first, get as fallback; void zeroes instead of deleting), which helps, but the sheer volume of near-identical CRUD/report tools still creates real misselection risk. Attachment tools (create_attachable, attach_file, attach_receipt) are distinguishable only by reading carefully.
Names are uniformly snake_case verb_noun (create_bill, get_bill, update_bill, delete_bill, void_invoice, send_invoice, list_bank_accounts). Minor singular/plural variation exists (search_bills vs get_bill), but it is systematic within the search family. Overall the pattern is highly predictable.
229 tools is an extreme mismatch, far beyond the 50+ threshold for a coherent set. While QuickBooks is a broad domain, the surface is generated per entity (create/get/update/delete/search × ~35 entities plus ~50 report tools), which bloats context and selection burden. Consolidation via parameterized entity operations would be far more appropriate.
Coverage is very strong: CRUD, search, void, send, reports, attachments, bank feeds, rules, loops and payouts are all represented. Minor gaps exist for a few entities (e.g. no create/update/delete for customer_type, no update_tax_rate, reimburse_charge is search-only), but these are narrow and likely API-constrained. No major dead ends in core accounting workflows.
Available Tools
229 toolsactivate_loopStart a loopADestructiveInspect
Activate an existing paused bookkeeping loop by id after the user approves its configuration. Sets the next run from its schedule. Depending on its approved configuration, a loop can change bookkeeping records or email invoice reminders to external recipients. Preview mode requires approval of proposed actions. The Caribooks portal provides pause controls and approval of proposed changes.
| Name | Required | Description | Default |
|---|---|---|---|
| loop_id | Yes | The loop's id, as create_task and list_loops show it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutating operation. The description adds valuable context by noting that activation sets the next run from the schedule, and that depending on configuration the loop can change bookkeeping records or email invoice reminders to external recipients. It also mentions preview mode requiring approval, which is useful behavioral context. While it doesn't detail side effects like exactly what records change or email content, the annotations plus description sufficiently convey the risk profile.
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 reasonably concise at about four sentences, with the core action front-loaded in the first sentence. Later sentences add relevant context about schedule, effects, and approval requirements. It is not overly verbose, though the last sentence about the Caribooks portal is somewhat tangential and could be trimmed without losing essential 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?
For a tool with one parameter, no output schema, and clear annotations, the description covers the essential context: what it does, when it's appropriate, the approval requirement, and potential side effects. It doesn't describe the return value, but without an output schema, that's less critical. The main gap is that it doesn't explicitly state prerequisites like 'loop must be paused' (though implied by 'existing paused') or what happens if the loop is already active, but overall it's 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 description coverage is 100% and the single parameter loop_id is well described in the schema itself ('The loop's id, as create_task and list_loops show it.'). The description doesn't add much beyond the schema, but it does contextualize that the loop must be paused and existing, which implies the ID refers to an existing paused loop. Since the schema already handles the parameter description well, a 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 the tool activates an existing paused bookkeeping loop by id after user approval, which is a specific verb-resource pair. It mentions setting the next run from its schedule and distinguishes between preview mode requiring approval and normal activation, but doesn't explicitly differentiate it from sibling tools like 'list_loops' or 'create_task' that might be related to loop management.
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 clear context for when to use this tool: to activate a paused loop after user approval, and mentions preview mode requires approval of proposed actions. However, it doesn't explicitly state when not to use it or name alternative tools for managing loops (e.g., if the user wants to modify a loop instead of activating it), though the context implies activation is the specific purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_fileAttach a file to a transactionADestructiveInspect
Attach an original PDF, image, spreadsheet, CSV or Word file to an existing QuickBooks transaction. upload_id identifies a file in the Caribooks document box, populated through portal uploads or the account's receiving email address. For ChatGPT native attachments, file accepts the original file descriptor supplied by ChatGPT. content_base64 accepts the actual bytes of a small file. Maximum file size: 20 MB. Requires full access on the connection. Does not create a transaction or render a transcription.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | A file the user attached in this conversation, passed by the assistant's app. Use this or upload_id or content_base64, not two. | |
| txn_id | Yes | QuickBooks Id of that transaction. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| filename | No | File name with its extension, e.g. 'facture-2026-08.xlsx'. Shown in QuickBooks. Required with content_base64; with upload_id it defaults to the uploaded file's name. | |
| txn_type | Yes | QuickBooks transaction type the file documents. | |
| upload_id | No | The document id from list_receipt_inbox. Use this or content_base64, not both. | |
| content_type | No | Media type of the file, e.g. application/pdf, image/jpeg, text/csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. With content_base64 only; optional when it is a data URL that names it. | |
| content_base64 | No | The file's bytes encoded as base64 (a data URL is accepted too), for a small file you hold. | |
| allow_duplicate | No | The call fails if the transaction already has an attachment. Only set true after the user explicitly confirms they want an additional document attached. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already indicating mutability and destructiveness, the description adds valuable context: the 20 MB size limit, the full-access permission requirement, and the fact that this action does not create a transaction or transcription. This goes beyond the structured hints without contradicting them.
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 dense but well organized: opening with the core action, then clarifying the three file sources, then constraints, permissions, and exclusions. Every sentence earns its place and no schema information is needlessly repeated.
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 9-parameter mutation tool with no output schema, the description covers the key invocation concerns: what files are accepted, how to supply them, size limits, permissions, and side-effect boundaries. The only minor gap is that it does not describe the call's return value or confirmation behavior.
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 already covers all parameters, so the baseline is 3. The description adds meaningful extra semantics by explaining the three file-source modes: upload_id from the Caribooks document box, file for ChatGPT native descriptors, and content_base64 for small inline bytes. This helps agents choose the right mutually exclusive parameter.
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 a specific verb and resource: attach a file to an existing QuickBooks transaction, and enumerates supported file types. It also clarifies that it does not create a transaction or render a transcription, which separates it from the create_* family. However, it does not explicitly differentiate itself from the closely named sibling attach_receipt.
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 useful context: it targets existing transactions, requires full access, and explicitly excludes creating transactions or rendering transcriptions. It does not name alternative tools such as attach_receipt or state when to prefer them, so the usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_receiptAttach a receipt to a transactionAInspect
Render user-provided receipt text as a PDF transcription and attach it to a QuickBooks transaction. Intended for receipts that exist only as text, such as an email body or copied order confirmation. The PDF is visibly marked as a transcription, not an original document. Requires confirmed_by_user: true after the user explicitly requests a transcription, and full access on the connection. The receipt fields contain the original text and, when applicable, the actual email sender and subject. Does not transfer original uploaded files.
| Name | Required | Description | Default |
|---|---|---|---|
| txn_id | Yes | QuickBooks Id of that transaction. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| receipt | Yes | The receipt content to render into the attached PDF. | |
| filename | No | Attachment file name. Defaults to '<date> <sender>.pdf', or '<date> receipt.pdf' without a sender. | |
| txn_type | Yes | QuickBooks transaction type the receipt documents. | |
| allow_duplicate | No | The call fails if the transaction already has an attachment. Only set true after the user explicitly confirms they want an additional document attached. | |
| confirmed_by_user | No | true only after the user explicitly asked for a rendered transcription, knowing it is not the original document. Without it the call is refused. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false and destructiveHint=false, so the description carries the behavioral burden and fulfills it well. It discloses that the PDF is 'visibly marked as a transcription, not an original document,' that it requires explicit confirmation, that it fails on duplicates unless confirmed, and that it never transfers original uploaded files. This far exceeds the minimal annotation signal.
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?
Four sentences, each serving a distinct purpose: what it does, when to use it, behavioral caveat, and explicit non-transfer. It is front-loaded with the core action and wastes no words. The structure is tight and scannable.
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 7 parameters, a nested object, no output schema, and mutation semantics, the description covers all critical aspects: purpose, target scenario, prerequisites (confirmation and access), duplicate handling, and non-transfer of originals. Combined with the 100% schema descriptions, an agent has everything needed to decide and 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 coverage is 100%, so the baseline is 3, but the description adds meaningful context for receipt fields: 'The receipt fields contain the original text and, when applicable, the actual email sender and subject.' It also clarifies the filename default and emphasizes the confirmation gates on confirmed_by_user and allow_duplicate. That extra guidance compensates for the nested-object complexity.
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 opens with a specific verb and resource: 'Render user-provided receipt text as a PDF transcription and attach it to a QuickBooks transaction.' It clearly distinguishes from siblings by narrowing to text-only receipts and explicitly stating 'Does not transfer original uploaded files,' which separates it from attach_file.
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 when-to-use guidance ('Intended for receipts that exist only as text, such as an email body or copied order confirmation'), states prerequisites ('Requires confirmed_by_user: true... and full access on the connection'), and implies the alternative for original files with 'Does not transfer original uploaded files.' No ambiguity remains about when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_accountcreate accountAInspect
Create an account in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Account to create, as a QuickBooks Online API v3 Account object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. AccountType is required; AccountSubType picks the specific kind. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive write operation. The description adds useful return context ('Returns the saved record with its SyncToken') but does not cover permissions, duplicate handling, or other behavioral traits beyond that.
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 the action and followed by the return value. There is no redundant or filler text.
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 create tool with rich schema coverage and annotations covering safety, the description supplies the essential action and return shape. It is mostly complete, though it omits routing guidance and any error or duplicate-behavior 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?
Schema description coverage is 100%, and the schema itself explains the entity structure, AccountType requirement, sensitive-data warning, and optional company field. The description adds no parameter meaning beyond what the schema already provides, so the 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 states a specific verb and resource: 'Create an account in QuickBooks Online.' The scope is clear, and the resource name distinguishes it from other create_* siblings such as create_customer or create_bill.
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 no when-to-use guidance, no alternatives, and no exclusions. It does not mention update_account, get_account, or search_accounts, so an agent must infer routing from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_attachablecreate attachableAInspect
Create a text note attached to a QuickBooks record. Does not upload a file or render a PDF.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Attachable to create, as a QuickBooks Online API v3 Attachable object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. A note: Note (the text) plus AttachableRef: [{ EntityRef: { type: 'Bill', value: '<Id>' } }] to pin it to a record. Files are not created this way; attach_file uploads a file and attach_receipt renders receipt text as a PDF. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description doesn't need to restate those. It adds a useful boundary ('does not upload a file or render a PDF') but does not disclose auth requirements or side effects. Adequate for a create 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 short, front-loaded sentences, zero filler. The description earns its place by stating the core function and the key exclusion in the first sentence.
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?
With a detailed schema and the boundary note about file vs. PDF, the agent has everything needed to call this tool correctly. No output schema exists, but a create operation's return value is not necessary for correct invocation.
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%, and the entity parameter description is rich enough to explain the required structure (Note plus AttachableRef). The tool description adds no extra parameter meaning, so the baseline of 3 applies.
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 states a specific action and resource: create a text note attached to a QuickBooks record, and explicitly differentiates from file upload and PDF rendering. This makes it immediately clear what the tool does and how it differs from attach_file and attach_receipt.
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 says 'Does not upload a file or render a PDF,' implying the alternatives, and the input schema explicitly names attach_file and attach_receipt as the tools for those actions. An agent gets clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_billcreate billBInspect
Create a bill in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Bill to create, as a QuickBooks Online API v3 Bill object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. An ItemBasedExpenseLineDetail line only works if the item itself carries an ExpenseAccountRef; otherwise use an AccountBasedExpenseLineDetail line naming the expense account. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds one useful behavioral detail: it returns the saved record with its SyncToken, which matters for subsequent updates and deletes. However, it does not disclose validation errors, duplicate handling, or 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?
The description is two short, front-loaded sentences with no redundant or filler content. The core operation is stated immediately, followed by the return value detail, which 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 (nested entity object) and the absence of an output schema, the description partially compensates by stating that the saved record and its SyncToken are returned. Yet it still lacks guidance on usage versus sibling create tools and omits behavioral context such as validation or side effects. With rich schema and annotations, this is adequate but with clear gaps.
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 itself documents both parameters thoroughly, including the complex entity object and company selection. The description adds no parameter-level meaning beyond what the schema provides, making the baseline 3 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 states a precise verb and resource: 'Create a bill in QuickBooks Online.' This clearly identifies the operation, but it does not differentiate the tool from other create operations like create_invoice, create_purchase_order, or create_journal_entry, so sibling ambiguity remains.
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 offers no guidance on when to use this tool versus alternatives such as create_invoice or create_purchase_order. It also omits prerequisites or context about when a bill is appropriate, leaving usage entirely implicit 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.
create_bill_paymentcreate bill paymentAInspect
Create a bill payment in QuickBooks Online. An accounting record of a payment to a vendor. It does not initiate a bank or card payment. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The BillPayment to create, as a QuickBooks Online API v3 BillPayment object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. PayType (Check|CreditCard) plus the matching CheckPayment.BankAccountRef or CreditCardPayment.CCAccountRef, and Line[].LinkedTxn: [{ TxnId, TxnType: 'Bill' }]. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so safety is partly covered. The description adds meaningful context beyond that: the operation has no external money-movement side effect and returns the saved record with its SyncToken, which is useful for follow-up update/void calls.
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 short sentences, zero filler, and the most decision-relevant fact (what it is not — no bank/card payment) is front-loaded before the return-value note.
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 exists, but the description compensates by stating the return shape (saved record with SyncToken). For a create tool with fully documented parameters and annotations, the remaining gap is minor; it could still note required permissions or whether the record can be edited afterward.
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% and the schema itself is unusually rich, spelling out PayType, the matching account refs, and the LinkedTxn structure. The description adds nothing about parameters, so the baseline 3 applies.
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?
States a specific verb and resource ("Create a bill payment") and immediately disambiguates from the crowded payment family by clarifying it is an accounting record that does not initiate a bank or card payment. That distinction is exactly what separates it from siblings like create_payment and create_credit_card_payment_txn.
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 negative scoping ("does not initiate a bank or card payment") is an effective when-not cue and tells the agent this is not the tool for moving money. However, it never names the alternative tool to use instead for actual payment initiation, so routing is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_budgetcreate budgetAInspect
Create a budget in QuickBooks Online. A profit-and-loss budget with one amount per account per period. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Budget to create, as a QuickBooks Online API v3 Budget object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Name, StartDate, EndDate, BudgetType: 'ProfitAndLoss', BudgetEntryType (Monthly|Quarterly|Annually) and BudgetDetail: [{ BudgetDate, Amount, AccountRef }] with one entry per account per period. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-read-only, non-destructive, closed-world write. The description adds genuine value beyond them by disclosing the return shape ('the saved record with its SyncToken'), which matters for chaining an update, and by reinforcing the one-entry-per-account-per-period constraint. It stops short of stating permission requirements or duplicate-budget behavior.
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 short sentences, each earning its place: the action, the shape constraint, and the return contract. Nothing is redundant and the core action is 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 create tool with full schema coverage and a rich nested entity object, the description covers action, scope, and return value adequately; the SyncToken mention compensates for the absent output schema. What's missing is permission/precondition context and whether duplicate periods are rejected.
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% and the nested entity parameter is thoroughly documented in the schema itself, so baseline 3 applies. The description restates the ProfitAndLoss and one-entry-per-period constraints but adds no syntax or format detail beyond what the 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?
States a specific verb and resource ('Create a budget in QuickBooks Online') and narrows scope with 'A profit-and-loss budget with one amount per account per period', which tells an agent exactly which budget shape this tool produces. It does not explicitly name sibling alternatives like update_budget or search_budgets, so it stops short of full sibling differentiation.
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 create semantics make the primary usage self-evident, and the P&L-only constraint implicitly signals other budget types aren't creatable here. However there is no explicit when-to-use guidance, no note on whether a budget already exists for the period, and no pointer to update_budget for modifying an existing budget.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_classcreate classBInspect
Create a class in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Class to create, as a QuickBooks Online API v3 Class object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive write. The description adds that the saved record with SyncToken is returned, which is useful. It does not explain permissions, duplicate-name handling, or whether SyncToken is needed for subsequent updates.
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 short sentences with no waste. Purpose first, return value second.
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 write tool with a nested free-form entity object and no output schema, the description should clarify the entity shape or link to the Class object model, and mention that SyncToken must be preserved for later updates. The entity schema description is generic and mostly a compliance warning.
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 both parameters are documented in the schema. The description adds no detail about the entity structure or the company parameter beyond the return value note; 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?
States a specific verb and resource ('Create a class in QuickBooks Online') and notes the return value. It doesn't differentiate itself from siblings like search_classes or update_class, but the action is unambiguous.
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 on when to create a class versus searching existing ones or updating. No prerequisites such as the need for a connected company are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_company_currencycreate company currencyAInspect
Create a company currency in QuickBooks Online. The currencies the company transacts in; only meaningful with multicurrency enabled. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The CompanyCurrency to create, as a QuickBooks Online API v3 CompanyCurrency object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Code (ISO 4217, e.g. 'USD'). Requires multicurrency to be enabled in the company. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower. The description goes beyond them by disclosing the return payload ('the saved record with its SyncToken'), which matters because the SyncToken is needed for subsequent updates, and by repeating the multicurrency prerequisite.
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 short sentences with the core action front-loaded and no filler. The middle sentence is a fragment ('The currencies the company transacts in; only meaningful with multicurrency enabled'), which is slightly awkward but costs no real clarity.
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 create tool with annotations covering safety, a fully described schema, and no output schema, the description is nearly complete: action, prerequisite, and return shape are all present. It could have noted required fields inside the free-form entity object or typical validation failures, but nothing essential is missing.
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% and the entity schema already documents the QBO object, the Code field as ISO 4217, the multicurrency requirement, and the PII fields to omit. The description adds nothing parameter-specific beyond that, so the baseline 3 applies.
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?
States a specific verb and resource ('Create a company currency in QuickBooks Online'), which cleanly separates it from update_company_currency, delete_company_currency and search_company_currencies. It does not name a sibling explicitly, but the create/read/update/delete split is unambiguous from the verb.
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 supplies one real precondition — 'only meaningful with multicurrency enabled' — which is genuine usage context. However it gives no when-not guidance and never points to update_company_currency or search_company_currencies as the alternative when the currency already exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_credit_card_payment_txncreate credit card payment txnAInspect
Create a credit card payment txn in QuickBooks Online. An accounting record of a bank payment toward a credit card balance. It does not move money. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The CreditCardPaymentTxn to create, as a QuickBooks Online API v3 CreditCardPaymentTxn object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. TxnDate, Amount, BankAccountRef (the paying bank account) and CreditCardAccountRef (the card being paid down) are required. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare write/safe (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower, and the description still adds real value: 'It does not move money' clarifies the semantic effect of the write, and 'Returns the saved record with its SyncToken' discloses the return shape despite there being no output schema. It does not cover permissions, idempotency, or duplicate handling.
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?
Four short sentences, front-loaded with the action, then scope, then behavioral caveat, then return value. Every sentence carries distinct information with no filler.
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 a rich nested schema and no output schema, the description covers what it creates, its semantic effect, and its return value. Remaining gaps (required permissions, what happens on conflicting/duplicate records) are minor given the strong schema coverage and annotations.
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 nested entity object and company parameter are already fully documented in the schema, including the required TxnDate/Amount/BankAccountRef/CreditCardAccountRef fields. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
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?
States a specific verb+resource ('Create a credit card payment txn in QuickBooks Online') and adds a semantic gloss — 'an accounting record of a bank payment toward a credit card balance' — that separates it from generic payment/transfer siblings. It stops short of naming the alternative tools (create_payment, create_transfer), so it is clear but not fully differentiated.
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 does not move money' implicitly tells the agent when this is appropriate (recording a payment vs. actually transferring funds), which is genuinely useful routing context. However there is no explicit when-to-use/when-not statement and no named alternatives, so guidance remains implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_credit_memocreate credit memoBInspect
Create a credit memo in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The CreditMemo to create, as a QuickBooks Online API v3 CreditMemo object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a mutating but non-destructive operation. The description adds that it returns the saved record with its SyncToken, which is useful behavioral context. However, it does not mention required permissions, idempotency, or side effects, and the absence of destructiveHint=true is consistent with creating a new record.
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 short sentences, front-loaded with the action and resource, followed by the return value. No wasted words 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?
Given the complexity of creating a QuickBooks CreditMemo object (nested entity with many fields), the description is minimal. It lacks details about required fields, data validation, or how the entity object maps to QuickBooks API v3, though the schema covers some of this. No output schema exists, so the description's mention of the return value is helpful but not exhaustive. The definition is adequate but incomplete for a tool of this complexity.
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 already documents both parameters thoroughly. The description adds no parameter-specific details beyond what the schema provides. Baseline 3 is appropriate when schema does the heavy lifting.
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?
States a specific verb and resource ('Create a credit memo in QuickBooks Online'), which is clear enough to distinguish from siblings like update_credit_memo, get_credit_memo, or send_credit_memo. However, it does not explicitly name those siblings, so it falls short of a 5.
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 no guidance on when to use this tool versus alternatives (e.g., create_invoice, create_refund_receipt, create_vendor_credit), nor any prerequisites or contextual conditions. The agent must infer usage entirely from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_customercreate customerBInspect
Create a customer in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Customer to create, as a QuickBooks Online API v3 Customer object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the mutation safety profile is covered. The description adds one genuinely useful behavioral fact beyond them — that the call returns the saved record including its SyncToken, which matters for subsequent optimistic-concurrency updates — but says nothing about duplicate handling, required fields, or failure behavior.
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 short sentences, front-loaded with the action and followed by the return-value note. Zero filler, though it is thin enough that it reads more like a label than a guide.
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?
There is no output schema, and the description does cover the return value, which is the main gap it needed to fill. However, for a create tool whose payload is a free-form nested object with additionalProperties, it leaves out what happens on duplicate names, whether entity fields are validated, and which fields are practically required.
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%, and the schema itself carries strong parameter semantics (the QuickBooks API v3 Customer shape, the PII prohibition on SSN/tax IDs/birth dates/card data, and the optional company selector). The description adds nothing on top of that, so the baseline 3 applies.
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?
States a specific verb+resource ('Create a customer in QuickBooks Online'), which cleanly separates it from create_vendor, create_employee and the other create_* siblings by resource. It stops short of any explicit sibling routing, but the resource is unambiguous.
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 on when to use this versus search_customers (to check for an existing customer first) or update_customer (for existing records). The agent must infer that creation is appropriate purely 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.
create_departmentcreate departmentBInspect
Create a department in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Department to create, as a QuickBooks Online API v3 Department object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the agent knows this is a contained write operation. The description adds one genuinely useful behavioral fact — that the call returns the saved record with its SyncToken — which matters because no output schema exists. It says nothing about permissions, validation failures, or duplicate handling.
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, zero filler, verb+resource front-loaded and the return-value note placed second. Nothing could be cut without losing 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 simple create tool whose entity shape is well specified in the schema and whose safety profile is covered by annotations, this is adequate but thin. It omits what happens on failure (duplicate names, invalid fields) and does not explain the optional company-selection parameter, which is the only piece of non-obvious behavior an agent might need.
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%: both parameters, including the nested 'entity' object with its data-privacy warning about SSNs, tax IDs, birth dates and card details, are fully documented in the schema. The description adds nothing beyond that, so the baseline of 3 applies.
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 states a specific verb and resource ("Create a department") and scopes it to QuickBooks Online, so an agent can distinguish it from the many other create_* siblings by resource alone. It stops short of explicitly contrasting with neighbors like create_class or search_departments, but the resource name leaves no real ambiguity.
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?
There is no guidance on when to use this tool versus alternatives such as update_department or search_departments, and no prerequisites (e.g., needing an existing company connection) are mentioned. The optional 'company' parameter hints at a multi-company scenario, but the description never explains it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_depositcreate depositBInspect
Create a deposit in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Deposit to create, as a QuickBooks Online API v3 Deposit object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. DepositToAccountRef is required; each line needs DepositLineDetail.AccountRef. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description does not need to establish that this is a write. It adds one useful fact, that the response carries the SyncToken. However, it omits validation failure modes and the fact that the schema itself flags forbidden PII fields.
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, zero padding, and the operation is front-loaded ahead of the return-value note. 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?
With no output schema, the description's SyncToken note partially covers return values, and the heavy nested-object requirements live in the schema. But for a mutation against a real accounting ledger, the absence of any guidance on company selection or when a deposit is the correct record type leaves a 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?
Schema description coverage is 100%, so both parameters and the nested Deposit requirements (DepositToAccountRef, DepositLineDetail.AccountRef, forbidden PII fields) are already fully documented. The description adds nothing beyond the baseline, so a 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?
States a specific verb and resource (create a deposit in QuickBooks Online) and even names the return shape. It is distinguishable from siblings by the 'deposit' resource, though it never explicitly contrasts with near-neighbors like create_payment or create_transfer.
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?
There is no when-to-use guidance, no prerequisites (e.g., a connected company or a bank account), and no routing to alternatives such as create_transfer for moving funds. The agent must infer everything about invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_employeecreate employeeBInspect
Create an employee in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Employee to create, as a QuickBooks Online API v3 Employee object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds one behavioral fact beyond annotations -- that the call returns the saved record with its SyncToken -- which matters since there is no output schema, but it omits auth/company-connection requirements and any guidance on what the SyncToken is used for.
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 short sentences, front-loaded with the action and followed by the return behavior. Zero filler 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?
With 100% schema coverage covering the nested entity and company selection, and annotations covering the safety profile, the main remaining gap was return behavior -- which the description addresses briefly via 'the saved record with its SyncToken' in the absence of an output schema. It could say more about the returned object's shape, but it is adequate.
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%: the 'entity' parameter carries a detailed warning against sending SSNs, tax IDs, birth dates, or card details, and 'company' explains the connected-company selection. The description adds nothing beyond the schema, so the baseline 3 applies.
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?
States a specific verb and resource ('Create an employee in QuickBooks Online') and names the target system, so an agent can distinguish it from update_employee or search_employees. No explicit sibling differentiation is needed beyond the resource name, but none is provided.
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 offers no when-to-use guidance, prerequisites, or alternatives (e.g., when to use update_employee vs create_employee, or the need for a connected company). Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_estimatecreate estimateBInspect
Create an estimate in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Estimate to create, as a QuickBooks Online API v3 Estimate object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral fact beyond the annotations — that the call returns the saved record including its SyncToken, which matters for chaining into update_estimate. It says nothing about validation failures, required entity fields, or duplicate handling.
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 short sentences, the action is front-loaded, and the return-shape note is the only second-sentence content. Nothing is redundant with the name or schema.
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?
With no output schema, the description usefully compensates by stating what comes back (saved record + SyncToken). The entity and company semantics are fully covered in the schema, so the main remaining gap is error/precondition behavior, which is minor for a straightforward create.
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%: entity is documented as a QBO API v3 Estimate object with an explicit PII warning, and company explains the multi-company fallback. The description contributes no additional parameter meaning, so the baseline 3 applies.
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?
States a specific verb+resource ("Create an estimate") scoped to QuickBooks Online, which cleanly separates it from get_estimate, search_estimates and update_estimate. It does not, however, explicitly name any sibling or contrast itself with them, so the differentiation comes only from the verb.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as update_estimate when the record already exists. An agent can infer 'this creates a new estimate' from the name, but the description adds nothing to that inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_inventory_adjustmentcreate inventory adjustmentAInspect
Create an inventory adjustment in QuickBooks Online. Changes the quantity on hand of inventory items and books the valuation difference; US companies on Plus or Advanced only. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The InventoryAdjustment to create, as a QuickBooks Online API v3 InventoryAdjustment object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. TxnDate, DocNumber, AdjustAccountRef (the inventory shrinkage/adjustment account) and Line: [{ DetailType: 'ItemAdjustmentLineDetail', ItemAdjustmentLineDetail: { ItemRef, QtyDiff (signed change) or NewQty } }]. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false. The description adds meaningful behavior beyond that: it changes on-hand quantities and books a valuation difference (side effects), constrains to US Plus/Advanced companies, and notes the returned record carries a SyncToken. This is solid added context.
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 short sentences, front-loaded with the action, then the effect/constraint, then the return. No filler; each sentence carries 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?
For a mutation tool with a nested object schema and no output schema, the description covers purpose, side effects, eligibility, and the return value (saved record + SyncToken). Nothing essential to correct invocation is missing.
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%, with the nested 'entity' object fully documented (TxnDate, DocNumber, AdjustAccountRef, ItemAdjustmentLineDetail, QtyDiff/NewQty). The description adds no parameter syntax beyond the schema, so the baseline of 3 applies.
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 gives a specific verb+resource ('Create an inventory adjustment in QuickBooks Online') and further states the effect ('Changes the quantity on hand of inventory items and books the valuation difference'). This clearly distinguishes it from update_inventory_adjustment, delete_inventory_adjustment, and get_inventory_adjustment.
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 states a concrete eligibility precondition: 'US companies on Plus or Advanced only.' That is useful when-to-use context, but it does not explicitly route the agent to alternatives or state when-not-to-use (e.g. use update vs create).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_invoicecreate invoiceBInspect
Create an invoice in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Invoice to create, as a QuickBooks Online API v3 Invoice object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the write-but-non-destructive profile is covered. The description adds one genuinely useful behavioral fact beyond annotations — that it returns the saved record with its SyncToken — which is meaningful since there is no output schema, but it omits permissions/required-field/error behavior.
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 short sentences, front-loaded with the action and the return contract. No filler, no restating the title.
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 two-parameter write tool with 100% schema coverage and annotations covering safety, the description is nearly sufficient: it names the resource, the platform, and the return shape (SyncToken) despite no output schema. It stops short of the 5 because it says nothing about required fields or failure behavior for a mutation.
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 both the 'entity' and 'company' parameters are already documented in the schema, including the PII restriction and the optional-company rule. The description adds no parameter-level meaning beyond that, which is the baseline 3 case.
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?
States a specific verb and resource ('Create an invoice') plus the system context ('in QuickBooks Online'), so an agent knows exactly what the tool does. However, it does not differentiate itself from the many sibling create_* tools (create_estimate, create_sales_receipt, create_credit_memo), which share the same shape and would be the plausible confusions.
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 no when-to-use guidance and names no alternatives such as create_estimate, create_sales_receipt, or update_invoice. The agent is left to infer from the tool name alone whether this or a sibling is the right entry point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_itemcreate itemBInspect
Create an item in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Item to create, as a QuickBooks Online API v3 Item object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Type is required: Service or NonInventory need Name and IncomeAccountRef (ExpenseAccountRef too if purchased); Inventory additionally needs AssetAccountRef, ExpenseAccountRef, TrackQtyOnHand: true, QtyOnHand and InvStartDate; Category needs only Name (nest with ParentRef); Group (a bundle) needs ItemGroupDetail.ItemGroupLine. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the write-safety profile is already covered. The description adds genuinely useful information not in annotations: the call returns the saved record with its SyncToken. It does not mention permissions, error behavior, or duplicate-item handling.
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 short sentences, front-loaded with the action and followed by the return value. No waste, though the terseness borders on under-specification for a tool with a complex nested entity.
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 create tool with a deeply nested, polymorphic entity and no output schema, stating the return shape is helpful, but the description says nothing about usage context, failure modes, or the type-dependent requirements. The schema does the heavy lifting, leaving the description minimally adequate.
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% and the entity parameter's schema description is exceptionally detailed (type-specific required fields, guidance on excluded sensitive data). The description adds nothing about parameters, so the 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?
States a specific verb and resource (create an item in QuickBooks Online) and even names the return payload. It is clearly distinguishable from update_item, get_item and search_items, though it never explicitly differentiates itself from its siblings by name.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as update_item or search_items to check for an existing item first. The agent gets no routing help beyond the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_journal_entrycreate journal entryAInspect
Create a journal entry in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The JournalEntry to create, as a QuickBooks Online API v3 JournalEntry object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Lines must balance: equal totals of PostingType Debit and Credit. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-read-only, non-destructive, closed-world create, so the safety profile is covered. The description adds genuinely useful behavioral context by stating the call returns the saved record including its SyncToken, which signals a follow-up token is available for updates. It stops short of describing failure behavior for unbalanced or invalid entries, which the schema partially covers.
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 short sentences with zero filler, and the core action is front-loaded before the return-value note. Nothing is repeated from the schema or annotations.
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 create tool with no output schema, the description plus the rich nested parameter documentation covers the essentials. The only gap is that it says nothing about the returned SyncToken's role or how validation errors (unbalanced lines) surface to the caller.
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%, and the nested entity parameter is documented in depth (QBO v3 object shape, prohibited PII fields, debit/credit balancing rule). The description adds nothing beyond the schema, so the 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 names a specific verb and resource ('Create a journal entry') and scopes it to QuickBooks Online, so the agent knows exactly what object is produced. It does not need to differentiate from siblings like create_invoice or create_bill since the resource itself is unambiguous, but it also never states how a journal entry differs from those other transaction 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?
There is no when-to-use guidance, no mention of prerequisites (chart of accounts must exist, lines must reference valid accounts), and no routing to alternatives such as create_transfer or create_bill for cases where a manual journal entry is not appropriate. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_paymentcreate paymentAInspect
Create a payment in QuickBooks Online. An accounting record of a customer payment already received. Payment processing is not supported; ProcessPayment must be omitted or false. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Payment to create, as a QuickBooks Online API v3 Payment object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Link the invoices it settles with Line[].LinkedTxn: [{ TxnId, TxnType: 'Invoice' }]. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, closed-world), so the description only needs to add context; it does, by stating the return payload past tense-style ("Returns the saved record with its SyncToken"), which signals the concurrency token needed for follow-up updates. It stops short of noting failure modes, duplicate-payment behavior, or 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?
Four short sentences, each front-loaded with a distinct fact: identity, definition, hard constraint, and return value. Nothing restates the tool name or the annotations, and the reader can stop after sentence two with a correct mental model.
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 create tool with no output schema, the description covers what gets created, the key restriction, and the return shape (record + SyncToken). It is nearly complete; only auth/prerequisite information (e.g., which connections or scopes are required) is absent, which is minor given the two-parameter surface.
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% and the entity parameter already documents LinkedTxn linking and prohibited data, so a 3 baseline applies. The description earns one extra point by documenting a field constraint not present in the schema ("ProcessPayment must be omitted or false"), which materially changes how the entity object must be built.
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?
States a specific verb+resource ("Create a payment in QuickBooks Online") and immediately narrows scope: it is an accounting record of a payment already received, not payment processing. This distinguishes it from siblings like create_bill_payment, create_credit_card_payment_txn, and create_sales_receipt without the agent needing to open another schema.
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 gives a clear when-not ("Payment processing is not supported; ProcessPayment must be omitted or false"), which steers the agent away from a mistaken processing use. However, it never routes to the alternatives an agent would actually want here – create_bill_payment for vendor payments, create_sales_receipt for point-of-sale, or send_payment/invoice for collections – so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_payment_methodcreate payment methodBInspect
Create a payment method in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The PaymentMethod to create, as a QuickBooks Online API v3 PaymentMethod object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds a useful return detail (the saved record including its SyncToken, which matters because there is no output schema), but says nothing about idempotency, duplicate handling, or what happens if the method already exists.
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 short sentences, zero filler, and the core action is front-loaded before the return-value note. Nothing is repeated from the title or annotations.
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 entity parameter is an opaque object with no shape given in the schema, and the description does not mention that a payment method needs at least a name (or any other minimal required field inside the object). An agent can call the tool but must guess what to put in 'entity'. The SyncToken return note partially compensates for the missing 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%, and the schema already explains the QuickBooks API v3 PaymentMethod object and the PII prohibition better than the description does. The description adds no parameter meaning the schema lacks, so the baseline 3 applies.
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?
States a specific verb and resource ('Create a payment method in QuickBooks Online'), which cleanly separates it from get_payment_method, search_payment_methods, and update_payment_method. It doesn't explicitly name any sibling as an alternative or counterpart, so it stops short of the top mark.
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?
There is no guidance on when to use this tool versus search_payment_methods (to check for an existing method first) or update_payment_method. Nothing is said about duplicate names, required prerequisites, or conditions under which creation would fail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_purchasecreate purchaseBInspect
Create a purchase in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Purchase to create, as a QuickBooks Online API v3 Purchase object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. PaymentType (Cash|Check|CreditCard) and AccountRef (the paying account) are both required. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the write/safety profile is covered. The description adds one genuinely useful behavioral fact beyond the annotations: the call returns the saved record including its SyncToken, which is needed for any follow-up update. It still says nothing about validation failures, PII rejection behavior mentioned in the schema, or whether duplicate submissions create duplicates.
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 short sentences with the verb and result front-loaded; every clause carries information and nothing is padded or repeated from the title.
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 whose annotations carry the safety profile and whose schema fully documents the entity payload, the description covers the essentials and even notes the returned SyncToken. The remaining gap is disambiguation from the other purchase-like create tools, which is the main thing an agent could get wrong here.
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 entity parameter's required PaymentType/AccountRef fields and the PII prohibition are already documented in the schema. The description adds nothing about parameters, so the baseline 3 applies.
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?
States a specific verb and resource ('Create a purchase') and scopes it to QuickBooks Online, so the agent knows exactly what entity is being created. However, it does nothing to distinguish a Purchase from the many easily-confused siblings (create_purchase_order, create_bill, create_expense-style tools, create_sales_receipt), which matters in this crowded namespace.
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 offers no when-to-use guidance, no prerequisites, and never names an alternative tool. With siblings like create_purchase_order and create_bill sitting right next to it, the absence of any routing hint leaves the agent to guess which create tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_purchase_ordercreate purchase orderBInspect
Create a purchase order in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The PurchaseOrder to create, as a QuickBooks Online API v3 PurchaseOrder object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. An ItemBasedExpenseLineDetail line only works if the item itself carries an ExpenseAccountRef; without one QuickBooks answers 'Select an account for this transaction'. Use an AccountBasedExpenseLineDetail line instead, or set the item's expense account first. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds useful return information ('Returns the saved record with its SyncToken'), which is valuable since there is no output schema, but it does not disclose permissions, error behavior, or side effects beyond what annotations already provide.
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 short sentences, both of which earn their place: one for purpose, one for return value. The purpose is front-loaded and there is 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 the full parameter schema coverage and existing annotations, the description is nearly complete for a create tool: it states the action and the return shape. It does not mention alternatives or common preconditions, but those gaps are modest given that the schema itself carries detailed entity guidance and the annotations cover safety.
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 input schema already documents both parameters in detail, including the complex entity object and the company parameter. The description adds no additional meaning about parameter formats or constraints, which is the baseline expectation when schema coverage is full.
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 states a specific verb and resource: 'Create a purchase order in QuickBooks Online.' This clearly distinguishes the tool from most siblings by its resource name alone, though it does not explicitly differentiate from nearby siblings like create_purchase or create_bill.
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 no guidance on when to use this tool versus alternatives such as create_purchase, create_bill, or create_purchase (expense). There are no prerequisites, exclusions, or conditions given, leaving the agent to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_recurring_transactioncreate recurring transactionADestructiveInspect
Create a recurring transaction in QuickBooks Online. A template QuickBooks uses to create a transaction on a schedule, or on request. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The RecurringTransaction to create, as a QuickBooks Online API v3 RecurringTransaction object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. The template's transaction under its own type, carrying RecurringInfo: e.g. { Invoice: { ...invoice fields..., RecurringInfo: { Name, RecurType: 'Automated'|'Reminded'|'UnScheduled', Active: true, ScheduleInfo: { IntervalType: 'Monthly', NumInterval: 1, DayOfMonth, StartDate, NextDate, ... } } } }. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the write/safety profile is covered. The description adds genuinely useful behavioral context beyond that: the record is a template whose downstream effect is producing transactions on a schedule or on request, and the call returns the saved record with its SyncToken. It still does not state permission/auth requirements or the consequences of creating an 'Automated' recurring entry.
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 short sentences, front-loaded with purpose before the explanatory clause and the return note. Every sentence earns its place and nothing is padded.
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?
With no output schema, the description correctly fills that gap by stating the return value (saved record with SyncToken). For a nested-object mutation tool, the deep schema documentation and the destructive/write annotations cover the remaining structured detail, so the description is nearly complete, though it omits any mention of prerequisites or failure modes.
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% and the entity parameter carries an unusually rich description (RecurringInfo, RecurType values, ScheduleInfo shape). The description adds no parameter-level meaning of its own, so the baseline 3 applies — the schema, not the description, does the work here.
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?
States a specific verb and resource (create a recurring transaction in QuickBooks Online) and immediately clarifies what the resource actually is: 'a template QuickBooks uses to create a transaction on a schedule, or on request.' That second clause is what separates it from the many sibling create_* tools that make real transactions, so an agent can place it without opening the schema.
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?
Usage is implied by the definition of the resource (create one when you want a scheduled/on-demand template), but there is no explicit when-to-use guidance, no exclusions, and no pointer to siblings such as search_recurring_transactions, get_recurring_transaction, or create_invoice. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_refund_receiptcreate refund receiptBInspect
Create a refund receipt in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The RefundReceipt to create, as a QuickBooks Online API v3 RefundReceipt object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. DepositToAccountRef names the account the refund was paid from. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the mutation nature is already declared. The description adds one genuinely useful behavioral fact absent from the annotations: that the call returns the persisted record with its SyncToken, which matters because there is no output schema. It says nothing about permissions, idempotency, or failure behavior.
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 short sentences with the operation stated first and the return value second; nothing is redundant. It is efficient, though the terseness leaves real gaps rather than being optimally sized for a create tool.
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 create tool with a nested free-form entity object and no output schema, the description at least discloses the return shape (saved record plus SyncToken). It omits error semantics and any hint about required entity fields, but the 100% schema coverage carries most of that burden, making this minimally adequate.
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 already documents both the entity payload (including the government-identifier restriction and DepositToAccountRef) and the optional company parameter. The description adds no parameter-level detail beyond the schema, so the baseline 3 applies.
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?
States a specific verb and resource ('Create a refund receipt in QuickBooks Online'), which is clear enough to distinguish from read/update siblings. However, it does not differentiate from the near-neighbor create_sales_receipt, which an agent could easily confuse with a refund receipt.
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 contains no when-to-use guidance, no prerequisites, and no reference to alternatives such as create_sales_receipt or update_refund_receipt. An agent must infer everything about selection from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sales_receiptcreate sales receiptBInspect
Create a sales receipt in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The SalesReceipt to create, as a QuickBooks Online API v3 SalesReceipt object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. DepositToAccountRef names the account the money landed in. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the write/safety profile is covered. The description adds a useful return-value detail (saved record with SyncToken), which partly compensates for the missing output schema. It does not disclose failure/idempotency behavior or any 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?
Two short, front-loaded sentences with zero filler: the action first, then the return payload. Nothing is wasted.
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 create tool with a nested free-form entity object and no output schema, the definition is minimally adequate: the schema carries the field-level detail and the description notes the returned SyncToken. It is missing the contextual routing information (when to prefer this over sibling create tools) that complexity here would warrant.
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 both the nested 'entity' object and the 'company' parameter are already documented in the schema, including the caution about government identifiers. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
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 states a specific verb and resource ('Create a sales receipt in QuickBooks Online'), which is clearly understandable. However, it does nothing to differentiate this from the many adjacent create_* siblings (create_invoice, create_refund_receipt, create_credit_memo, create_estimate), so an agent must rely on external knowledge of QuickBooks object types to choose correctly.
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?
There is no guidance on when to use this tool versus create_invoice, create_refund_receipt, create_payment, or create_deposit, nor any prerequisites (e.g., customer/item must exist, company must be connected). The one relevant hint — the company parameter — is left to the schema only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskCreate a task or a standing loopAInspect
Create a bookkeeping loop from a user-requested task, in the user's language. Suitable for recurring work on a schedule or after documents reach the Caribooks document box. The loop defines its data access, permitted actions and approval requirements. Returns the saved task and its proposed configuration for review. The loop is saved paused unless run_now is true, which starts it and runs it once right away. New loops run in preview mode: a run writes nothing to QuickBooks, and every change it wants waits for the user's approval in Caribooks.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| run_now | No | true to start the loop and run it once immediately, only when the user asked for the work now. | |
| schedule | No | recurring for standing work, once for a single errand. Defaults to recurring when the sentence names a rhythm (every morning, chaque lundi) or waits on arriving documents, and once otherwise. | |
| sentence | Yes | What the user wants done, in their own words and their own language, one or two sentences. Do not translate or tidy it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: the loop is saved paused unless run_now is true, and new loops run in preview mode writing nothing to QuickBooks with every change awaiting approval. These are exactly the safety/state traits an agent needs and that readOnlyHint/destructiveHint alone do not convey.
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, front-loaded with the core action, then scope, then state behavior. Every sentence carries information, though the return-value and preview sentences could be tightened slightly.
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, so the description appropriately covers the return value ('the saved task and its proposed configuration for review') plus paused/preview behavior. Nothing needed to invoke it correctly is missing.
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, but the description adds meaning not in the schema: the default paused state and the run_now trigger semantics, plus preview-mode consequences of running. This goes beyond the parameter docs rather than restating them.
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?
States a specific verb and resource ('Create a bookkeeping loop from a user-requested task') and defines what a loop is (data access, permitted actions, approval requirements). It clearly separates loops from plain transactions, but never names the nearest sibling (create_recurring_transaction) to disambiguate the overlap.
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?
Gives clear context for when to use it: 'recurring work on a schedule or after documents reach the Caribooks document box.' The schedule enum logic (recurring vs once) is also echoed. However, it offers no explicit when-not guidance or named alternatives such as create_recurring_transaction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tax_agencycreate tax agencyBDestructiveInspect
Create a tax agency in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The TaxAgency to create, as a QuickBooks Online API v3 TaxAgency object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Creating a tax agency cannot be undone: QuickBooks also creates payable and suspense accounts that can never be deleted. Only create one when the user has asked for it. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false, so the safety profile is largely covered. The description adds only the return shape (saved record plus SyncToken), and is silent on the irreversibility, permission requirements, and side-effect account creation that the schema's entity description warns about.
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 tight sentences with the action front-loaded and the return value second; every sentence earns its place. It is slightly under-scaled for a destructive, irreversible operation, but there is no filler 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?
With no output schema, the description usefully states what is returned, and the schema's entity description carries the destructive/irreversible warnings and PII constraints. For a two-parameter tool with nested object input and full schema coverage, this is nearly complete; only permission/prerequisite context for the calling company is unstated.
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 baseline is 3. The description supplies no parameter detail at all; the meaningful semantics (QBO v3 TaxAgency shape, PII restrictions, irreversibility) come entirely from the schema's entity description.
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 gives a specific verb+resource ("Create a tax agency in QuickBooks Online") and states the return value, so the agent knows exactly what is produced. It does not, however, distinguish itself from nearby siblings like create_tax_service or create_tax_code, so an agent must infer the boundary from the entity type alone.
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 body contains no when-to-use or when-not-to-use guidance. The critical "Only create one when the user has asked for it" caveat lives in the schema's entity field description, not in the tool description, and no alternative tools (e.g. search_tax_agencies, get_tax_agency) are referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tax_servicecreate tax serviceADestructiveInspect
Create a sales tax code in QuickBooks Online, with new or existing tax rates attached to it. Cannot be undone; only on an explicit request.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The TaxService to create, as a QuickBooks Online API v3 TaxService object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. { TaxCode: '<new code name>', TaxRateDetails: [{ TaxRateName, RateValue (0-100), TaxAgencyId (an existing TaxAgency Id), TaxApplicableOn: 'Sales'|'Purchase' }] }, or TaxRateId to reuse an existing rate. A tax code or rate cannot be deleted once created, only made inactive. Only create one when the user has asked for it. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive, and the description reinforces that with 'Cannot be undone' and 'only on an explicit request.' This adds meaningful behavioral context beyond the generic destructiveHint flag. No contradiction with 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?
Two sentences, both purposeful. The core action is front-loaded and the irreversible side effect and authorization condition are stated immediately afterward with no filler.
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 create operation with a nested object, the entity schema supplies the necessary structural detail, and the description supplies the key caveats: irreversibility and explicit-request-only usage. It does not describe the return value, but no output schema exists and this gap is minor for a create action.
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% and the entity parameter is richly documented, including privacy restrictions, required fields, and inactive-vs-delete semantics. The tool description itself does not need to add parameter detail, so the baseline of 3 applies.
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 states a clear verb and resource: 'Create a sales tax code in QuickBooks Online, with new or existing tax rates attached to it.' This differentiates it from the sibling create_tax_agency and from read-only tax tools like get_tax_code and search_tax_codes.
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 clear context for when invocation is appropriate: 'only on an explicit request' and 'Cannot be undone.' It lacks an explicit mention of alternatives, but the purpose is unambiguous enough that an agent can decide when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_termcreate termBInspect
Create a term in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Term to create, as a QuickBooks Online API v3 Term object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds a genuinely useful behavioral detail not in the annotations — that the response includes the saved record with its SyncToken — but says nothing about permission requirements, duplicate handling, or what happens on validation failure.
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 short sentences, verb-and-resource front-loaded, no filler or restatement of the title.
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?
With no output schema, the description partially compensates by naming SyncToken in the return value, and the schema carries rich parameter detail. However, for a mutation tool it omits error/failure behavior and any indication of whether the Term object shape can be validated client-side, leaving a few real gaps.
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%: the entity parameter is documented as a QuickBooks Online API v3 Term object with an explicit prohibition on government identifiers, birth dates and card-processing details, and company is documented with its optional-when-single-company rule. The description adds no parameter meaning beyond that, so the baseline of 3 applies.
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?
States a specific verb and resource ('Create a term') plus the system context ('in QuickBooks Online'), which cleanly separates it from the get_term/update_term/search_terms siblings operating on the same resource. It does not, however, differentiate itself from the many other create_* entity tools beyond the noun.
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 when-to-use guidance: it never says that update_term should be used for existing terms, that search_terms/get_term exist for lookup, or what prerequisites apply. The agent must infer usage entirely from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_time_activitycreate time activityBInspect
Create a time activity in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The TimeActivity to create, as a QuickBooks Online API v3 TimeActivity object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. NameOf ('Employee' or 'Vendor') with the matching EmployeeRef or VendorRef, plus Hours and Minutes. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, closed-world. The description adds the useful behavior that the saved record is returned with its SyncToken (needed for subsequent updates), but it doesn't mention required permissions, validation behavior, or duplicate handling – beyond safe to add, the record lifecycle 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?
Two short sentences, front-loaded with the action and resource, with no filler. Every part 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?
For a create tool with no output schema, the return-value note is helpful, but the description does not compensate for missing mutation guidance (permissions, when to use, alternatives) even though annotations cover the safety profile. Adequate but with clear gaps for a 2-parameter nested-object 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?
Schema description coverage is 100%, so the entity and company parameters are already documented in detail, including the NameOf/EmployeeRef/VendorRef requirement and PII exclusions. The description adds nothing beyond that schema baseline, so 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 states a specific verb and resource ('Create a time activity in QuickBooks Online') and adds the return value. It is clearly distinct from create-invoice/create-bill siblings, but does not explicitly differentiate from create_task or update_time_activity.
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 on when to use this versus update_time_activity or search_time_activities, and no prerequisites or exclusions. The context is only implied by the verb 'Create'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_transfercreate transferAInspect
Create a transfer in QuickBooks Online. An accounting entry recording a transfer between accounts. It does not move money between bank accounts. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Transfer to create, as a QuickBooks Online API v3 Transfer object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. FromAccountRef, ToAccountRef and Amount are required, and the two accounts must differ. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly=false, destructive=false, openWorld=false), so the bar is lower. The description still adds real value beyond them: it discloses the return payload ('the saved record with its SyncToken'), which matters for chaining into update_transfer, and warns against sending government identifiers, birth dates, or card-processing details.
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 short sentences, front-loaded with the core action, and each carries information. The second sentence lightly restates the first ('recording a transfer between accounts'), so it is efficient but not maximally tight.
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?
There is no output schema, so the description correctly covers the return value (saved record plus SyncToken), and the nested entity object's required fields and the sensitive-data restriction are covered in the schema text. For a create tool whose annotations cover the mutation profile, this is close to complete; only explicit alternative-tool guidance is missing.
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 both parameters are fully documented in the schema, including the required FromAccountRef/ToAccountRef/Amount subfields and the constraint that the accounts must differ. The description adds nothing further about parameters, so the baseline of 3 applies.
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?
States a specific verb and resource ('Create a transfer in QuickBooks Online') and defines the domain concept ('An accounting entry recording a transfer between accounts'). It also draws a useful negative boundary ('It does not move money between bank accounts'), though it never names the nearby siblings (create_deposit, create_journal_entry, create_payment) an agent might confuse it with.
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?
Usage is only implied: the negative clarification about not moving money hints at when this is and isn't appropriate, but there is no explicit when-to-use, no prerequisites, and no routing to an alternative tool (e.g., journal entry vs. transfer). Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_vendorcreate vendorBInspect
Create a vendor in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The Vendor to create, as a QuickBooks Online API v3 Vendor object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the mutation/safety profile is covered structurally. The description adds that the saved record plus SyncToken is returned, which is useful since there is no output schema, but it says nothing about duplicate handling, required fields, permissions, or error behavior.
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 short sentences, front-loaded with the action and followed by the return value. No filler 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 create tool with a nested entity object and no output schema, the description covers the action and the return value but omits duplicate-prevention guidance, required-field expectations, and failure modes. Combined with the schema's full parameter documentation, it is adequate but has clear gaps.
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%: the schema documents both 'entity' (including the sensitive-data warning about SSNs, tax IDs, birth dates, card details) and 'company'. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
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 states a specific verb and resource ('Create a vendor in QuickBooks Online'), which cleanly separates it from update_vendor, search_vendors, and create_customer in the sibling list. It is clear but does not explicitly name an alternative or clarify edge cases such as duplicate vendors.
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?
There is no when-to-use or when-not-to-use guidance. The agent is not told to search_vendors first to avoid duplicates, nor what preconditions (e.g. a connected company) are needed. Only the purpose is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_vendor_creditcreate vendor creditBInspect
Create a vendor credit in QuickBooks Online. Returns the saved record with its SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The VendorCredit to create, as a QuickBooks Online API v3 VendorCredit object. Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the write-but-non-destructive profile is covered. The description adds one genuinely useful behavioral fact beyond annotations: it returns the saved record including its SyncToken (relevant for subsequent update calls). It does not cover auth/connection requirements or whether the call is retry-safe.
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 tight sentences with zero filler; the core action is front-loaded and the return-value note is secondary. Nothing is wasted or buried.
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?
With no output schema, the description correctly picks up the slack by naming the returned record and SyncToken. However, for a tool whose sole required parameter is a free-form nested QBO object, it gives no hint about the minimum fields needed to construct a valid VendorCredit (e.g., vendor reference and amount/line items), leaving a meaningful 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?
Schema description coverage is 100%: the 'entity' param is documented as a QBO API v3 VendorCredit object with an explicit data-privacy warning, and 'company' explains accepted identifiers. The description adds nothing beyond the schema, which is the baseline expectation at full coverage.
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?
States a specific verb and resource ('Create a vendor credit in QuickBooks Online') plus a second sentence on the return payload. The resource is unambiguous enough to separate it from the many other create_* siblings, but the description never explicitly distinguishes it from create_bill, create_purchase, or the update/delete vendor-credit 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 guidance on when to use this versus create_bill or create_purchase, no prerequisites (e.g., a vendor must already exist), and no note that search_vendor_credits/update_vendor_credit exist for other operations. The agent must infer all of this from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_attachabledelete attachableADestructiveInspect
Permanently delete an attachable from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Attachable to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is covered. The description adds valuable behavioral context by stating the deletion is permanent and that explicit user confirmation is required. This goes beyond the structured 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?
Two sentences, each earning its place: one states the action and scope, the other the required confirmation. There is no redundancy or filler.
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 destructive operation with a rich sibling list and clear annotations, the description is sufficient. It communicates irreversibility and the safety requirement. It could mention what happens to associated file relationships, but this is not essential for an 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 description coverage is 100%, so all parameters are already documented. The description reinforces that confirmation must be provided but does not add new parameter details. Baseline 3 is appropriate since the schema carries the semantic burden.
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 states a specific action ('Permanently delete'), a specific resource ('an attachable'), and the system ('QuickBooks Online'). The word 'permanently' disambiguates from update or detach operations. It clearly distinguishes this from siblings like create_attachable, update_attachable, and search_attachables.
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 makes clear what the tool does and that it deletes (not creates or updates) an attachable, so usage context is implied. However, it does not explicitly state when not to use it or name alternatives such as update_attachable for reversible changes. Guidance is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_billdelete billADestructiveInspect
Permanently delete a bill from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Bill to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false. The description adds value by stating 'Permanently delete' and 'Requires explicit user confirmation', which are behavioral traits beyond the annotations. There is no contradiction.
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 that states the action and the key prerequisite. Every word earns its place with no 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 deletion tool with a fully documented schema and no output schema, the description provides sufficient context: it names the action, the target, and the confirmation requirement. No critical information is missing for an agent to call it 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 all parameters (id, company, confirm) are already documented. The description does not add extra semantics beyond what the schema provides, so the baseline of 3 applies.
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 'delete', the resource 'bill', and the system 'QuickBooks Online'. It is specific enough to distinguish from other delete_* tools (e.g., delete_bill_payment, delete_credit_memo) by explicitly naming 'bill'.
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 includes the usage requirement 'Requires explicit user confirmation', which tells the agent when it is appropriate to invoke the tool. It does not explicitly contrast with alternatives, but given the resource-specific naming and the presence of many delete tools, the intended use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_bill_paymentdelete bill paymentADestructiveInspect
Permanently delete a bill payment from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the BillPayment to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds meaningful behavioral context: the deletion is permanent and requires explicit user confirmation. This tells the agent this is irreversible and gated on user consent, going beyond the annotation alone.
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 short sentences with no filler. The primary action and key safety requirement are front-loaded, and every word 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?
For a simple, destructive operation with three well-documented parameters, the description is nearly complete. It conveys irreversibility and the confirmation safeguard; only minor details about response behavior or effects on related records are omitted.
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 already documents id, company, and confirm. The description's confirmation requirement reinforces the confirm parameter but does not add meaning beyond what the schema 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 states a specific verb and resource: 'Permanently delete a bill payment from QuickBooks Online.' The word 'permanently' also helps distinguish this from the sibling void_bill_payment, making the tool's purpose immediately 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?
The description conveys that this is for permanent deletion and requires explicit user confirmation, which implies appropriate usage. However, it does not explicitly compare against alternatives like void_bill_payment or state when one should be preferred over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_budgetdelete budgetADestructiveInspect
Permanently delete a budget from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Budget to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and readOnlyHint=false, establishing the operation as destructive. The description adds the important behavioral details that the deletion is permanent and requires explicit user confirmation, which goes beyond the annotation. There is no contradiction with the 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 consists of two tight sentences with no filler. The first sentence front-loads the core action and resource, and the second adds a critical safety prerequisite. Every word 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?
For a straightforward delete operation with fully documented parameters and a destructiveHint annotation, the description is complete. It conveys the essential context: permanence, the need for explicit consent, and the target system. The absence of an output schema is acceptable because delete operations typically don't require return-value documentation.
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 fully documents all three parameters (id, company, confirm) with 100% coverage, so the baseline is 3. The description's mention of 'explicit user confirmation' mirrors the confirm parameter's schema description but adds no new parameter semantics. The description does not elaborate on id or company 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 states a specific verb ('delete'), resource ('budget'), and system ('QuickBooks Online'), with the key qualifier 'permanently'. This clearly distinguishes it from sibling delete tools and from update_budget. The confirmation requirement adds further semantic precision.
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 clear usage context: use when a budget must be permanently removed, and only after explicit user confirmation. It does not explicitly name alternatives like update_budget for non-destructive changes, but the confirmation prerequisite and the delete semantics make the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_company_currencydelete company currencyADestructiveInspect
Deactivate a company currency in QuickBooks Online. Existing transaction references remain intact. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the CompanyCurrency to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint: true and readOnlyHint: false, so the safety profile is known. The description adds useful behavioral nuance beyond that: 'Existing transaction references remain intact' and the requirement for explicit user confirmation. It does not contradict the 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?
Three short sentences with no filler. The core action is front-loaded, and each sentence earns its place: what it does, a key behavioral consequence, and the required precondition.
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 three-parameter deletion tool, the description covers the action, the key behavioral effect on existing references, and the required user confirmation. No output schema exists, so return-value details are not described, but that is not a significant gap for this 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 description coverage is 100%, so all three parameters are already documented. The description's confirmation requirement is largely redundant with the schema's confirm parameter description ('Must be true. Only set after the user has explicitly confirmed this deletion.'). Thus the description adds little 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 identifies a specific action ('Deactivate a company currency') and a specific resource, clearly distinguishing this tool from siblings like create_company_currency, get_company_currency, search_company_currencies, and update_company_currency. 'Deactivate' also clarifies the semantic difference from a hard delete.
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 states the core use case and adds a critical precondition: 'Requires explicit user confirmation.' It does not explicitly enumerate when to avoid using it or name alternatives, but the operation is distinct enough from sibling tools that the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_credit_card_payment_txndelete credit card payment txnADestructiveInspect
Permanently delete a credit card payment txn from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the CreditCardPaymentTxn to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds the crucial context that deletion is permanent and requires explicit user confirmation. This goes beyond the annotation by informing the agent of irreversibility and the need for human consent, which is vital for a destructive 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 a single sentence that conveys the core action, scope, and critical prerequisite (confirmation) with no unnecessary words. It is front-loaded with the verb and object.
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 destructive delete operation, the description covers permanence and confirmation, and the schema covers all parameters. It does not mention cascading effects or prerequisites (e.g., whether the transaction must be voidable first), but given the annotations and simple parameter set, this is largely sufficient. The lack of an output schema is not an issue here.
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 already provides full descriptions for all three parameters (100% coverage), including the confirm flag's requirement to be true. The tool description reinforces the confirmation requirement but does not add new meaning beyond the schema. Baseline of 3 is appropriate given high schema coverage.
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 states a specific action (permanently delete) on a specific resource (credit card payment txn) within QuickBooks Online, which clearly distinguishes it from other delete tools for different entities. The addition of the confirmation requirement further clarifies the 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?
The purpose is clear, and the resource type is unambiguous. However, it does not explicitly mention alternatives or exclusions, though the name and description make it evident this tool is for credit card payment transactions only. There is no need to list every other delete tool, but a note like 'for other transaction types, use the corresponding delete tool' would be explicit. It's adequate but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_credit_memodelete credit memoADestructiveInspect
Permanently delete a credit memo from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the CreditMemo to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive and non-read-only, and the description consistently reinforces this with 'permanently delete' and 'requires explicit user confirmation.' It adds context beyond the annotations by emphasizing irreversibility and the need for consent, though it does not detail cascade effects or recovery 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?
Two short sentences with no filler. The core action and the critical confirmation requirement are front-loaded, and every sentence adds value.
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 destructive tool with no output schema, the description provides the essential behavioral facts: permanent deletion, target system, and user-confirmation requirement. It could mention side effects or prerequisites for deletion, but the annotations plus description cover the main safety-critical 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?
Schema description coverage is 100%, so the parameters (id, company, confirm) are already fully documented. The description adds no new parameter-level meaning beyond restating the confirmation requirement already present in the confirm field.
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 states a specific verb ('delete'), resource ('credit memo'), and system ('QuickBooks Online'), clearly distinguishing it from sibling delete_* tools like delete_invoice or delete_vendor_credit. The word 'permanently' adds important scope beyond the title.
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 given about when to choose this tool versus alternatives such as voiding, updating, or searching credit memos. The only condition mentioned is explicit user confirmation, which is a prerequisite rather than a usage-vs-alternative guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_depositdelete depositADestructiveInspect
Permanently delete a deposit from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Deposit to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveHint=trueaine, but the description adds meaningful context by emphasizing that deletion is permanent and requires explicit user confirmation. This goes beyond the annotation's binary destructive flag and helps the agent treat the operation as irreversible.
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 short sentences with no wasted words. The core action is front-loaded, and the safety-critical confirmation requirement is stated immediately afterward.
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 delete operation, the essential contextual information is the permanence of the action and the need for user confirmation, both explicitly stated. With full schema coverage for parameters and destructiveHint annotations, nothing else is needed 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%, so the input schema already documents all three parameters. The description reinforces the confirm requirement but does not add new meaning beyond what the schema provides; 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 states a specific verb and resource: 'Permanently delete a deposit from QuickBooks Online.' This clearly distinguishes delete_deposit from the many other delete_* siblings and identifies both the target entity and the system.
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 clearly communicates the key usage precondition: 'Requires explicit user confirmation.' This gives the agent actionable guidance about when it is appropriate to invoke the tool, though it does not name alternatives or explicitly state 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.
delete_estimatedelete estimateADestructiveInspect
Permanently delete an estimate from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Estimate to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, so the description's 'permanently delete' reinforces that. But the description adds critical behavioral context: the deletion is permanent (irreversible), and explicit user confirmation is required. This is exactly the kind of high-stakes behavior an agent needs to know before invoking. It also implies real-world consequences (data loss) that annotations alone don't convey. No contradiction with annotations; the description aligns with destructiveHint=true.
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 no filler. The most important facts — permanent deletion and user confirmation — are front-loaded. Could potentially add more behavioral context, but for what it contains, it's efficient 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?
The description is complete enough for a destructive operation: it states permanent deletion and the confirmation requirement. The output schema is absent, but for a delete operation the return value is usually a success indicator, which the agent can infer. The sibling list includes void_* tools (void_bill_payment, void_invoice, void_sales_receipt) which are alternative non-permanent operations, and the description doesn't explicitly guide the agent to them; that's a minor gap but not critical for a permanent delete 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?
Schema description coverage is 100% — the schema already thoroughly documents 'id' as the QuickBooks Id, 'company' as which connected company, and 'confirm' as must be true. The description doesn't add much parameter-level meaning beyond the schema. The 'require explicit user confirmation' in the description adds slight emphasis to the 'confirm' parameter's importance, but the schema already covers it. Baseline 3 is appropriate when schema does the heavy lifting.
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 states a specific verb ('permanently delete'), a specific resource ('an estimate from QuickBooks Online'), and includes the key requirement of explicit user confirmation. The title is just 'delete estimate', but the description adds the permanent, irreversible nature and the QuickBooks context, making the tool's purpose unambiguous. The sibling list includes many delete_* tools, but the description names the exact resource (estimate), which distinguishes it from delete_bill, delete_invoice, etc.
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 says the delete is permanent and requires explicit user confirmation, which gives clear guidance on when NOT to call it (without user confirmation) and implies it should only be used after user consent. It doesn't name an alternative (e.g., void vs delete), but the context signals are clear enough — this is a permanent delete, versus void_* siblings which might be the non-permanent alternative. The 'requires explicit user confirmation' is a strong usage guideline even though it doesn't enumerate alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_inventory_adjustmentdelete inventory adjustmentADestructiveInspect
Permanently delete an inventory adjustment from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the InventoryAdjustment to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, and the description adds value by stating the deletion is permanent and that explicit user confirmation is required. This extra context reinforces the confirm parameter's role and warns the agent that the action is irreversible, which is important behavioral guidance beyond the annotation alone.
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 short sentences, both informative and front-loaded. The first names the operation and its scope; the second provides the critical safety condition. There is no filler or repetition.
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 single-entity delete tool with 100% schema coverage, destructive annotation, and no nested objects, the description covers the essential operational and safety context. It could add detail about what the response contains or how to confirm success, but the tool is simple enough that this is not a critical 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?
Schema description coverage is 100%, so all three parameters (id, company, confirm) are already documented in the schema. The description's statement that the action 'Requires explicit user confirmation' aligns with the confirm parameter but adds little new semantic meaning beyond what the schema already states.
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 states a specific verb ('delete'), a specific resource ('inventory adjustment'), and the target system ('QuickBooks Online'), and makes the destructive nature explicit with 'Permanently'. This clearly distinguishes it from the many sibling delete_* tools, which act on different resources.
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?
Usage is implied: use this tool when the user wants to delete an inventory adjustment. However, the description does not explicitly say when not to use it or mention any alternative such as void_inventory_adjustment or get_inventory_adjustment for verification. The confirmation requirement hints at the decision gate but does not provide deeper routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_invoicedelete invoiceADestructiveInspect
Permanently delete an invoice from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Invoice to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint: true and readOnlyHint: false, so the destructive nature is covered. The description adds 'Permanently' and 'Requires explicit user confirmation,' which go beyond the annotation flags. This informs the agent that the deletion is irreversible and requires explicit user consent, adding meaningful behavioral context.
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, consisting of two short sentences with no unnecessary words. It front-loads the core action and includes the critical requirement of confirmation. Every word 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?
For a delete tool with a simple schema and no output schema, the description is adequate but not complete. It omits any mention of alternatives (like void_invoice) or potential side effects on linked records. Given the destructive nature and the existence of a void alternative, the description could be more informative. It meets the minimum viability but leaves gaps.
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 all three parameters (id, company, confirm) have their own descriptions. The tool description does not add any additional parameter semantics beyond what the schema already provides. Baseline of 3 is appropriate because the schema carries the full burden.
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 'delete' and the resource 'invoice', and adds 'Permanently' to convey irreversibility. This distinguishes it from the sibling void_invoice, which likely voids rather than deletes. The purpose is unambiguous and 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?
The description does not provide guidance on when to use this tool versus alternatives. It does not mention void_invoice or update_invoice as alternatives for less permanent actions. The only requirement mentioned is user confirmation, which is a precondition, not a usage guideline. No when-not or alternative routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_journal_entrydelete journal entryADestructiveInspect
Permanently delete a journal entry from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the JournalEntry to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'permanently delete' and 'requires explicit user confirmation,' which are meaningful behavioral traits beyond the annotations' destructiveHint and readOnlyHint. It reinforces irreversibility and user-consent requirements, though it does not mention potential side effects or permission prerequisites.
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 core purpose ('Permanently delete a journal entry') and then state the confirmation requirement. No filler words or redundant information; 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?
For a simple deletion tool with full schema coverage and destructiveHint annotation, the description adequately covers purpose and key behavioral requirements. It does not explain return values or error behavior, but the lack of an output schema and the simplicity of the operation make this 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?
Schema description coverage is 100%, so all three parameters (id, company, confirm) are already documented. The description's mention of explicit user confirmation essentially mirrors the schema's confirm parameter description and adds no additional parameter-specific meaning.
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 states the specific verb 'delete', the resource 'journal entry', and the system 'QuickBooks Online', with 'permanently' clarifying the destructive nature. This clearly distinguishes it from siblings like create_journal_entry, update_journal_entry, get_journal_entry, and search_journal_entries.
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 given on when to use this tool versus alternatives such as update_journal_entry for modifications or void operations for reversible actions. The only hint is the verb 'delete', which implies purpose but does not explicitly state selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_paymentdelete paymentADestructiveInspect
Permanently delete a payment from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Payment to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description reinforces and extends this by stating the deletion is permanent and requires explicit user confirmation. It adds the human-consent guardrail beyond what the annotations alone convey, with no contradiction.
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 short, information-dense sentences. The core action is front-loaded, and the safety requirement follows immediately. Every word contributes to the agent's understanding.
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 destructive single-resource delete operation, the description, combined with full schema coverage, covers the essential facts: what is being deleted, that it is permanent, and that confirmation is mandatory. The lack of usage-vs-alternative guidance is the main 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?
Schema description coverage is 100%, and each parameter already has a clear meaning in the schema. The description's mention of explicit user confirmation aligns with the 'confirm' parameter but adds no new semantic detail beyond what the schema documents.
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 names a specific verb ('delete'), a specific resource ('a payment'), and a specific environment ('QuickBooks Online'). The word 'Permanently' distinguishes it from sibling tools like void_payment, and the payment resource distinguishes it from delete_bill_payment.
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 explain when to choose this tool over alternatives such as void_payment or search_payments. It mentions the confirmation requirement, but that is a safety prerequisite, not guidance about when this tool should be used versus its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_purchasedelete purchaseADestructiveInspect
Permanently delete a purchase from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Purchase to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint: true, and the description adds 'Permanently delete,' which clarifies irreversibility beyond the annotation's generic destructiveness. It also states the confirmation requirement, adding behavioral context. This aligns with annotations and adds meaningful detail, so the description adds value beyond what annotations provide.
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 action and scope, followed by the critical confirmation requirement. Every word contributes value; there is no 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?
For a simple delete operation with three parameters and no output schema, the description covers the essential purpose and a key prerequisite (confirmation). It does not specify return values, but that is not expected without an output schema. It is sufficiently complete for an agent to invoke correctly, though it could mention the irreversibility explicitly (it does via 'permanently').
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 (id, company, confirm) is documented. The description mentions 'explicit user confirmation,' which reinforces the confirm parameter but does not add new semantic meaning for id or company. The baseline for 100% coverage is 3, and the description provides marginal additional context about confirmation.
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 states a specific verb and resource: 'Permanently delete a purchase from QuickBooks Online.' This is precise, identifies the target entity (purchase), and includes the scope (QuickBooks Online). It clearly distinguishes from other delete_* tools by naming the resource type, so an agent can select it without confusion.
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 one key prerequisite: 'Requires explicit user confirmation.' This is a clear condition for usage. However, it does not provide guidance on when to use this tool versus alternatives (e.g., void vs. delete for other entities) or mention any exclusions. The usage context is implied by the purpose, but not explicitly differentiated from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_purchase_orderdelete purchase orderADestructiveInspect
Permanently delete a purchase order from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the PurchaseOrder to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, and the description adds that the deletion is permanent and requires explicit user confirmation. This is valuable behavioral context beyond the structured annotations, and there is no contradiction with destructiveHint.
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 short sentences with no filler. The core action and target are front-loaded, and the confirmation requirement is stated immediately after, so an agent can parse the essential information quickly.
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 three-parameter destructive tool with fully documented parameters and a destructiveHint annotation, the description provides everything needed to select and invoke it: the action, resource, platform, permanence, and required user confirmation. Nothing an agent needs in order to call it correctly is missing.
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 id, company, and confirm are already fully explained in the schema. The tool description's mention of user confirmation mirrors the confirm parameter's schema description but adds no new parameter-level detail, so the 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 names a specific verb, a concrete resource ('a purchase order'), and the platform ('QuickBooks Online'), so there is no ambiguity about the operation. The resource is named exactly as in the tool, which distinguishes it from sibling delete tools for other object 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?
It clearly implies when the tool is appropriate: when a purchase order must be permanently removed in QuickBooks Online. The explicit-confirmation requirement is a concrete precondition that tells the agent to gate the call on user approval. It does not explicitly contrast with alternatives, but the resource-specific name makes the primary alternative choice obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_recurring_transactiondelete recurring transactionADestructiveInspect
Permanently delete a recurring transaction from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the RecurringTransaction to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description is not burdened by stating basic safety. It adds valuable behavioral context by emphasizing permanence and requiring explicit user confirmation, which are important for an irreversible mutation.
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 short, direct sentences with no filler. The key information (permanence and confirmation requirement) is front-loaded and every clause 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?
For a simple destructive operation with full schema coverage and strong annotations, the description captures the essential prerequisites (permanence, user confirmation). It does not describe success/error outcomes, but no output schema exists and the operation's core behavior is sufficiently communicated.
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 id, company, and confirm. The description's mention of 'explicit user confirmation' reinforces the confirm parameter's requirement, but it does not add new parameter-level meaning beyond what the 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 uses a specific verb ('delete') and resource ('recurring transaction from QuickBooks Online'), clearly distinguishing it from the many sibling delete_* tools. Adding 'Permanently' clarifies the operation's scope and irreversibility.
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 clearly states the operation targets a recurring transaction and that explicit user confirmation is required before deletion. However, it does not explicitly mention alternatives (e.g., deactivating rather than deleting, or using search/get tools first) or give when-to-use versus when-not-to-use guidance among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_refund_receiptdelete refund receiptADestructiveInspect
Permanently delete a refund receipt from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the RefundReceipt to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveHint=true and readOnlyHint=false. The description adds valuable context beyond the annotations: the deletion is permanent and requires explicit user confirmation. This enriches the safety profile for the agent without contradicting the structured hints.
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 short sentences with zero filler. The action is stated first, followed by the key safety constraint. Every word earns its place, making it easy to parse quickly.
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 tool with full schema coverage, destructive annotations, and no output schema, the description covers the essential operational facts: permanent deletion, the entity, and the confirmation requirement. Nothing needed for correct invocation is missing.
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%: id, company, and confirm all have descriptive text in the schema. The description adds no additional parameter-level meaning, so the 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?
Description uses a specific verb ('delete') and resource ('refund receipt') and adds the critical qualifier 'permanently'. This clearly distinguishes the operation from send/void/update variants and makes the tool's purpose unambiguous even without opening the schema.
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 states the core condition for use: the user must have explicitly confirmed deletion. It also communicates that this is a permanent removal. However, it does not explicitly name alternatives (e.g., voiding) or state when not to use the tool, so it falls short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_sales_receiptdelete sales receiptADestructiveInspect
Permanently delete a sales receipt from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the SalesReceipt to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description adds value by specifying 'permanently' and emphasizing 'requires explicit user confirmation'. This goes beyond the annotation by disclosing the irreversibility and the confirmation requirement, which is not captured elsewhere. No contradiction with 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 two sentences with no redundant information. The action and key constraint (permanence and confirmation) are front-loaded. Every word 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?
The description is adequate for a simple delete operation given the annotations and full schema coverage. However, it lacks any reference to the alternative void_sales_receipt and does not explain the consequences of deleting (e.g., impact on linked transactions). This is a notable gap for a destructive action with a closely related sibling.
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 provides 100% description coverage for all parameters, so the description adds little beyond that. The phrase 'explicit user confirmation' hints at the confirm parameter but does not elaborate on its semantics beyond what the schema already states. This meets the baseline for well-documented schemas.
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 'delete' and resource 'sales receipt', and adds 'permanently' to indicate severity. However, it does not explicitly distinguish from the sibling void_sales_receipt, which is a common alternative for sales receipts. The purpose is clear but lacks explicit differentiation.
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 no guidance on when to use this tool versus alternatives like void_sales_receipt. It only states a requirement (explicit user confirmation) but does not explain the conditions under which deletion is appropriate or when voiding is preferred. There is no mention of alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_time_activitydelete time activityADestructiveInspect
Permanently delete a time activity from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the TimeActivity to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds value by specifying that deletion is permanent and requires explicit user confirmation, which goes beyond the mere destructive hint and clarifies the irreversible nature of the 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 short sentences, no filler. The primary action is front-loaded, and the confirmation requirement is stated immediately. Every word 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?
For a delete tool with annotations and fully described parameters, the description covers the essential behavior: what is deleted, that it is permanent, and that confirmation is required. It does not explain return values, but no output schema exists and it is not critical for a delete operation. It is adequate but could mention potential side effects, though 'permanently' largely covers that.
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 for all three parameters, so the baseline is 3. The description does not add extra meaning beyond the schema; it simply reiterates the confirmation requirement, which is already documented in the confirm parameter description.
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 states a specific verb ('delete'), a specific resource ('time activity'), and the context ('from QuickBooks Online'). It also adds 'Permanently' and 'Requires explicit user confirmation,' which distinguishes it from update or void operations and from sibling tools like update_time_activity and create_time_activity.
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 you want to permanently delete a time activity) and includes a precondition ('Requires explicit user confirmation'), but it does not explicitly compare with alternatives or state when not to use it. There is no mention of when to prefer delete over update or void, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_transferdelete transferADestructiveInspect
Permanently delete a transfer from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Transfer to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false, and the description adds meaningful beyond-annotation context by stating the deletion is permanent and requires explicit user confirmation. This gives the agent crucial operational framing without contradicting the 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 consists of two short sentences with no filler. The core behavior and the critical confirmation precondition are front-loaded, and every word contributes to the agent's ability to invoke the tool safely.
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 three-parameter destructive operation, the description, combined with the full schema coverage and annotations, is sufficiently complete. It covers the essential deletion semantics and the confirmation gate, though it does not describe success/failure response behavior since no output schema is present.
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 for id, company, and confirm. The description reinforces the confirmation requirement but adds no syntax, format, or parameter-specific details 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 states a specific action ('Permanently delete') on a specific resource ('a transfer from QuickBooks Online'), making the tool's purpose unmistakable. It distinguishes the tool from create_transfer, update_transfer, and search_transfers by focusing on deletion and permanence. No tautology or ambiguity.
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 the appropriate usage context: when a transfer must be permanently removed and the user has confirmed the action. However, it does not explicitly name alternatives or state when this tool should not be used. The confirmation requirement provides useful procedural context but not full alternative-routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_vendor_creditdelete vendor creditADestructiveInspect
Permanently delete a vendor credit from QuickBooks Online. Requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the VendorCredit to delete. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The destructiveHint annotation already marks the tool as destructive, and the description adds meaningful context beyond it: the deletion is permanent and requires explicit user confirmation. This gives an agent important behavioral information about irreversibility and the need for a confirmation step.
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 short sentences with zero wasted words. The primary action and permanence are front-loaded, and the confirmation requirement is stated immediately after.
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 destructive operation with three well-documented parameters and the destructiveHint annotation, the description is largely complete. It states the resource, permanence, and confirmation prerequisite; a fully complete description might also note that the deletion cannot be undone, but 'Permanently' already implies this.
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%, and each parameter already has a clear description, especially `confirm`, which states it must be true and only set after explicit user confirmation. The tool description itself adds no additional parameter-level meaning beyond what the 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 states a specific verb ('delete'), a specific resource ('vendor credit'), and a clear scope ('from QuickBooks Online'). The word 'Permanently' adds an important precision that distinguishes this destructive action from a void or reversible operation.
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 clear, explicit prerequisite: this should only be invoked after the user has explicitly confirmed the deletion. It does not enumerate alternatives or exclusions, but the resource-specific naming and confirmation gate make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discard_inbox_fileDiscard a file from the receipt inboxADestructiveInspect
Permanently remove a user-selected file from the Caribooks document box without attaching it to QuickBooks. Intended for unwanted documents, duplicates and unrelated files. Requires confirm: true after the user's approval. Retains the document's filing-history row marked discarded.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | true once the user has agreed to drop this file. | |
| upload_id | Yes | The file's id, as listed by list_receipt_inbox. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that removal is permanent, that the filing-history row is retained and marked discarded, and that user confirmation via confirm: true is required. This gives the agent meaningful behavioral context for a destructive 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?
Three sentences front-load the core action, then add use cases, the confirmation requirement, and the retention side effect. Every sentence contributes useful information with no filler.
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 two-parameter destructive tool, the description is complete: it explains what is removed, when to use it, what must be provided, and what residual record remains. The schema covers parameter source for upload_id, and no output schema is needed for this 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 description coverage is 100%, so the schema already documents both upload_id and confirm. The description repeats the confirm requirement but adds no parameter-specific detail beyond what the schema provides, so the 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 states a specific verb and resource: 'Permanently remove a user-selected file from the Caribooks document box.' It also distinguishes itself from related flows by noting it happens 'without attaching it to QuickBooks' and by naming the intended cases: unwanted documents, duplicates, and unrelated files.
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 clear context for when to use the tool ('Intended for unwanted documents, duplicates and unrelated files') and the required approval gate ('Requires confirm: true after the user's approval'). It does not explicitly name alternatives or when-not-to-use conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_bank_transactions_not_in_booksFind bank transactions not in the booksARead-onlyInspect
Compare each connected bank account mapped to a QuickBooks account with what that account's ledger books, and list the bank's posted transactions QuickBooks has no matching line for (same amount and direction within five days). These are often waiting in QuickBooks' bank feed to be accepted. Also counts the booked and pending ones. Defaults to the last 60 days. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Latest date, YYYY-MM-DD. Defaults to today. | |
| from | No | Earliest date, YYYY-MM-DD. Defaults to 60 days before to. | |
| account | No | One bank account: its id, its last four digits, or part of its name, as list_bank_accounts shows them. | |
| company | No | Only the bank accounts mapped to this connected QuickBooks company (name, realm id, or connection id). Every bank account when left out. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only profile, but the description adds real behavioral substance: the five-day/same-amount-and-direction matching heuristic, that it also counts booked and pending transactions, and the default window. 'Read-only' merely repeats the annotation, so this is strong but not maximally informative.
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?
Front-loaded with the core comparison, then supporting detail. Slightly run-on, and the trailing 'Read-only' partially duplicates annotations, but nearly every clause 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?
For a multi-source comparison tool with no output schema, the description explains what is returned (unmatched bank transactions plus booked/pending counts) and the default scope. It lacks guidance on empty/edge results or the required bank-feed connection, but is otherwise sufficient 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 from/to/account/company are fully documented there. The description restates the 60-day default (consistent with the schema) but adds no new syntax or format detail, so the baseline 3 applies.
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?
States a specific operation: comparing each connected bank account's posted transactions against the mapped ledger and listing the ones with no matching line. The matching rule ('same amount and direction within five days') makes the intent unambiguous and distinct from a plain transaction listing.
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 a reconciliation use case ('often waiting in QuickBooks' bank feed to be accepted') and notes the 60-day default, but never states when to reach for this over siblings like list_bank_transactions or find_expenses_without_attachments, nor any preconditions such as needing a connected bank feed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_expenses_without_attachmentsFind expenses without attachmentsARead-onlyInspect
List purchases and bills with no document attached in QuickBooks. Compares transactions against all attachments on the server in one call: no attachment needs reading one by one. Returns compact rows with type, id, date, amount, currency, payee, payment account, expense category, memo and document number, newest first, plus documented and undocumented counts. Charges the user marked in Caribooks as having no receipt are left out and counted as said_no_receipt. Some categories, such as payroll, tax remittances, transfers and bank fees, may not require receipts. A window too wide to fit is truncated from the oldest end; from and to limit the date range.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Latest transaction date, YYYY-MM-DD. Defaults to no upper bound. | |
| from | No | Earliest transaction date, YYYY-MM-DD. Defaults to twelve months ago. | |
| types | No | Purchase (anything paid from a bank or card account, including bank-feed lines), Bill (payables), or both. Defaults to both. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation it discloses ordering (newest first), the exact returned fields, documented/undocumented counts, exclusion of charges flagged said_no_receipt, and truncation-from-the-oldest-end behavior. That is unusually rich behavioral context for a read 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?
Purpose is front-loaded and most sentences carry distinct information (exclusions, return fields, truncation). It is somewhat dense with one long comma-separated sentence enumerating return columns, but little is wasted.
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?
With no output schema, the description does the heavy lifting by enumerating returned rows and counts, exclusions, ordering and truncation. Complete enough to call correctly; a note on pagination/limits would make it airtight.
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 already documents to, from, types and company fully. The description only adds that from/to limit the date range and ties truncation to window width, which is marginal over the schema baseline.
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?
States a specific verb (List) and a precise scope (purchases and bills with no document attached in QuickBooks). This cleanly differentiates it from siblings like search_purchases, search_bills, search_attachables and list_purchases_without_payee.
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?
Gives clear context on the job (surfacing transactions missing receipts) and notes implicit exclusions such as payroll, tax remittances, transfers and bank fees that may not require receipts. It never names an alternative sibling or states an explicit when-not-to-use, so it stops short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountget accountARead-onlyInspect
Get a single account from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Account. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered and the description carries a lighter burden. It adds no return-shape, not-found behavior, or permission context beyond the annotation baseline, so it is merely adequate.
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?
A single front-loaded sentence with no padding; the key action and lookup key come first. The trailing routing clause is slightly cryptic but short enough to earn 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?
For a simple two-parameter read tool with 100% schema coverage and annotations covering the safety profile, the description is close to sufficient. It lacks a named fallback sibling and any not-found guidance, which keeps it out of 5 territory.
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 both id and company are already documented in the schema and the baseline is 3. The description only restates 'by Id' and adds no format, sourcing, or company-selection nuance 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?
States a specific verb (Get) and resource (a single account) scoped by Id from QuickBooks Online, which distinguishes it from the plural get_account_list. It does not explicitly name search_accounts or the other siblings, so it stops short of a 5.
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 clause 'when no search or write answer already holds it' implies a preference ordering (try search/write paths first), which is genuine routing guidance. However, it never names the alternatives (search_accounts, get_account_list) or states an explicit when-not condition, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_listget account listARead-onlyInspect
Generate the QuickBooks account list report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: account_type, account_status (Deleted|Not_Deleted), start_moddate/end_moddate or moddate_macro, createdate_macro; columns (account_name, account_type, detail_acc_type, account_bal, account_desc, account_cur, create_date, last_mod_date), sort_by, sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds substantial behavioral detail beyond that: row types, depth, column alignment, label vs value id alignment, omission and counting of all-zero rows, filter confirmation semantics, and the no_data flag. This gives an agent an unusually clear model of what the tool returns and how it behaves.
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 dense but every clause earns its place, covering purpose, output structure, edge cases, and behavioral nuances. It is front-loaded with the primary action and contains no filler or repetition of schema 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?
With no output schema, the description fully compensates by detailing the return object, row semantics, id alignment, hidden-zero handling, filter confirmation, and no_data behavior. Combined with the input schema and annotations, an agent has everything needed to call the tool and interpret its response 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 schema already documents the parameters. The description adds param-relevant meaning by explaining that the returned filters list only includes parameters QuickBooks actually applied, and that ignored parameters are absent. This helps an agent interpret parameter effects even though the description does not re-explain individual params.
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 opens with a specific verb and resource: 'Generate the QuickBooks account list report.' This clearly distinguishes it from sibling tools like get_account (single account) and search_accounts (search results), and the return shape confirms it is a report-producing tool, not a simple lookup.
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: call this when you need the QuickBooks account list report. However, it does not explicitly state when to prefer this over alternatives such as get_account or search_accounts, nor does it provide exclusion conditions. The usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_aged_payable_detailget aged payable detailARead-onlyInspect
Generate the QuickBooks aged payable detail report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: report_date (YYYY-MM-DD, the as-of date; defaults to today) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); aging_method (Report_Date|Current), aging_period (days per bucket, default 30), num_periods (number of buckets, default 4), past_due (minimum days overdue); start_duedate, end_duedate (YYYY-MM-DD); vendor, term, shipvia; columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and non-destructive, but the description adds rich behavioral detail: return shape, row types, hidden zero-row handling, filters that QuickBooks confirms, and no_data semantics. This goes well beyond what annotations provide.
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 dense but every sentence earns its place: report purpose, return structure, row semantics, id alignment, hidden-zero accounting, filter confirmation, and no-data handling. It front-loads the main purpose and then structures the behavior logically.
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?
With no output schema, the description fully compensates by explaining the return value, row types, id alignment, omitted rows, filter confirmation, and empty-period behavior. Nothing necessary to invoke or interpret the tool correctly is missing.
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 parameters thoroughly (100% coverage), so the baseline is 3. The description adds value beyond the schema by explaining that the output's filters field reveals which parameters QuickBooks actually applied, and that ignored parameters are absent. This gives agents useful feedback about parameter behavior.
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 opens with a specific verb and resource: 'Generate the QuickBooks aged payable detail report.' It clearly identifies what the tool produces and distinguishes it from sibling report tools by naming the exact report and report type.
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 get_aged_payables or get_aged_receivable_detail. The description states what the tool does but does not mention when-not-to-use or provide a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_aged_payablesget aged payablesARead-onlyInspect
Generate the QuickBooks aged payables report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: report_date (YYYY-MM-DD, the as-of date; defaults to today) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); aging_method (Report_Date|Current); vendor, department. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without an output schema, the description fully explains the return shape: columns, column_types, rows, row types, depth, id alignment, hidden_zero_rows, filters, and no_data. It also discloses behavior like omitted zero rows and how errors/ignored parameters surface (absent from filters). This goes far beyond the readOnly hint and is exception detail for a reporting 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 main action is front-loaded, and every sentence contributes operational detail. The description is dense but not verbose; it packs the essential output contract into a compact paragraph without filler. Structured enough for an agent to parse the key facts in order.
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 absence of an output schema, the description provides a complete contract: it explains the row schema, value types, id semantics for summary vs detail, zero-row handling, filter verification, and no_data edge case. An agent can invoke this tool and interpret its response without needing to guess.
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%: the params object already names report_date, date_macro, aging_method, vendor, department. The description adds no new meaning about how to use these parameters beyond what the schema states; the extra details about filters relate to output behavior, not parameter semantics. Baseline 3 is appropriate because the schema carries the load.
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 opens with a clear verb-resource pair ('Generate the QuickBooks aged payables report') and goes on to detail the output structure. It distinguishes this tool from related siblings like get_aged_payable_detail by describing both summary and detail row semantics, and the name itself disambiguates payables from receivables.
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 tells you what the tool does but does not explicitly state when to choose it over get_aged_payable_detail or other aged reports. The sibling list hints at an alternative, but there is no direct guidance such as 'use this for the summary; use get_aged_payable_detail for line-level detail.' Usage context is implied from the name and report type but not made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_aged_receivable_detailget aged receivable detailARead-onlyInspect
Generate the QuickBooks aged receivable detail report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: report_date (YYYY-MM-DD, the as-of date; defaults to today) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); aging_method (Report_Date|Current), aging_period (days per bucket, default 30), num_periods (number of buckets, default 4), past_due (minimum days overdue); start_duedate, end_duedate (YYYY-MM-DD); customer, term, shipvia; columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only and non-destructive behavior, and the description adds substantial context beyond that: row types, depth, value alignment, id semantics, hidden_zero_rows, filters that QuickBooks confirms applied, and no_data behavior. This is rich, honest behavioral disclosure.
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 dense but well-structured: it opens with the tool's purpose, then explains the return format, and then covers edge cases. Every sentence carries useful information without repetition or filler.
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?
With no output schema, the description carries the full burden of explaining the return shape, and it does so thoroughly: columns, row types, ids, hidden zero rows, filter confirmation, and no_data. Combined with the schema's parameter documentation, an agent has what it needs to call 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%, so the schema already documents all parameters. The description adds no parameter-level meaning beyond what the schema provides, which meets the baseline but does not exceed it.
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 opens with a specific verb and resource: 'Generate the QuickBooks aged receivable detail report.' This distinguishes it from siblings like get_aged_receivables and get_aged_payable_detail by naming the exact report being produced.
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 no explicit guidance on when to choose this tool over alternatives. It does not compare itself to get_aged_receivables, get_aged_payable_detail, or other report tools, leaving selection largely to inference from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_aged_receivablesget aged receivablesARead-onlyInspect
Generate the QuickBooks aged receivables report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: report_date (YYYY-MM-DD, the as-of date; defaults to today) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); aging_method (Report_Date|Current); customer, department. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, and the description adds substantial behavioral context: exact return shape, hidden_zero_rows counting, filters listing only confirmed applied parameters, and the no_data flag. It also discloses that ignored parameters are absent from filters, which is valuable beyond the 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 core purpose is front-loaded and the description is dense with useful return-format details. It's slightly run-on and the 'detail reports' aside could confuse, which prevents a 5.
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 no output schema, the description fully specifies the return contract: columns, column_types, rows, row types, depth, money representation, id semantics, hidden rows, filters, and no_data. The only small gap is explaining aging_method values, which is minor given the schema's description coverage.
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 meaning by explaining that a parameter QuickBooks ignored will be absent from filters, clarifying the effective behavior of customer/department/aging_method parameters.
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?
States a specific action ('Generate') and resource ('QuickBooks aged receivables report'). It doesn't explicitly distinguish itself from siblings like get_aged_receivable_detail or get_aged_payables, so it's clear but not maximally differentiated.
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 the many report siblings. It mentions detail reports but doesn't instruct the agent to use get_aged_receivable_detail for detail, and it provides no exclusions or prerequisite conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attachableget attachableARead-onlyInspect
Get a single attachable from QuickBooks Online by Id, when no search or write answer already holds it. A file attachment's TempDownloadUri is a short-lived download link to the original file.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Attachable. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful non-obvious behavior: the returned TempDownloadUri is a short-lived download link to the original file, which warns the agent the URL cannot be stored or reused.
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, both earning their place: the first establishes the operation and the selection condition, the second flags the one return-value gotcha. Front-loaded with no filler.
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 two-parameter read with no output schema, the description covers the identity lookup, the company-scoping precondition (via schema), and the key returned field's lifetime. It does not describe the rest of the attachable payload, but the notable behavioral detail is present.
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%: both 'id' (QuickBooks Id of the Attachable) and 'company' (name, realm id, or connection id; optional with a single company) are documented in the schema. The description adds no syntax, format, or fallback detail beyond that, so the baseline 3 applies.
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 names a specific verb and resource ('Get a single attachable from QuickBooks Online by Id'), so the agent knows exactly what it returns. It hints at sibling routing via 'when no search or write answer already holds it,' but never names search_attachables, so differentiation is implied rather than explicit.
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 gives a clear precondition for use: only when no search or write response already holds the record, which implicitly routes the agent to search_attachables first. There are no explicit exclusions or error cases, but the 'when' condition is stated rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balance_sheetget balance sheetARead-onlyInspect
Generate the QuickBooks balance sheet report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several); adjusted_gain_loss (true|false). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly discloses behavior beyond the readOnlyHint/destructiveHint annotations: row types, depth, Money cell representation, id alignment on summary vs detail reports, hidden_zero_rows, the filters field reflecting confirmed/applied parameters, and no_data semantics. This gives the agent a strong model of what the tool returns and how it behaves.
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 front-loaded with the tool's purpose and then packs complex return-format details into two dense sentences with no filler. Every clause adds needed information about row structure, money values, ids, hidden rows, filters, and no_data. It is appropriately sized for a report with no output schema.
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 there is no output schema, the description thoroughly explains the return shape and edge cases, including id alignment, hidden_zero_rows, filters, and no_data. Combined with 100% parameter schema coverage and safety annotations, the description provides everything needed to invoke and interpret 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%, so the schema already documents all parameters thoroughly. The description adds context about the returned filters field showing which parameters were applied, but it does not add new meaning to the input parameters themselves. 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 uses a specific verb and resource: 'Generate the QuickBooks balance sheet report.' It clearly states what the tool does. However, it does not explicitly distinguish itself from the sibling tools get_balance_sheet_detail and get_balance_sheet_summary, so it is clear but lacks direct sibling differentiation.
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 intended use is implied by 'Generate the QuickBooks balance sheet report,' but the description does not state when to use this tool versus alternatives like get_balance_sheet_detail or get_balance_sheet_summary. There are no exclusions or alternative-selection conditions, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balance_sheet_detailget balance sheet detailARead-onlyInspect
Generate the QuickBooks balance sheet detail report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several); account, account_type; columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly/destructive hints; the description goes well beyond them by explaining the row type/depth structure, how ids align to label cells vs values, hidden_zero_rows counting omitted rows, the filters confirmation behavior including ignored parameters, and the no_data edge case. This is rich behavioral context that significantly informs invocation and result interpretation.
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 dense but every clause earns its place: it front-loads the return shape before diving into row semantics, id alignment, hidden rows, and filter/no_data behavior. No filler or repetition is present.
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?
There is no output schema, so the description carries full responsibility for explaining the return value, and it does so thoroughly: columns, row types, depth, id alignment, hidden rows, filter reporting, and no_data. For a read-only report tool with simple parameters, nothing essential is missing.
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 the parameters thoroughly at 100% coverage, so the baseline is 3. The description adds extra semantic value by explaining that the filters output reflects only parameters QuickBooks actually applied and that an ignored filter parameter will be absent, plus what no_data means for the report period. This goes beyond the schema's static parameter 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 states a specific verb ('Generate') and resource ('the QuickBooks balance sheet detail report'), and the return-shape details make the tool's purpose concrete. However, it does not explicitly distinguish itself from siblings like get_balance_sheet or get_balance_sheet_summary, leaving the agent to infer the difference from names and output details.
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 no guidance about when to use this tool versus alternatives, such as get_balance_sheet_summary for summaries or get_trial_balance for a different view. The agent must infer the appropriate context solely from the tool name and the output description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balance_sheet_summaryget balance sheet summaryARead-onlyInspect
Generate the QuickBooks balance sheet summary report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only safety, but the description goes well beyond that by disclosing return shape, row types, the meaning of id, the difference in id alignment between summary and detail reports, hidden all-zero rows, filters QuickBooks actually applied, and the no_data flag. These are meaningful behaviors an agent would otherwise have to guess.
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 dense but every sentence carries necessary information. It front-loads the core purpose and then packs return-format details into a compact, structured set of clauses with no filler or repetition.
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?
With no output schema, the description carries the full burden of explaining return values, and it does so thoroughly: columns, row types, depth, value alignment, ids, hidden_zero_rows, filters, and no_data. Nothing essential for correctly invoking and interpreting this report tool is missing.
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 already documents start_date, date_macro, accounting_method, summarize_column_by, filters, and company. The description adds no parameter-level detail beyond mentioning the filters field as part of the return object, so it earns the baseline 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?
The description states a specific verb ('Generate') and a specific resource ('the QuickBooks balance sheet summary report'). It clearly identifies this as the summary variant, and even contrasts summary-report behavior with detail-report behavior, differentiating it from siblings like get_balance_sheet_detail.
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 tool's purpose as the summary version of the balance sheet is clear, and the mention of 'summary reports' vs 'detail reports' implies when each variant applies. However, it never explicitly says 'use this for summaries, use get_balance_sheet_detail for detailed line-item data,' so the usage guidance remains implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_billget billARead-onlyInspect
Get a single bill from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Bill. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds only that this is a single-record fetch by Id; it omits not-found behavior, company-selection semantics, and any rate or error context. With annotations doing the heavy lifting, this is an appropriate 3.
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?
A single front-loaded sentence with no wasted words. The trailing usage condition is compact and earns its place by constraining when the tool should be called.
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 single-record read with full parameter schema coverage and complete safety annotations, the definition is nearly complete. It lacks return-value context (no output schema exists) and not-found behavior, which keeps it from a 5.
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 both the required id and the optional company parameter are already documented in the schema. The description reinforces the required id ('by Id') but adds no syntax, format, or company-selection detail beyond the schema, so the baseline 3 applies.
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?
States a specific verb (Get), resource (bill), source (QuickBooks Online), and retrieval key (by Id), and the trailing clause distinguishes single-record retrieval from search or write alternatives. An agent can tell this apart from search_bills without opening either schema.
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 clause 'when no search or write answer already holds it' gives a clear when-not condition, directing the agent to prefer existing search or write results. It does not name the specific alternative tool (e.g., search_bills) or explain how to obtain the required Id, so it stops short of explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bill_paymentget bill paymentARead-onlyInspect
Get a single bill payment from QuickBooks Online by Id, when no search or write answer already holds it. An accounting record of a payment to a vendor. It does not initiate a bank or card payment.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the BillPayment. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuine domain context a payment-named tool needs: it retrieves an accounting record of a vendor payment and does not initiate any bank or card movement.
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 short sentences, front-loaded with the verb+resource, then the routing condition, then the disambiguation caveat. No filler.
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?
With no output schema, the description still communicates that the return is a single accounting record for a vendor payment. It stops short of noting error behavior for an unknown Id or how company resolution failures surface, but it is sufficient to call 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 both parameters (id, company) are already documented in the schema. The description only echoes 'by Id' and says nothing about the multi-company selection semantics, so the baseline 3 applies.
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?
States a specific verb and resource ('Get a single bill payment from QuickBooks Online by Id') and distinguishes the entity from a bank/card payment, which is the main ambiguity for a payments-named tool. An agent can identify exactly what this retrieves.
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 gives a usage condition ('when no search or write answer already holds it'), implicitly routing the agent to search_bill_payments / create_bill_payment when those suffice, and excludes bank/card payment actions. It never names the sibling tool explicitly, so the routing is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_budgetget budgetARead-onlyInspect
Get a single budget from QuickBooks Online by Id, when no search or write answer already holds it. A profit-and-loss budget with one amount per account per period.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Budget. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuine behavioral value by disclosing the returned data shape ('one amount per account per period'), which matters because no output schema exists, though it says nothing about not-found behavior or 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 short sentences, zero waste, front-loaded with the core verb and resource before the usage caveat and the return-shape note.
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 read-only lookup with no output schema, the description supplies the entity identity and the essential shape of the result, and the annotations cover safety. It could go slightly further on failure modes (e.g. invalid or unknown Id), but an agent has enough to call it 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% with only two parameters, so the schema fully documents 'id' and 'company'. The description adds no additional semantics such as Id format or multi-company disambiguation rules, so the 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 names a specific verb and resource ('Get a single budget from QuickBooks Online by Id') and qualifies the entity type ('A profit-and-loss budget with one amount per account per period'), which separates it from report-style siblings like get_budget_vs_actuals and list-style siblings like search_budgets.
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 states a usage condition: use this 'when no search or write answer already holds it,' which clearly implies retrievals obtained via search_budgets or a create/update response should take precedence. It stops short of naming those sibling tools explicitly, which would have made routing indisputable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_budget_vs_actualsget budget vs actualsARead-onlyInspect
Generate the QuickBooks budget vs actuals report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters. All four are required: budget (a Budget Id, from search_budgets), start_date, end_date (YYYY-MM-DD) and rowaxis ('primary' for accounts). Optional: summarize_column_by (Total|Month|Quarter|Year|Classes|Departments|Customers), accounting_method (Cash|Accrual). QuickBooks answers 'Permission Denied' when the budget id is missing or unknown, so read it with search_budgets first. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint annotation, disclosing the exact return shape, row types, depth, value alignment, Money-cell handling, label id behavior, omitted zero rows with hidden_zero_rows, filter confirmation semantics, and the no_data flag. This is exemplary transparency for an agent invoking the 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 dense but every sentence carries meaningful behavioral or usage information. It front-loads the report purpose and then efficiently packs return format, edge cases, filter semantics, and no-data handling without redundancy or filler.
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 and absence of an output schema, the description is remarkably complete. It covers return shape, row/value semantics, ignored-parameter detection via filters, zero-row handling, no-data behavior, required parameters, and the prerequisite search_budgets call. An agent has everything needed to invoke it correctly and interpret its response.
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 already documents all parameters and their requirements. The tool description itself mostly explains output behavior rather than adding new parameter semantics. It reinforces the budget id prerequisite and error behavior, but those details already appear in the schema description, so the description adds no significant beyond-schema parameter meaning.
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 opens with a specific verb and resource: 'Generate the QuickBooks budget vs actuals report.' This clearly differentiates the tool from siblings like get_budget, get_cash_flow, and the other report getters, with no ambiguity about what the report contains.
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 strong context: required parameters, date formats, rowaxis expectations, and the prerequisite to use search_budgets first to obtain a valid budget id. It also warns about the 'Permission Denied' behavior when the budget id is missing or unknown. It does not explicitly name an alternative tool or state when not to use it, but the context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cash_flowget cash flowARead-onlyInspect
Generate the QuickBooks cash flow report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the readOnly/destructive annotations by disclosing the exact return structure, row type semantics, id alignment behavior, omission of zero rows, hidden_zero_rows count, filters behavior, and no_data flag. This gives the agent a detailed and honest model of the tool's behavior.
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 opens with the core purpose in one short sentence, then packs essential return-format details into a dense but well-ordered paragraph. Every sentence contributes meaningful information, especially valuable given there is no output schema.
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?
With no output schema, the description fully compensates by explaining columns, column_types, rows, row types, depth, values, id semantics, hidden_zero_rows, filters, and no_data. Nothing critical is missing for an agent to understand what the tool returns and how to interpret it.
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 already documents both params and company. The description adds some context about how filters appear in the response, but it does not add significant new meaning to the input parameters themselves.
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 names a specific verb and resource: 'Generate the QuickBooks cash flow report.' The report type, clearly reflected in the tool name, differentiates it from sibling report tools such as get_balance_sheet or get_profit_and_loss.
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 clearly states that this tool produces the cash flow report, giving the agent a direct basis for selecting it. It does not explicitly list when-not-to-use conditions or name alternatives, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_changesget changesARead-onlyInspect
List everything created, updated or deleted in QuickBooks Online since a given moment, for the named entities. Returns QuickBooks' CDCResponse, in which a record carrying status: Deleted was removed. QuickBooks only looks back 30 days.
| Name | Required | Description | Default |
|---|---|---|---|
| since | Yes | Return everything changed since this moment (YYYY-MM-DD or an ISO timestamp). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| entities | No | QuickBooks entity names to watch. Defaults to Invoice, Bill, Payment, BillPayment, Purchase, Estimate, SalesReceipt, JournalEntry, Customer, Vendor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds valuable context: it explains the return type (CDCResponse) and that records with status: Deleted were removed, clarifying how deletions are represented. It also discloses the 30-day lookback limit. No contradiction with 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 two sentences, front-loaded with the core purpose. It efficiently includes the return format, the deletion status nuance, and the 30-day limit without any fluff. 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 there is no output schema, the description explains the return value as CDCResponse and the meaning of the Deleted status. It also covers the time constraint and entity selection. While it doesn't mention pagination or record limits, these are likely not critical for this read-only change-listing tool, so the description 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 provides descriptions for all three parameters (since, company, entities) with 100% coverage, so the schema does the heavy lifting. The description adds minimal extra meaning beyond restating 'since a given moment' and 'named entities,' which are already in the schema. It does not introduce any new parameter 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?
The description clearly states the tool's purpose: 'List everything created, updated or deleted in QuickBooks Online since a given moment, for the named entities.' This is a specific verb (list), resource (QuickBooks changes), and scope (since a time, for entities). It distinguishes itself from the many get_* and search_* siblings by focusing on change events rather than static data retrieval, and it explicitly mentions the CDCResponse format.
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 when to use it: when you need to see changes since a moment, for specific entities. It also notes a key constraint: 'QuickBooks only looks back 30 days.' However, it does not explicitly state alternatives or when not to use it, but given the tool's unique nature among siblings, this is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_classget classARead-onlyInspect
Get a single class from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Class. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered without the description. The text adds little beyond confirming a QBO-sourced record: no auth requirements, rate limits, or failure modes for a missing Id.
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?
A single tight sentence with the verb and resource front-loaded and no filler. It is efficient, though the trailing clause is slightly convoluted for the amount of guidance it delivers.
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 read-only single-entity fetch with 100% schema coverage and no output schema, the description gives an agent everything needed to invoke it. Only richer routing language against search_classes would push it higher.
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 both 'id' and 'company' are already documented in the schema, and the description's 'by Id' simply restates the required key. Baseline 3 is appropriate when the schema carries the full burden.
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?
States a specific verb ('Get') and resource ('a single class from QuickBooks Online') and qualifies it with 'by Id', which cleanly separates it from the plural search_classes sibling. It lacks any explicit naming of the alternative, but the singular/Id framing makes the purpose unambiguous.
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?
Offers a when-to-use condition ('when no search or write answer already holds it'), signaling this is the direct-fetch path rather than a search. The phrasing is somewhat awkward and never names search_classes explicitly, so it stops short of a clean routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_class_salesget class salesARead-onlyInspect
Generate the QuickBooks class sales report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only and non-destructive, so the description does not need to repeat that safety profile. It adds significant behavioral detail beyond annotations: it describes the exact return shape (columns, column_types, rows), edge cases (all-zero rows omitted, hidden_zero_rows), how ids align on summary vs detail reports, and the meaning of filters and no_data. This goes well beyond the minimal expectations and provides deep transparency, though it could clarify whether pagination or limits exist, which is 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 a single, dense paragraph that front-loads the primary purpose and then efficiently details the return format. Each sentence contributes substantive information about behavior or output structure. It is not overly long and there is minimal wasted phrasing, though it could be broken into smaller sentences for easier scanning. Still, it is well within acceptable length and avoids 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 moderate complexity (a report with nested structures), the description covers essential aspects: the action, the input parameters (via schema), the output format, edge cases, and error-like conditions. The absence of an output schema makes this explanation critical, and it does provide it. However, it lacks explicit mention of pagination limits or potential throttling, and doesn't clarify how errors (e.g., invalid date) are surfaced, but for this context it is quite 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 already provides a comprehensive description of the params object, covering date formats, macros, accounting_method, summarize_column_by, and filters, with 100% coverage. The description does not add new parameter-specific details beyond what's already in the schema. It references 'filters' but without explaining them further, so it adds minimal value. Given the schema's thoroughness, a 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 states a clear action ('Generate the QuickBooks class sales report') and a specific resource (class sales). It distinguishes itself from related report tools (like get_customer_sales, get_item_sales) by starting with 'class sales,' making the purpose unambiguous. The detailed return format description also reinforces what the tool produces, setting it apart from simply listing data.
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 that filters are applied and that ignored parameters are absent from the output, which implies how to use it (e.g., if a filter isn't applied, it won't appear). However, it doesn't explicitly state when to use this tool over alternatives (e.g., versus get_customer_sales, get_item_sales) or provide exclusions. The sibling list shows many similar report tools, but no guidance on selecting among them is given, leaving the agent to infer based on the 'class sales' focus.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_currencyget company currencyARead-onlyInspect
Get a single company currency from QuickBooks Online by Id, when no search or write answer already holds it. The currencies the company transacts in; only meaningful with multicurrency enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the CompanyCurrency. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the meaningful precondition that the data is 'only meaningful with multicurrency enabled,' which is behavioral context not present in the 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?
Front-loads the verb and resource in the first clause and keeps everything to two sentences. The second sentence's opening phrase 'The currencies the company transacts in' borders on restating the resource, so it is efficient but not maximally tight.
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?
With no output schema and safety fully covered by annotations, the description supplies the key precondition (multicurrency) and the routing rule for search/write alternatives. It is complete enough to call correctly, though not exhaustive about failure modes when multicurrency is off.
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%, and both parameters (id, company) are fully documented in the schema. The description only echoes the by-Id lookup, adding no format, multi-company, or identifier semantics beyond what the schema already provides, so the baseline 3 applies.
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?
States a specific verb and resource (get a single company currency from QuickBooks Online) and pins the scope to a by-Id lookup. An agent can distinguish this from search_company_currencies or create/update/delete_company_currency without opening a schema.
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 phrase 'when no search or write answer already holds it' routes the agent toward search/write siblings first, giving real when-to-use context. It stops short of naming search_company_currencies explicitly, so the guidance is implied rather than fully enumerated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_infoget company infoBRead-onlyInspect
Get a single company info from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Defaults to the connected company. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered without the description. The description adds no behavioral context of its own, e.g. nothing about what fields are returned or any callback/rate considerations, so it contributes little beyond the structured fields.
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?
A single front-loaded sentence with the verb and resource up front and no padding. The trailing conditional clause is a bit awkward but does not waste much space.
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 two-optional-parameter read tool with full schema coverage, annotations, and no output schema, the essentials are present. However, 'by Id' conflicts slightly with id being optional and defaulting to the connected company, and the tool's relationship to search_company_infos goes unaddressed.
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 both parameters (id and company, including the connected-company default and accepted identifier formats) are fully documented in the schema. The description only restates 'by Id' and adds no syntax or default information beyond it, which is the baseline when the schema does the work.
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?
States a specific verb and resource ('Get a single company info ... by Id'), which is clear enough to act on. It does not name the closest sibling, search_company_infos, so the agent must infer the relationship itself rather than being told.
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 trailing clause 'when no search or write answer already holds it' implies a fallback-only usage, but it is vague and names no concrete alternative. A stronger version would explicitly say to prefer search_company_infos for lookups and use this only when the Id is already known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_credit_card_payment_txnget credit card payment txnARead-onlyInspect
Get a single credit card payment txn from QuickBooks Online by Id, when no search or write answer already holds it. An accounting record of a bank payment toward a credit card balance. It does not move money.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the CreditCardPaymentTxn. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds domain context beyond annotations: it is 'an accounting record of a bank payment toward a credit card balance' and 'does not move money,' which prevents confusion with an actual payment 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?
Three short sentences with no wasted words. The core purpose and usage condition are front-loaded in the first sentence, followed by concise domain and negative clarification.
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 read-by-Id tool with full parameter coverage, safety annotations, and no output schema, the description is complete enough to call correctly. It covers purpose, scope, usage condition, domain meaning, and the key negative behavior.
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 already documents both the required 'id' and optional 'company' parameters. The description only specifies lookup by Id and adds no syntax, format, or company-selection guidance beyond what the schema 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?
States a specific verb and resource ('Get a single credit card payment txn from QuickBooks Online by Id') and scopes it to a single record. The phrase 'when no search or write answer already holds it' distinguishes it from search and write siblings without requiring the agent to open a schema.
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?
Gives a clear usage condition: use it when no search or write answer already holds the record. This implicitly routes the agent away from search_credit_card_payment_txns and create/update/delete siblings, though it does not name them explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_credit_memoget credit memoARead-onlyInspect
Get a single credit memo from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the CreditMemo. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false). The description adds value beyond that with a redundancy-avoidance rule — don't spend a call if a search or write already returned the memo — which is genuine behavioral context. It does not mention not-found/error behavior or what the returned memo contains.
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?
A single sentence with the action, resource, keying parameter, and usage condition front-loaded. No filler.
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 single-record read with a fully documented two-parameter schema and annotations, the description is nearly sufficient. The remaining gap is reporting what happens on an unknown Id or ambiguous company, which an agent would want before calling.
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 both 'id' and 'company' are already documented in the schema; the description only restates 'by Id' and says nothing about the optional company selector. Baseline 3 is appropriate when the schema carries the parameter burden.
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?
States a specific verb and resource with retrieval scope: 'Get a single credit memo from QuickBooks Online by Id.' The word 'single' implicitly separates it from search_credit_memos, but the sibling is never named, so the differentiation is left to inference.
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 a real when-to-use condition: only fetch when a search or write response doesn't already contain the record. It stops short of naming search_credit_memos as the alternative path, so the routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customerget customerARead-onlyInspect
Get a single customer from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Customer. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds cardinality ('single customer') and retrieval by Id, but does not disclose error behavior, company scoping, or return format.
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?
One concise sentence that front-loads the purpose. The trailing usage clause is slightly cryptic but does not waste space.
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 full schema coverage and annotations covering safety, the description is largely sufficient. It omits explicit alternative guidance and company parameter behavior, but these are minor for this tool's complexity.
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 both parameters. The description mentions Id retrieval but adds no syntax or format details beyond the schema, and does not address the optional company parameter.
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?
States a specific verb (Get), resource (customer), and scope (single, by Id) from QuickBooks Online. Distinguishes from search and write operations implicitly, but does not name the sibling tool search_customers explicitly.
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?
Offers a usage condition ('when no search or write answer already holds it'), implying the tool should be used only when the customer isn't already available from a search or write. However, it does not explicitly name the alternative tool (search_customers) or clarify when to search versus fetch by Id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customer_balanceget customer balanceARead-onlyInspect
Generate the QuickBooks customer balance report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: report_date (YYYY-MM-DD, the as-of date; defaults to today) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); customer, department, arpaid (All|Paid|Unpaid). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the call read-only and non-destructive, but the description adds substantial behavioral nuance: hidden_zero_rows accounting, filters echoing only parameters QuickBooks actually applied, and no_data signaling an empty period. It also documents row type/depth/value semantics and how id relates to label cells. This goes well beyond what the annotations alone provide.
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 purpose is front-loaded and no sentence is padding. The return-format sentence is dense and somewhat run-on, but given the lack of an output schema, every clause earns its place. It could be better structured, but it is not bloated.
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?
With no output schema and nested return objects, the description covers the essential contract: top-level keys, row types, depth, value alignment, id meaning, hidden-zero handling, filter echo, and empty-period behavior. This is sufficient for an agent to invoke the tool and correctly interpret its results. The only notable gap is usage positioning, which is already accounted for in the usage_guidelines dimension.
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 parameters thoroughly, including date formats, date_macro choices, and enums for accounting_method, summarize_column_by, and arpaid. The description adds little about how to set parameters; its filter-echo note is about output behavior rather than parameter syntax. With 100% schema coverage, 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?
Opens with a specific verb and resource: 'Generate the QuickBooks customer balance report.' This clearly distinguishes it from create/update/delete siblings and from unrelated report tools like get_cash_flow or get_profit_and_loss. However, it never explicitly positions itself against the closely related get_customer_balance_detail, so some sibling differentiation is left to inference.
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 no guidance on when to choose this tool over alternatives. It names no siblings such as get_customer_balance_detail, get_customer_sales, or get_customer_income, and it states no exclusions or when-not-to-use conditions. An agent must infer selection entirely from the tool name and nearby context signals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customer_balance_detailget customer balance detailARead-onlyInspect
Generate the QuickBooks customer balance detail report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: report_date (YYYY-MM-DD, the as-of date; defaults to today) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); aging_method (Report_Date|Current); start_duedate, end_duedate (YYYY-MM-DD); customer, department, term, shipvia, arpaid (All|Paid|Unpaid); columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds valuable behavioral details: how rows are structured (type, depth, values), the meaning of 'id' and its alignment on detail vs summary reports, the omission of all-zero rows (counted in hidden_zero_rows), the 'filters' field reflecting applied parameters, and 'no_data' flag. This goes beyond annotations and clarifies output behavior.
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 dense sentence but packs in essential details about the return format and behavioral quirks. It is front-loaded with the purpose, then explains the output structure. While it could be broken into shorter sentences for readability, it contains no fluff and each clause adds value.
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 (many parameters, a detailed report) and the absence of an output schema, the description explains the return structure thoroughly: columns, column_types, rows with type/depth/values, id alignment, hidden_zero_rows, filters, and no_data. This is sufficient for an agent to understand what the tool returns. Minor gaps exist (e.g., does not describe what the report contains beyond 'balance detail'), but the core context is covered.
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 description coverage is 100%, meaning all parameters (report_date, date_macro, aging_method, customer, columns, etc.) are already documented in the input schema. The description does not add any parameter-specific semantics beyond what the schema provides. Since the schema carries the full burden, a 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's purpose: 'Generate the QuickBooks customer balance detail report.' This is a specific verb (generate) and resource (customer balance detail report), distinguishing it from summary reports like get_customer_balance by the word 'detail.' The purpose is unambiguous and matches the tool name.
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 explicitly state when to use this tool versus alternatives. It focuses on the output structure and behavior but provides no guidance on when to choose this over get_customer_balance, get_aged_receivable_detail, or other report tools. Usage is implied by the name and the fact it generates a specific report, but there is no explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customer_incomeget customer incomeARead-onlyInspect
Generate the QuickBooks customer income report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several); term. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds substantial behavioral detail beyond the annotations: row types, depth and value alignment, id semantics for summary vs detail reports, hidden_zero_rows counting, filter-confirmation behavior, and the no_data flag. This gives an agent a strong model of what the call will return and how it behaves.
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 front-loaded with the primary purpose and then packs highly relevant output semantics into a compact second sentence. Every clause earns its place; there is no filler or repetition of annotation data.
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 that there is no output schema, the description takes on the burden of explaining return values, and it does so thoroughly: columns, rows, types, depth, id alignment, hidden_zero_rows, filters, and no_data. Combined with a fully documented input schema, this is complete enough for an agent to invoke the tool and interpret the result 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 the baseline is 3; the description does not need to restate parameter meanings. It adds one useful nuance by explaining that filters only appear in the response when QuickBooks confirms it applied them, but it otherwise contributes little parameter-specific semantic 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 verb and resource: 'Generate the QuickBooks customer income report.' This is specific enough to identify the operation. However, it does not explicitly distinguish this report from sibling tools like get_customer_sales or get_customer_balance, so it stops short of full differentiation.
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 no guidance on when to use this tool versus alternatives. It does not mention any exclusions, prerequisites, or conditions that would route an agent to get_customer_income rather than other report tools. The only usage context is implied by the tool name and title.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customer_salesget customer salesARead-onlyInspect
Generate the QuickBooks customer sales report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only and non-destructive, and the description adds valuable behavioral details: it explains the output format, handling of zero rows, and the semantics of filters and no_data flag. It goes beyond annotations by clarifying the shape of the response and edge cases, which is crucial for understanding tool behavior.
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 detailed but extremely dense, packing a lot of information into a few sentences. It's structured and front-loads the main purpose, but the output format explanation is lengthy and might be considered as lacking in readability, though still efficient for the technical audience.
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 of the tool and the lack of an output schema, the description does an admirable job explaining the return format, including the role of each field and edge cases. The output schema is absent, so the description compensates fully; the only minor omission is examples of date_macro values, but the ellipsis implies more.
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, so baseline is 3. The description adds context about filters (that unconfirmed filters are absent), but the schema already explains the parameters and their types. The description reinforces the filter behavior but doesn't introduce new parameter details beyond that.
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 generates the QuickBooks customer sales report, a specific verb and resource. It distinguishes itself from siblings by specifying the report type and providing detailed output structure, which sets it apart from other get_* 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?
While it doesn't explicitly say when not to use it or name alternative tools, the description clearly implies it's for customer sales reports, and the sibling list includes related tools like get_customer_income or get_item_sales, suggesting an agent can infer usage. It provides report-specific details but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customer_typeget customer typeBRead-onlyInspect
Get a single customer type from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the CustomerType. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered without the description. The text adds little beyond 'single ... by Id' – it says nothing about not-found behavior, return shape, or token/refresh needs, so it is adequate but thin against an already-low bar.
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?
One sentence, front-loaded with the verb and resource, with no padding. The trailing conditional clause is slightly awkward but does carry routing information rather than filler.
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 single-entity read with 100% schema coverage and annotations carrying the safety profile, the essentials are present. It is nonetheless incomplete on the one thing the structured fields don't supply: what the tool returns and how it behaves when the Id is not found.
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%, with both 'id' and 'company' documented in the schema, so the baseline is 3. The description's 'by Id' merely restates what the schema already says and adds no format, scope, or multi-company nuance.
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?
States a specific verb and resource ('Get a single customer type from QuickBooks Online by Id'), which clearly separates a point lookup from the sibling search_customer_types list tool. It stops short of naming that sibling explicitly, so differentiation is implied rather than stated.
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 trailing clause 'when no search or write answer already holds it' gestures at when-not-to-use (prefer a search or a write response if it already has the record), but it is vague and never names search_customer_types or states a concrete precondition. Usage context is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_departmentget departmentARead-onlyInspect
Get a single department from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Department. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, covering the safety profile. The description adds that retrieval is by Id and a conditional usage note, but doesn't mention error behavior for missing Ids or company resolution — modest value beyond 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?
A single, front-loaded sentence where every clause earns its place: verb, resource, source, key, and a usage caveat. No padding.
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 2-param read tool with full schema coverage and annotations, the description gives enough to call it correctly. Minor gap: it doesn't clarify the optional company parameter's fallback behavior, though the schema does.
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 both id and company are fully documented in the schema. The description only references 'by Id' and adds no new semantics beyond what the schema provides; baseline 3 applies.
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?
States a specific verb (Get), resource (a single department), and source system (QuickBooks Online) by Id. Distinguishes from list-style siblings like search_departments by emphasizing 'single' and Id-based retrieval.
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?
Adds a selection heuristic: use when no search or write answer already holds it, implying preference for search_departments or write responses when applicable. Explicit exclusions are present but the alternative naming is generic rather than pointing to a specific sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_department_salesget department salesARead-onlyInspect
Generate the QuickBooks department sales report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=true and destructiveHint=false; the description goes far beyond by documenting row types, depth, Money-as-number values, id alignment on summary vs detail reports, hidden_zero_rows, the filters echo with ignored params omitted, and the no_data flag. This gives an agent an accurate model of the tool's behavior.
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?
Every sentence carries a distinct fact about the return shape or edge-case behavior, with the core purpose front-loaded. The description is dense but not bloated, and the structured enumeration of return fields reads efficiently.
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?
There is no output schema, yet the description manually documents columns, column_types, rows, row type and depth, id alignment, hidden_zero_rows, filters, and no_data. Combined with the self-describing input schema and safety annotations, an agent has enough to call and interpret 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?
With 100% schema coverage, the schema already documents params and company. The description adds valuable semantic context: ignored filter parameters silently disappear from the returned filters list, and no_data explains a period with nothing to report. It doesn't restate syntax, but it clarifies interpretation 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 opens with a specific verb and resource ('Generate the QuickBooks department sales report'), and the detailed return-shape explanation makes it unmistakable from sibling tools like get_class_sales or get_customer_sales. Even without naming alternatives, it fully identifies what the tool produces.
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 report name implies when to use it for department-level sales reporting, but there is no explicit statement of when to prefer it over sibling sales-report tools or what inputs select it. It provides clear context, but not exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_depositget depositBRead-onlyInspect
Get a single deposit from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Deposit. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds no behavioral context of its own: it says nothing about what happens when the Id does not exist, error behavior, or the shape of the returned deposit. There is no output schema to compensate.
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?
A single front-loaded sentence with no padding, though the trailing 'when no search or write answer already holds it' clause is awkwardly worded and slightly obscures the intended routing rule.
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 read-only single-record fetch with full schema coverage and annotation-covered safety, the essentials are present. However, with no output schema, the description should at least hint at the return shape and not-found behavior, and it does not.
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 both the 'id' and 'company' parameters are already fully documented in the schema. The description's 'by Id' phrasing adds nothing beyond what the schema states; baseline 3 applies.
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?
States a specific verb and resource ('Get a single deposit ... by Id') scoped to QuickBooks Online, which cleanly separates it from list/search siblings. It gestures at search_deposits ('when no search ... already holds it') but never names it, so the differentiation is implied rather than explicit.
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 clause 'when no search or write answer already holds it' gives a conditional hint to prefer search/create paths first, which is real usage guidance. But the alternative tool is never named and the condition is vague, leaving the agent to infer that search_deposits is the preferred path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_employeeget employeeBRead-onlyInspect
Get a single employee from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Employee. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that — no mention of behavior for an unknown/foreign Id, no note about company scoping ambiguity, no indication of the returned shape. With annotations carrying the burden, a 3 is appropriate.
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?
One sentence, front-loaded with the verb and resource, with the usage condition trailing. Nothing is padded, though the conditional clause is compact to the point of being cryptic.
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 two-parameter read tool with full annotation coverage the description is adequate on inputs, but there is no output schema, so the agent has no idea what an employee record contains or what happens on a miss. One clause on the return payload or error behavior would close the 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?
Schema coverage is 100%: both 'id' and 'company' are fully described in the schema, including the optional-when-single-company rule. The description adds no format, casing, or resolution detail beyond what the schema already provides, so the baseline 3 applies.
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 states a specific verb and resource ('Get a single employee from QuickBooks Online by Id') and makes the single-record scope explicit, which separates it from list-oriented siblings. However, it never names the sibling it is contrasted with (search_employees) or acknowledges create_employee/update_employee by name, so differentiation requires the agent to infer from the generic phrase 'search or write'.
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 gives a conditional ('when no search or write answer already holds it'), implying an agent should exhaust search_employees first and use this only for a direct Id lookup — useful but phrased obliquely. No explicit when-not guidance, no named alternative, and 'write answer already holds it' is ambiguous (does a prior create response count?).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_estimateget estimateARead-onlyInspect
Get a single estimate from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Estimate. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds the scoping condition for when to fetch directly, but says nothing about error behavior (missing Id), company resolution, or return content; with annotations covering the basics, a 3 is appropriate.
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?
One sentence, front-loaded with the core action and scope, with the usage condition appended efficiently. No waste.
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 single-record read with full schema coverage and safety annotations, the description is nearly complete. Minor gaps are the lack of a named alternative search tool and no mention of behavior for an invalid or cross-company Id.
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 both parameters are fully documented in the schema. The description adds no detail about the id format or the company parameter's optionality; baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb (Get) and resource (a single estimate from QuickBooks Online) with the lookup key (Id). Clear what it does, though sibling differentiation is only via the label and the 'when no search or write answer already holds it' clause rather than a named alternative.
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?
Gives a clear condition: use only when no search or write answer already holds the estimate. Implies search_estimates as the alternative without naming it, so the routing is clear but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_exchange_rateget exchange rateARead-onlyInspect
Get the exchange rate QuickBooks uses for a currency into the company's home currency on a date (multicurrency companies only).
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| currency | Yes | Source currency code, e.g. USD (the rate into the company's home currency). | |
| as_of_date | No | YYYY-MM-DD; defaults to today. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is established. The description adds that the rate is the one QuickBooks uses and is date-specific, which is useful context. However, it does not disclose behavior for non-multicurrency companies, missing rates, or the return shape, so it adds only modest behavioral transparency beyond the 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 a single, front-loaded sentence that communicates the operation, direction, date dimension, and multicurrency restriction without any filler. Every phrase 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?
For a simple read-only lookup with fully documented parameters, the description plus schema covers the essential invocation details. The main gaps are the lack of an explicit pointer to search_exchange_rates for plural/search scenarios and no note about what happens if the company is not multicurrency.
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%, and all three parameters already have meaningful descriptions: company, currency, and as_of_date. The description reinforces the currency/home-currency direction and date relevance, but it does not add significant semantic detail beyond what the 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 states a specific verb and resource: get the exchange rate QuickBooks uses for a source currency into the company's home currency on a date. It also adds the important scope restriction that this applies to multicurrency companies only. However, it does not explicitly distinguish itself from the sibling search_exchange_rates, so an agent might not immediately know when to use this getter versus the search 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 a clear precondition (multicurrency companies only) and defines the operation's context: one currency, home-currency direction, and a date. It does not name alternatives such as search_exchange_rates or explain when to prefer one over the other, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_general_ledgerget general ledgerARead-onlyInspect
Generate the QuickBooks general ledger report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several); account (Account Ids, comma-separated), account_type (Bank, AccountsReceivable, Income, Expense, ...), source_account; columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool readOnly and non-destructive, and the description goes well beyond them. It documents the full return contract: row type/depth semantics, Money cells as numbers, id alignment for summary vs detail reports, hidden_zero_rows, confirmed applied filters, and no_data. There is no contradiction with the 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?
Two sentences with no filler; the purpose is front-loaded and the dense second sentence packs only high-value behavioral facts. It is not perfectly scannable due to the long semicolon-heavy structure, but every clause 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?
With no output schema, the description serves as the sole documentation of the return value and covers its important quirks: row types, value alignment, id semantics, hidden zero rows, filter confirmation, and no_data. Input parameters are fully covered by the schema, so nothing essential is missing for correct invocation.
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 documents all parameters at 100% coverage, so the baseline is 3. The description adds one valuable parameter-related behavior: the returned filters array only includes parameters QuickBooks actually applied, so an absent filter means an ignored input. It avoids restating parameter formats already covered by 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 states a specific verb+resource: 'Generate the QuickBooks general ledger report.' It clearly identifies the exact report and the returned object shape. However, it never contrasts with the many sibling report tools (e.g. get_journal_report, get_trial_balance), so differentiation relies on the report's name rather than explicit scoping.
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?
There is no when-to-use or when-not-to-use guidance and no reference to alternative report tools. Given the large sibling set, an agent must infer from the tool name alone when to pick this instead of get_journal_report or get_transaction_detail_by_account. This is the clearest gap in the definition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inventory_adjustmentget inventory adjustmentARead-onlyInspect
Get a single inventory adjustment from QuickBooks Online by Id, when no search or write answer already holds it. Changes the quantity on hand of inventory items and books the valuation difference; US companies on Plus or Advanced only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the InventoryAdjustment. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds genuinely useful context beyond them: what an inventory adjustment record represents (changes quantity on hand, books the valuation difference) and a hard eligibility constraint that US companies must be on Plus or Advanced — the kind of prerequisite an agent cannot infer from structured fields.
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 the action and retrieval key, with qualifying conditions following. Efficient overall, though 'when no search or write answer already holds it' is wordy for the guidance it conveys.
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 single-record getter with no output schema, the description supplies the record's business meaning and a platform/edition restriction, which is what an agent needs to decide whether the call can succeed. Return-value structure is reasonably left to the API, so remaining gaps are minor.
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% with only two parameters, both documented in the schema (the QuickBooks Id and the optional company selector). The description adds no format, resolution order, or multi-company guidance beyond what the schema already says, so the baseline 3 applies.
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?
States a specific verb and resource with the retrieval key ('Get a single inventory adjustment ... by Id'), and names the product (QuickBooks Online). It is clearly distinguished from create/update/delete_inventory_adjustment siblings as the read-one variant, though it never names a sibling search tool explicitly.
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 phrase 'when no search or write answer already holds it' gestures at when to prefer this over alternatives, but it is oblique — it does not name a specific alternative tool or state a clear condition, such as 'use search_ instead when you don't have the Id.' Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inventory_valuation_detailget inventory valuation detailARead-onlyInspect
Generate the QuickBooks inventory valuation detail report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); start_svcdate/end_svcdate or svcdate_macro, group_by; columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses the exact row shape, row-type/depth semantics, id alignment behavior, omission of all-zero rows with hidden_zero_rows count, and the fact that filters contains only QuickBooks-confirmed filters. This is substantial non-obvious behavior an agent needs to interpret output correctly.
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 dense but front-loaded with the action and return shape, then uses compact clauses to convey row types, id alignment, zero-row handling, filter confirmation, and no_data. No sentence is wasted and the structure mirrors the data hierarchy it describes.
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?
With no output schema, the description carries the full burden of explaining return values, and it covers columns/types/rows, row kinds, id semantics, hidden zero rows, filter confirmation, and empty-period signaling. For a read-only report tool, remaining gaps such as auth and error details are minor and not needed to invoke it 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?
Input schema coverage is 100% and the params property already documents date macros, group_by, columns, sort_by, and sort_order. The description adds meaning by explaining that unconfirmed/ignored parameters are absent from the returned filters list and that no_data signals an empty period, which helps agents reason about parameter effects.
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?
Opens with a specific verb+resource: 'Generate the QuickBooks inventory valuation detail report.' The 'detail' wording and row semantics distinguish it from get_inventory_valuation_summary, but the description never names that sibling or states the selection criterion, so differentiation is implicit rather than explicit.
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?
There is no explicit when-to-use guidance or alternative routing in the description. The only signal is the report's name and the word 'detail', so usage is implied for line-level inventory valuation rather than clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inventory_valuation_summaryget inventory valuation summaryARead-onlyInspect
Generate the QuickBooks inventory valuation summary report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: report_date (YYYY-MM-DD, the as-of date; defaults to today) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); item. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive, so description need not repeat that. The description adds rich behavior: return format details (columns, rows with types/depth, Money cells as numbers), the id alignment difference between summary and detail reports, omission of zero-rows with a counter, filters list inclusion, and no_data flag. This is valuable beyond 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 one dense paragraph, front-loaded with the report generation purpose. It packs a lot of details, but could be broken into bullet points for easier scanning. However, every sentence adds value, so it remains efficient.
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 of the return structure and no output schema, the description does a good job explaining the format, including edge cases like zero-rows and no_data. It lacks details on pagination or max depth but is sufficient for an agent to interpret results 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% and includes descriptions for report_date, date_macro, summarize_column_by, and company. The description adds only a bit about filters and no_data, but baseline is 3 due to high coverage; the added detail about filter behavior pushes it to 4.
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 generates a QuickBooks inventory valuation summary report. It distinguishes itself from the sibling get_inventory_valuation_detail by focusing on 'summary' and describing a summary-specific structure. However, it doesn't explicitly compare to the detail tool by name.
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 summary-level inventory valuation reports, and its focus on summary report structure differentiates it from detail reports. However, it does not explicitly state when to prefer this over the detail counterpart or other inventory reports, and there are no exclusion conditions or alternative tool names mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoiceget invoiceBRead-onlyInspect
Get a single invoice from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Invoice. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered elsewhere. The description adds only that the source is QuickBooks Online and the lookup is by Id; it says nothing about behavior on a missing/invalid Id or how the optional company argument is resolved when multiple companies are connected.
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?
A single front-loaded sentence with minimal waste. The trailing 'when no search or write answer already holds it' is slightly awkward phrasing but does carry routing intent rather than being pure filler.
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 safe single-record read with annotations covering the safety profile and no output schema, the description is minimally adequate. It omits the one behavior an agent would want here – what happens if the Id is not found – and leaves the routing intent implicit.
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 both parameters are already fully documented in the schema. The description's 'by Id' merely restates the schema and adds no syntax, format, or fallback detail beyond it, making the baseline 3 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?
States a specific verb and resource ('Get a single invoice from QuickBooks Online by Id'), which is clearly distinct from the write siblings create_invoice/update_invoice/delete_invoice. It gestures at but does not name the read siblings (search_invoices, get_open_invoices) that an agent must distinguish it from, so it falls short of a 5.
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 clause 'when no search or write answer already holds it' implies usage context and hints that search_invoices is the alternative, but it never names the sibling nor states a concrete condition (e.g. 'use search_invoices to find an invoice when you don't have the Id'). Guidance is implied, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_itemget itemARead-onlyInspect
Get a single item from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Item. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds only "single item ... by Id," with no information on auth/company scoping behavior, error behavior for missing Ids, or rate limits, so it adds limited value beyond the structured fields.
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?
A single front-loaded sentence with no filler: verb, resource, source system, identifier, and the usage condition all appear in order of importance.
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 two-parameter read tool with full schema coverage and complete read-only annotations, this is nearly sufficient. The only gap is the absence of any note on behavior when the Id does not resolve or on which company is used by default.
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% for both parameters (id and company), so the schema carries the semantics. The description only restates that lookup is by Id, adding nothing about the optional company selector or Id format beyond what is already documented.
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?
States a specific verb and resource ("Get a single item from QuickBooks Online by Id") and distinguishes the single-fetch case from the search/write families of siblings. It never names search_items directly, so the differentiation is category-level rather than tool-level.
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 an explicit use condition: use this "when no search or write answer already holds it," which steers the agent away from re-fetching data it already has from search_items or a create/update response. It does not name the alternative tool or state an exclusion (e.g., batch retrieval), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_item_salesget item salesARead-onlyInspect
Generate the QuickBooks item sales report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several); start_duedate, end_duedate (YYYY-MM-DD). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a wealth of behavioral detail beyond the annotations: the exact return structure (columns, column_types, rows), row semantics (section/data/total, depth, values alignment), ID alignment behavior, handling of all-zero rows via hidden_zero_rows, the filters field reflecting applied parameters, and the no_data flag. This goes far beyond the readOnlyHint and destructiveHint annotations and provides critical operational context.
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 front-loaded with the purpose and then provides a dense but structured explanation of the output. It is one long sentence plus a brief final clause, but it packs a large amount of necessary information without redundancy. It could be more concise, but the structure is logical and efficient.
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?
With no output schema, the description fully explains the expected return value: columns, rows, types, depth, ID alignment, hidden zero rows, filters, and the no_data flag. It covers edge cases and the meaning of each field, making the tool effectively usable without needing to guess at the response format.
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 description covers 100% of parameters with detailed explanations for start_date, end_date, date_macro, accounting_method, summarize_column_by, filters, and company. The tool description adds no parameter-level meaning, so a baseline 3 is appropriate given the schema already does the heavy lifting.
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 generates the QuickBooks item sales report, which is a specific verb and resource that distinguishes it from sibling sales reports like customer sales or department sales. Though it doesn't explicitly name alternatives, the resource is unambiguous and the phrase 'item sales report' is 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?
The description provides no guidance on when to use this tool versus other sales report tools. It only states what it does, without mentioning exclusions, alternatives, or the typical scenario for which it is intended. Among many sibling sales reports, an agent gets no help selecting this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_journal_entryget journal entryARead-onlyInspect
Get a single journal entry from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the JournalEntry. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only a retrieval-precedence hint and says nothing about error behavior, permissions, or latency.
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?
One tight sentence with the resource and scoping condition front-loaded; 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 simple read tool with full schema coverage and complete annotations, the description plus structured fields give an agent everything needed to call it. Only minor gaps around return shape or failure modes remain, and no output schema is declared.
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 both parameters are documented in the schema. The description mentions 'by Id' but adds no syntax or format detail beyond the schema, making baseline 3 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?
States a specific verb ('Get') and resource ('a single journal entry from QuickBooks Online by Id'), clearly distinguishing it from search_journal_entries and delete/update/create_journal_entry.
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?
Adds a conditional exclusion ('when no search or write answer already holds it'), implying search_journal_entries is preferred for discovery. It gives a clear context for use but does not name alternatives explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_journal_reportget journal reportARead-onlyInspect
Generate the QuickBooks journal report report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, the description extensively documents runtime behavior: row types/depth, numeric Money cells, id alignment differences between summary and detail reports, omitted zero rows counted in hidden_zero_rows, filter confirmation semantics, and the no_data flag. This is substantial added behavioral context.
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 dense but economical, packing the entire return contract into two sentences with no filler. However, the second sentence is a long run-on that could be clearer as structured bullets, and 'journal report report' is a minor typo.
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?
With no output schema present, the description fully compensates by specifying the exact return shape, row semantics, id behavior, zero-row handling, filter confirmation, and no_data case. Combined with the 100% schema coverage for parameters, an agent has enough context to invoke and interpret 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%, so the input parameters are already fully described. The tool description adds no extra meaning about start_date, date_macro, columns, or sort parameters; it only describes result behavior. This meets the baseline for high schema coverage.
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 opens with a specific verb and resource: 'Generate the QuickBooks journal report report,' and details the returned structure. It doesn't explicitly contrast the journal report with sibling report tools like get_general_ledger or get_trial_balance, so it stops short of full differentiation.
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 given about when to choose this report over the many sibling report/list tools, nor are any exclusions or alternatives named. The only implied usage is the report name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_open_invoicesget open invoicesARead-onlyInspect
Generate the QuickBooks open invoices report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: report_date (YYYY-MM-DD, the as-of date; defaults to today) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); customer, department, term; columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint/destructiveHint annotations by detailing the return structure (columns, column_types, rows), row types, id semantics, hidden_zero_rows, filters, and no_data flag. This gives the agent significant behavioral insight, though it could mention potential size of results or any caveats about performance, which is minor.
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 dense but packed with essential information. It front-loads the core purpose and return structure, then provides detail on edge cases. While it's long, every sentence provides value, and the structure is logical, though it could be slightly more streamlined.
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 objects, no output schema), the description comprehensively explains the return format, edge cases (all-zero rows), and filtering behavior. It covers everything an agent needs to interpret the results correctly, making it complete for its purpose.
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 near-complete coverage of parameters with descriptions of date options, field lists, and company selection. The description does not add additional parameter-level details beyond what's in the schema, so a baseline score of 3 is appropriate given the high schema coverage.
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 it generates the QuickBooks open invoices report, using a specific verb ('generate') and a specific resource ('QuickBooks open invoices report'). It distinguishes itself from sibling tools like search_invoices and get_invoice by focusing on the report format rather than individual invoice retrieval.
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 reporting scenarios, and the detailed explanation of report structure and filters helps an agent understand when to use it. However, it does not explicitly state when NOT to use it or direct to alternatives like search_invoices for non-report needs, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paymentget paymentARead-onlyInspect
Get a single payment from QuickBooks Online by Id, when no search or write answer already holds it. An accounting record of a customer payment already received. Payment processing is not supported; ProcessPayment must be omitted or false.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Payment. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description still adds useful non-schema context: that this is a received-payment accounting record and that payment processing is not supported. That said, the 'ProcessPayment must be omitted or false' clause references a parameter that does not exist in this schema, which is confusing rather than informative.
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?
It is short, but the front-loaded purpose sentence is tangled ('when no search or write answer already holds it') and the trailing ProcessPayment sentence consumes space on a parameter that does not exist in this tool's schema. Two of three sentences carry real weight; the middle one is somewhat redundant with the annotations.
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 two-parameter read tool with no output schema, the description covers what the tool returns conceptually (a received customer payment record), how to locate it (by Id), and when to prefer it over search. The missing pieces — return shape and error behavior on an unknown Id — are minor given the readOnly annotations.
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% with only two parameters (id, company), both documented in the schema, so the baseline is 3. The description adds no format or syntax detail for 'id' or the company selector, and its only parameter-adjacent remark (ProcessPayment) points at a field that isn't 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?
States a specific verb and resource ('Get a single payment ... by Id') and clarifies the domain object as 'an accounting record of a customer payment already received', which separates it from the payment-processing concept. It doesn't explicitly distinguish itself from other sibling single-get tools like get_bill_payment or get_tax_payment, so it stops short of a 5.
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 a real routing condition: use it 'when no search or write answer already holds it', implying the search_* tools are preferred when a list result suffices. It never names search_payments explicitly and gives no explicit exclusions for the other payment-family getters, so it's clear context but not a complete when/when-not rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payment_methodget payment methodARead-onlyInspect
Get a single payment method from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the PaymentMethod. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered; the description adds only the retrieval-by-Id constraint without any return shape or not-found behavior detail.
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?
A single well-formed sentence that front-loads action, scope, and the routing hint with 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?
For a simple 2-param read tool with annotations and full schema coverage this is adequate, but without an output schema the description could still note what a returned payment method contains; it stops at the call mechanics.
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 both parameters fully documented, so the schema carries parameter meaning; the description only reaffirms that lookup is by Id, adding no syntax or format nuance beyond structured fields.
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?
States a specific verb (get) and singular resource (payment method) with an explicit ID-based retrieval scope, distinguishing it from search_payment_methods by emphasizing single-record fetch.
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 phrase 'when no search or write answer already holds it' gives clear usage context and implicitly steers toward search_payment_methods first, but it doesn't name the search sibling explicitly, leaving routing slightly loose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payout_setupGet the payout setupBRead-onlyInspect
For the Stripe account connected on the Caribooks Payouts page: its last 90 days (sales per month, customers, products, tax rates, currencies), its balance, and for each setup choice the QuickBooks candidates ranked by evidence (holding account, bank account, fee account, vendor, item per product, tax code per tax combination, customers to match), what is missing, warnings, and a suggested start date after anything an earlier connector already booked. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | The connected QuickBooks company (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so 'Read-only' is redundant. However, the description adds rich behavioral context beyond annotations: ranked candidates by evidence, what is missing, warnings, and a start date adjusted for what an earlier connector already booked. That is meaningful disclosure of semantics and state the agent would otherwise not know.
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?
It is appropriately front-loaded (subject and scope stated first), but it is one enormous run-on sentence with many comma-linked clauses that makes the inventory of returned data hard to parse. Every clause carries content, so the problem is structure rather than padding.
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?
With no output schema and only one parameter, the description carries the return-value burden and does so thoroughly, enumerating the 90-day metrics, balance, per-choice candidates, missing items, warnings, and suggested start date. It is complete enough to call correctly, though usage context versus siblings is the remaining 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?
There is a single optional parameter with 100% schema description coverage, so the schema already fully explains 'company'. The description adds nothing about the parameter, which is acceptable at this coverage level but earns no bonus.
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 is highly specific about the resource and payload: the connected Stripe account's last 90 days, balance, and per-setup-choice candidate mappings with missing items, warnings, and a suggested start date. An agent can tell this is the read/prefill view of payout configuration. It stops short of naming get_payout_status or save_payout_setup as the sibling it is not, so it does not fully differentiate.
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?
There is no when-to-use guidance, no prerequisites, and no routing to alternatives. The 'Read-only' tag implies it precedes save_payout_setup, but that is left entirely to inference, and nothing distinguishes it from get_payout_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payout_statusGet the payout statusARead-onlyInspect
How Caribooks' booking of the connected Stripe account stands: whether the QuickBooks holding account is in step with Stripe's balance (off_by is what the holding account has beyond what Stripe holds, less what Stripe holds back and what waits to be booked), the records in the holding account Caribooks did not write when nothing waiting explains a gap, what needs the user, the last payout, and the movements booked in the last 30 days with their QuickBooks record types and ids (read them with the get tools). Read-only: answers and booking happen on the Caribooks Payouts page.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | The connected QuickBooks company (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered; the description still adds value by stating that booking actions happen on the Caribooks Payouts page (ruling out writes here) and by unpacking the semantics of 'off_by'. It stops short of describing the response shape or any auth/pagination behavior.
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 resource is front-loaded ('How Caribooks' booking ... stands'), which is good, but the body is one enormous sentence with nested parentheticals that is hard to parse on first read. The information is dense and mostly earns its place, but the structure is unwieldy rather than tight.
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?
With no output schema, the description must convey what is returned, and it does enumerate the pieces (off_by with an explanation, unbooked holding records, items needing the user, last payout, last-30-day movements with record types and ids). This covers the agent's needs for a read-only status tool, though it could be clearer about ordering and format.
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?
There is a single 'company' parameter with 100% schema description coverage, so the schema already documents its name, realm id, connection id forms and its optionality. The description adds nothing about the parameter and does not need to; baseline 3 applies.
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?
States a specific resource and scope: the status of Caribooks' booking of the connected Stripe account against the QuickBooks holding account. An agent can tell it reports a reconciliation status rather than performing an action. However, it never names or distinguishes itself from the closely related sibling get_payout_setup, so some ambiguity remains.
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?
Usage is implied by the content described (checking whether the holding account is in step with Stripe, spotting gaps and items needing the user). There is no explicit when-to-use, when-not-to-use, or alternative named against get_payout_setup, so the agent must infer the selecting condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_physical_inventory_worksheetget physical inventory worksheetARead-onlyInspect
Generate the QuickBooks physical inventory worksheet report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: report_date (YYYY-MM-DD, the as-of date; defaults to today) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); item. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the readOnlyHint and destructiveHint annotations, disclosing detailed output semantics: row types (section/data/total), depth, value alignment, id mapping, omission of all-zero rows, hidden_zero_rows counting, filter confirmation behavior, and the no_data flag. This gives the agent a thorough understanding of the tool's exact behavior.
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 complex sentence but is information-dense and front-loaded with the primary purpose. While it could be restructured into clearer bullets, every clause provides necessary behavioral details. It is not overly verbose for the richness it conveys, though the long run-on structure slightly detracts.
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?
With no output schema, the description carries the full burden of explaining return values, and it does so comprehensively: columns, column_types, rows, id alignment, hidden_zero_rows, filters, and no_data. It also clarifies how ignored parameters appear. For a report-read tool with read-only annotations, nothing essential is missing.
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% for both parameters (params and company), so the baseline is 3. The description does not add any meaning to the parameters themselves; it only references filters, which is output-related. There is no compensation for parameter detail beyond the schema, so the score remains at baseline.
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 'Generate' and the specific resource 'QuickBooks physical inventory worksheet report', making the purpose unambiguous. However, it does not explicitly distinguish itself from sibling report tools like get_inventory_valuation_detail or get_balance_sheet, so it lacks the explicit sibling differentiation required for a 5.
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 no guidance on when to use this tool versus alternatives. It offers no context, prerequisites, or exclusions, leaving the agent to infer usage solely from the tool name. No mention of alternatives is made, so this dimension scores poorly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_preferencesget preferencesBRead-onlyInspect
Get the company's QuickBooks preferences.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond that: it does not describe what 'preferences' covers, whether it returns all preference groups, or anything about the response. There is no contradiction, but no added transparency either.
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?
One short, front-loaded sentence with no filler or redundancy. It earns its place by adding 'company's QuickBooks' context beyond the tool title, and there is no unnecessary detail.
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 getter with one optional parameter fully documented in the schema and read-only annotations, the description is largely sufficient. The main gap is that it does not hint at the scope or shape of the returned preferences, but this is minor given the low tool complexity.
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%, and the single optional 'company' parameter is already fully explained in the schema. The description adds nothing about the parameter, so the baseline score of 3 applies.
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 uses a clear verb-resource pair: 'Get the company's QuickBooks preferences.' It is specific enough to distinguish the resource from other getters and from update_preferences. It does not list what the preferences include, which keeps it from a 5, but the purpose is unambiguous.
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 retrieval intent is implied by the verb 'Get', so an agent can infer this is the read tool for preferences. However, the description gives no explicit guidance about when to use this versus update_preferences for modifications or other company-level getters, and it states no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profit_and_lossget profit and lossARead-onlyInspect
Generate the QuickBooks profit and loss report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several); adjusted_gain_loss (true|false). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior. The description adds significant behavioral context beyond annotations: explains row types, how Money cells are represented, id assignment, omission of zero rows, the meaning of filters and no_data. This fully discloses behavior without contradicting 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 dense but well-organized, front-loading the core purpose and then explaining response details. It is longer than minimal but every sentence carries functional information, so it earns a 4 for structure without excessive 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 there is no output schema, the description covers return structure, edge cases, and filter semantics comprehensively. It does not, however, contrast with get_profit_and_loss_detail or mention pagination/limits, which would make it fully complete for an 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?
Schema description coverage is 100%, so all parameters are documented. The description adds valuable semantic detail beyond the schema, such as how filters behave when ignored and the significance of hidden_zero_rows. This enriches parameter understanding without redundancy.
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 generates the QuickBooks profit and loss report and specifies the return structure. It distinguishes itself implicitly from get_profit_and_loss_detail by name, but does not explicitly mention the sibling or the difference, so it falls short of a 5.
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 the related get_profit_and_loss_detail or other report tools. The description focuses on how to use parameters and interpret output, but lacks any explicit when-to-use 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.
get_profit_and_loss_detailget profit and loss detailARead-onlyInspect
Generate the QuickBooks profit and loss detail report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several); account, account_type, employee, payment_method; columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses important runtime behaviors: all-zero rows are omitted and counted in hidden_zero_rows, filters lists only the filters QuickBooks confirmed applying (ignored parameters are absent), and no_data indicates an empty period. This gives an agent reliable expectations for parsing and interpreting results.
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 dense but each sentence carries meaningful detail about return structure, row semantics, hidden rows, filter confirmation, and no_data. It is not a short one-liner, but the complexity of the output deserves this level of specificity; the key purpose is front-loaded and the details are logically ordered.
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?
With no output schema present, the description fully compensates by documenting the complete return shape: columns, column_types, rows with type/depth/values, id alignment, hidden_zero_rows, filters, and no_data. For a report-generation tool with rich output and many sibling report tools, nothing essential is missing for correct invocation and interpretation.
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 parameters are already documented in the schema. The description adds value by explaining that the filters parameter may not appear in the output if QuickBooks ignored it, and it clarifies how values and ids map differently between summary and detail reports. This goes beyond the raw schema definitions.
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 opens with a specific verb and resource ('Generate the QuickBooks profit and loss detail report') and consistently uses 'detail' to distinguish it from the sibling summary tool get_profit_and_loss. The report structure is also named explicitly, so an agent can tell exactly what this tool produces.
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 use for detailed P&L reporting, and the mention of 'summary reports' hints that a summary variant exists, but it never explicitly says when to choose this tool over get_profit_and_loss or other report tools. There is no direct exclusion or alternative routing; the agent must infer usage from the 'detail' naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_purchaseget purchaseARead-onlyInspect
Get a single purchase from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Purchase. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only that it fetches one record by Id from QuickBooks Online; it says nothing about not-found behavior or what is returned, and there is no output schema to fill that gap.
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?
A single front-loaded sentence with no repetition or filler. The trailing conditional is slightly opaque, which keeps it short of a 5, but every clause carries intent.
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 two-parameter read-only retrieve, the definition plus annotations plus a fully-described schema cover what an agent needs to call it. The absence of any return-shape note is the only gap, and it is minor for a single-record getter.
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% and both parameters (id, company) are documented in the schema itself. The description only echoes 'by Id' and adds no format, default, or multi-company resolution detail beyond what the schema states. Baseline 3 applies.
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?
Names a specific verb and resource ('Get a single purchase from QuickBooks Online by Id'), which distinguishes it from search_purchases and list_purchases_without_payee by scope. It never names a sibling explicitly, so the differentiation is inferred rather than stated.
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 trailing clause 'when no search or write answer already holds it' gestures at when to use it, but it is cryptic — it doesn't name search_purchases or explain the condition concretely. Enough to imply fallback usage, not enough to route an agent confidently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_purchase_orderget purchase orderARead-onlyInspect
Get a single purchase order from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the PurchaseOrder. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only the scope of retrieval (single record by Id) and a deduplication hint; it says nothing about what is returned, not-found behavior, or pagination, which is a modest but not severe gap for a read 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?
A single front-loaded sentence with the verb, resource, and key stated first; the trailing conditional is slightly cryptic but short. No padding.
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 single-record read with annotations covering safety and no output schema to explain, the description is nearly sufficient; only not-found/error behavior is unaddressed, which is a minor omission.
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 both 'id' and 'company' are already documented in the schema, and the description adds no format, realm-id, or multi-company detail beyond it. Baseline 3 is appropriate when the schema carries the full parameter burden.
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?
States a specific verb and resource ('Get a single purchase order') with the identifying key ('by Id') and the source system (QuickBooks Online). It is distinguishable from search_purchase_orders, though it names no sibling explicitly and its trailing clause mixes usage guidance into the purpose statement.
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?
'when no search or write answer already holds it' gives a genuine usage condition (avoid a redundant fetch when a list/search or create response already returned the record), but it never names the obvious alternative (search_purchase_orders) or states when this tool is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recurring_transactionget recurring transactionARead-onlyInspect
Get a single recurring transaction from QuickBooks Online by Id, when no search or write answer already holds it. A template QuickBooks uses to create a transaction on a schedule, or on request.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the RecurringTransaction. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety and locality are covered. The description adds conceptual context (a template QBO uses to create transactions on schedule or on request) but says nothing about permission requirements, error behavior for a missing Id, or response shape. With annotations carrying the behavioral burden, this is adequate but not rich.
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 compact sentences, with the verb and resource front-loaded and the conceptual gloss trailing. The second sentence is arguably optional context, which keeps it just short of a 5.
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 two-parameter read-only getter with no output schema, the description plus annotations and full schema coverage give an agent everything needed to invoke it correctly. Only the return-shape and missing-Id behavior remain unspecified, which is a minor gap given the tool's 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?
Schema description coverage is 100% for both id and company, so the schema already documents the parameters fully. The description only restates that lookup is by Id and adds no format, realm-id, or scoping detail beyond what the schema provides. Baseline 3 applies.
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?
States a specific verb and resource ('Get a single recurring transaction ... by Id') and names the system (QuickBooks Online). The second sentence adds a clear conceptual definition of the resource as a template used to create transactions on a schedule, which separates it from create_recurring_transaction and search_recurring_transactions without needing their schemas.
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?
'when no search or write answer already holds it' tells the agent this is the fallback direct-fetch path rather than the search path, which is real routing guidance. It stops short of naming search_recurring_transactions explicitly or stating exclusions, so it is clear context without a fully spelled-out when-not clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_refund_receiptget refund receiptARead-onlyInspect
Get a single refund receipt from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the RefundReceipt. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only the 'single ... by Id' scoping nuance; it says nothing about not-found behavior, required company disambiguation, or error conditions that a read-by-id tool would benefit from disclosing.
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?
A single front-loaded sentence with no padding; the verb+resource+scope lead is immediate. The trailing conditional clause is slightly awkwardly worded but still short and purposeful.
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 two-parameter read-by-id tool with annotations carrying the safety profile and no output schema, this is largely sufficient. Minor omission is the absence of not-found/empty-result behavior, which would round out an otherwise adequate definition.
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% and both parameters (id, company) are documented in the schema itself. The description's 'by Id' adds no syntax or format detail beyond that, so the baseline 3 applies.
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?
States a specific verb and resource with clear scope: fetch one RefundReceipt from QuickBooks Online by Id. It implicitly differentiates from the search/list siblings via the 'no search ... answer already holds it' clause, but never names search_refund_receipts, so the differentiation is inferential rather than explicit.
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?
There is a when-condition ('when no search or write answer already holds it'), which is genuine usage guidance rather than none. However it is vague and refers abstractly to 'search or write answer' instead of naming search_refund_receipts or update_refund_receipt, leaving the agent to infer which sibling to prefer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sales_receiptget sales receiptARead-onlyInspect
Get a single sales receipt from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the SalesReceipt. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only the source context ('QuickBooks Online') and reinforces the direct-lookup nature; it says nothing about not-found behavior, error modes, or the optional multi-company resolution, so it adds modest value beyond structured data.
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?
A single tight sentence with the verb, resource, lookup key and usage condition front-loaded. There is no filler or restated title, and every clause carries 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 read-only get-by-id tool whose annotations cover safety and whose schema fully documents both parameters, the description is essentially complete. The only minor gap is that no output schema exists and the description doesn't hint at the returned receipt shape or failure behavior.
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%, with both 'id' and 'company' documented in the schema itself, so the baseline is 3. The description echoes the Id lookup but says nothing about the optional 'company' parameter, adding no meaning the schema lacks.
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?
States a specific verb and resource ('Get a single sales receipt'), the source system ('QuickBooks Online'), and the lookup key ('by Id'). The word 'single' plus the Id lookup cleanly separates it from the search_sales_receipts sibling without opening either schema.
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 clause 'when no search or write answer already holds it' gives a real usage condition, steering the agent away from this tool if a search/list result or a write response already contains the receipt. However, it gestures at 'search' generically rather than naming search_sales_receipts, and offers no explicit when-not or prerequisite guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tax_agencyget tax agencyARead-onlyInspect
Get a single tax agency from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the TaxAgency. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds a useful usage precondition (check search first) but no return format or failure behavior (e.g., what happens when Id not found).
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?
A single sentence that front-loads the action and the qualifying condition, with zero waste.
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 2-param read tool with full schema coverage and safety annotations, the description provides enough context to call it correctly. Only minor gap is not hinting at the search-first workflow by name.
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 schema documents both id and company. The description adds no syntax or format detail beyond the schema; 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?
States a specific verb (Get), resource (single tax agency), and scope (from QuickBooks Online by Id). This clearly distinguishes it from search_tax_agencies and create_tax_agency.
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 says to use it "when no search or write answer already holds it," which implies using search_tax_agencies first. Clear context, though it doesn't name the sibling tool explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tax_codeget tax codeBRead-onlyInspect
Get a single tax code from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the TaxCode. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered without the description. The description adds only that it fetches a single record by Id; it says nothing about not-found/error behavior or what a missing Id returns. Adequate against annotations but not rich.
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?
A single front-loaded sentence with the verb, resource, and key up front, followed by the usage qualifier. Efficient with no wasted clauses, though the trailing 'when no search or write answer already holds it' is slightly awkwardly phrased.
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 read-by-Id tool with full annotation coverage, the description is mostly sufficient. Since there is no output schema, it should ideally hint at what a tax code record contains or what happens on a bad Id; that gap keeps it at minimum-viable rather than 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 both 'id' and 'company' are already documented in the schema. The description only echoes 'by Id' and adds no format, lookup, or company-selection nuance beyond the schema. Baseline 3 applies when the schema carries the load.
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?
States a specific verb+resource+key: 'Get a single tax code from QuickBooks Online by Id.' This clearly separates it from the list-style 'search_tax_codes' sibling by scope (single vs many). It stops short of explicitly naming that sibling, so the differentiation is implied rather than stated.
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 clause 'when no search or write answer already holds it' gestures at when to prefer this tool over search/write paths, which is real guidance. However it is vague about which alternatives exist and gives no explicit condition (e.g. 'use search_tax_codes to find an Id first'). Implied usage rather than explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tax_paymentget tax paymentARead-onlyInspect
Get a single tax payment from QuickBooks Online by Id, when no search or write answer already holds it. Sales tax (GST/HST, QST, VAT) payments and refunds recorded against filed returns; AU, CA and UK companies only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the TaxPayment. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds a hard eligibility constraint not present in any structured field — AU, CA and UK companies only — which prevents failed calls. Return shape and not-found behavior remain unstated.
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 dense sentences with no filler: the action and lookup key come first, the usage condition second, and the domain/region constraints last. Every clause carries information an agent needs.
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 single-record read with no output schema, two fully documented parameters and readOnly annotations, the description covers purpose, routing and regional eligibility. Minor gaps (error behavior when the Id or region is invalid) keep it from being fully self-contained.
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 both 'id' and 'company' are fully documented in the schema already. The description only restates the by-Id lookup and adds no format, prefix, or multi-company disambiguation detail beyond what the schema provides, so the baseline 3 applies.
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?
States a specific verb+resource+key ('Get a single tax payment from QuickBooks Online by Id') and narrows the domain to sales tax payments/refunds on filed returns. The AU/CA/UK eligibility clause further disambiguates it from the sibling search_tax_payments and other get_* 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?
Gives a clear routing rule: use this only 'when no search or write answer already holds it,' which steers the agent toward search_tax_payments first. It stops short of naming the alternative tool explicitly or stating when-not conditions beyond that one clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tax_rateget tax rateARead-onlyInspect
Get a single tax rate from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the TaxRate. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that — no not-found behavior, return shape, or auth requirements — which is acceptable given annotation coverage but not value-adding.
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?
A single front-loaded sentence opens with the verb and resource, wasting no space. The trailing condition is slightly awkward but does not bloat the description.
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 two-parameter, fully-documented lookup with no output schema, the description supplies the essential purpose and a usage hint. It could note return format or not-found behaviour, but nothing critical to calling it correctly is missing.
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 both the required 'id' and optional 'company' params are already documented. The description reiterates 'by Id' but adds no syntax or format detail beyond the schema, making this baseline 3 territory.
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 states a specific verb and resource ('Get a single tax rate from QuickBooks Online by Id'), clearly distinguishing retrieval-by-id from the search_* siblings. It stops short of explicitly naming search_tax_rates as the alternative, relying on the implicit 'by Id' vs 'search' distinction, so it is clear but not maximally differentiated.
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 clause 'when no search or write answer already holds it' gestures at when to use the tool, but it is vague and awkwardly phrased rather than an explicit when/when-not rule. It never names search_tax_rates or another concrete alternative, leaving the agent to infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tax_summaryget tax summaryARead-onlyInspect
Generate the QuickBooks tax summary (GST/HST, QST, VAT filing lines) for a period. Without agency_id, returns { agencies: [{ agency_id, agency_name, report }] } with one report per tax agency that had activity; with agency_id, returns that agency's report directly. Each report is { columns, column_types, rows } as for the other reports.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro; accounting_method (Cash|Accrual); agency_id (a TaxAgency Id; omit to get one report per tax agency). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds valuable behavioral context: the two return shapes (aggregated agencies vs. single agency) and the report format ('columns, column_types, rows'). It does not cover auth or rate limits, but those are secondary given the read-only flag.
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 with zero filler. The core action is front-loaded, and the conditional behavior and output format are stated efficiently in the following sentences. 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?
With no output schema, the description must explain return values, and it does so precisely for both agency_id branches. The report shape is given explicitly and tied to a known convention ('as for the other reports'), making the tool self-sufficient for an agent to call and interpret the result.
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 and already describes agency_id's behavior (omit to get one report per agency). The description reinforces this and adds the output structure, but that is more about return values than parameter semantics. The marginal addition over the schema is modest, so the 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 states a specific verb ('Generate'), a precise resource ('QuickBooks tax summary'), and the tax types (GST/HST, QST, VAT filing lines). This clearly distinguishes it from sibling tax tools like get_tax_agency, get_tax_payment, or search_tax_payments, which deal with individual entities rather than a filing-line summary report.
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 usage context (for a period) and explains the agency_id conditional, but does not mention when to prefer this tool over sibling tax tools or provide any exclusions. There is no explicit alternative named, so an agent must infer the selection criteria from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_termget termBRead-onlyInspect
Get a single term from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Term. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing behavioral beyond that: no note on not-found errors, inactive/deleted terms, permission requirements, or whether the record is returned raw. For a fetch tool with full annotation coverage, this is thin.
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?
A single sentence with the verb and resource front-loaded and no filler. The trailing conditional clause is compact but slightly cryptic, which keeps it short of a 5.
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 single-record read with complete schema documentation, annotation-covered safety, and no output schema, the definition supplies enough to call the tool correctly. Only minor gaps remain, such as behavior on a missing or inactive term.
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 both 'id' and 'company' are already documented in the schema. The description only restates that lookup is by Id and adds no format, resolution, or company-selection detail beyond the schema text. Baseline 3 applies.
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?
States a specific verb (Get), resource (a single term), source system (QuickBooks Online), and lookup key (by Id). This distinguishes it from the plural list-style siblings such as search_terms and from create_term/update_term, though it does not name those siblings explicitly.
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 trailing clause 'when no search or write answer already holds it' is an implied when-to-use hint, suggesting the agent should prefer an existing search or write result over a fresh fetch. However, it never names search_terms as the alternative nor defines what 'write answer' means, so the routing guidance is suggestive rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_time_activityget time activityARead-onlyInspect
Get a single time activity from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the TimeActivity. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only that the fetch is by Id and scoped to a single record; it says nothing about not-found behavior, error handling, or what the returned object contains. With annotations carrying the safety burden, this is adequate but thin.
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?
A single sentence that front-loads the operation and resource before the conditional qualifier. No filler, no repetition of the title.
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 single-record fetch this covers the essentials, and the annotations plus 100% schema coverage fill in the rest. It omits what happens when the Id does not resolve and how the company parameter interacts with multi-company connections, with no output schema to compensate.
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 both the id and company parameters are already documented in the schema. The description's "by Id" merely restates the required parameter and adds no format or syntax guidance beyond it, so the baseline of 3 applies.
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?
States a specific verb (Get), resource (a single time activity), and system (QuickBooks Online), plus the lookup key (by Id). This distinguishes it from search_time_activities and update_time_activity without needing the schema, though it never names the sibling it is distinct from.
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?
"when no search or write answer already holds it" implies the tool is a fallback used only when a search result or a write response hasn't already supplied the record, which is implied usage rather than an explicit when/when-not rule. It does not tell the agent to prefer search_time_activities when the Id is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transaction_detail_by_accountget transaction detail by accountARead-onlyInspect
Generate the QuickBooks transaction detail by account report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several); account, account_type, transaction_type; columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint/destructiveHint annotations by explaining output row types, id alignment differences between summary and detail reports, Money-cell representation, omission of all-zero rows via hidden_zero_rows, confirmed filters behavior, and the no_data flag. This is rich behavioral context that an agent cannot infer from the schema or 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 purpose is front-loaded in the first clause, and every subsequent clause adds necessary behavioral detail about the return format. Despite being dense, there is no filler; each part of the description 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?
With no output schema, the description fully covers the return contract: columns, rows, types, ids, hidden_zero_rows, filters, and no_data. Combined with the 100%-covered input schema and safe read annotations, an agent has everything needed to select and invoke this 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%, so the input schema already documents all parameters. The description adds no per-parameter guidance; its mention of filters is about output behavior rather than how to supply parameter values. 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 opens with a specific verb and resource: 'Generate the QuickBooks transaction detail by account report.' It also differentiates itself from sibling transaction-list tools by detailing the report-style return shape (section/data/total rows, depth, id label cells), making the tool's identity unmistakable.
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?
Usage is implied by the purpose statement: an agent can infer this is the tool for a QuickBooks transaction-detail-by-account report. However, there is no explicit 'use this when' guidance, no exclusions, and no mention of alternatives such as get_transaction_list, get_general_ledger, or the other transaction-list siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transaction_listget transaction listARead-onlyInspect
Generate the QuickBooks transaction list report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); start_duedate, end_duedate (YYYY-MM-DD); customer, vendor, department, name (customer, vendor or employee Ids); transaction_type (Invoice, ReceivePayment, Bill, BillPaymentCheck, Check, CreditCardCharge, Deposit, JournalEntry, Transfer, SalesReceipt, CreditMemo, Estimate, PurchaseOrder, VendorCredit, ...), source_account_type (Bank, AccountsReceivable, AccountsPayable, Income, Expense, CreditCard, ...), docnum, memo, cleared (Cleared|Uncleared|Reconciled), arpaid/appaid (All|Paid|Unpaid), bothamount (an exact amount), payment_method, term, group_by (Name|Account|Transaction Type|Customer|Vendor|Employee|Location|Payment Method|Day|Week|Month|Quarter|Year|None), start_createdate/end_createdate, start_moddate/end_moddate; columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral detail: the exact output structure (columns, column_types, rows), row types, id alignment differences between summary and detail reports, handling of all-zero rows via hidden_zero_rows, the meaning of the filters field, and the no_data flag. This goes well beyond the annotation baseline and helps the agent predict edge cases. No contradiction with 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 dense but well-organized: it starts with the purpose, then details the return structure, and covers special cases (hidden_zero_rows, filters, no_data). Every sentence adds value, and the structure is logical. It is longer than some descriptions, but the complexity of the report output justifies the length. 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?
Given that there is no output schema, the description fully specifies the return format, row types, cell semantics, id resolution, and edge-case behavior. Parameters are fully documented in the schema. The tool is a read-only report generator, so the description covers everything an agent needs to call it correctly and interpret the result. It is complete for its purpose.
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%: the params field lists every relevant QuickBooks filter, grouping, and sort option with examples. The description itself adds no additional parameter-specific guidance, so it stays at the baseline of 3. It does not hinder usage, but the description does not elevate parameter understanding 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 generates the QuickBooks transaction list report and specifies the exact return structure. It is distinct from siblings like get_transaction_list_by_customer or get_transaction_list_by_vendor by its general scope, but it does not explicitly contrast itself with these related tools. Still, the verb-resource pairing is specific and unambiguous.
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 no guidance on when to choose this tool over its siblings (e.g., get_transaction_list_by_customer, get_transaction_list_by_vendor, get_transaction_detail_by_account). It does not state filters that would route an agent to a more specific report or mention any exclusions. This is a clear gap for an agent selecting among many get_* report tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transaction_list_by_customerget transaction list by customerARead-onlyInspect
Generate the QuickBooks transaction list by customer report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); start_duedate, end_duedate (YYYY-MM-DD); customer, department; transaction_type (Invoice, ReceivePayment, Bill, BillPaymentCheck, Check, CreditCardCharge, Deposit, JournalEntry, Transfer, SalesReceipt, CreditMemo, Estimate, PurchaseOrder, VendorCredit, ...), source_account_type (Bank, AccountsReceivable, AccountsPayable, Income, Expense, CreditCard, ...), docnum, memo, cleared (Cleared|Uncleared|Reconciled), arpaid/appaid (All|Paid|Unpaid), bothamount (an exact amount), payment_method, term, group_by (Name|Account|Transaction Type|Customer|Vendor|Employee|Location|Payment Method|Day|Week|Month|Quarter|Year|None), start_createdate/end_createdate, start_moddate/end_moddate; sort_by (tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_order (ascend|descend); this report does not accept a columns parameter. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond annotations: it explains the return format, row types, hidden_zero_rows, filters, and no_data semantics. It also clarifies that ignored parameters are absent from filters. With readOnlyHint and destructiveHint already set, the description enriches the behavioral profile without contradicting 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 a single, dense paragraph that front-loads the purpose and then details output structure and edge cases. Every sentence contributes necessary information without redundancy or filler.
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 report tool with complex output and many parameters, the description is complete. It explains the return object, row types, ids, filtering behavior, and no_data flag. Since there is no output schema, the description carries the full burden of explaining the return value, and it does so thoroughly.
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 provides 100% description coverage for all parameters, so the baseline is 3. The description does not add parameter-specific meaning beyond what the schema already explains; it only notes that a columns parameter is not accepted, which is also 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's purpose: 'Generate the QuickBooks transaction list by customer report.' It specifies the verb and resource, and details the output structure. It distinguishes itself from sibling tools like get_transaction_list and get_transaction_list_by_vendor by focusing on the customer dimension.
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?
Usage is implied by the name and description ('transaction list by customer'), but there is no explicit guidance on when to use this tool versus alternatives such as get_transaction_list_by_vendor or get_transaction_list_with_splits. No exclusions or alternative conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transaction_list_by_vendorget transaction list by vendorARead-onlyInspect
Generate the QuickBooks transaction list by vendor report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); start_duedate, end_duedate (YYYY-MM-DD); vendor, department; transaction_type (Invoice, ReceivePayment, Bill, BillPaymentCheck, Check, CreditCardCharge, Deposit, JournalEntry, Transfer, SalesReceipt, CreditMemo, Estimate, PurchaseOrder, VendorCredit, ...), source_account_type (Bank, AccountsReceivable, AccountsPayable, Income, Expense, CreditCard, ...), docnum, memo, cleared (Cleared|Uncleared|Reconciled), arpaid/appaid (All|Paid|Unpaid), bothamount (an exact amount), payment_method, term, group_by (Name|Account|Transaction Type|Customer|Vendor|Employee|Location|Payment Method|Day|Week|Month|Quarter|Year|None), start_createdate/end_createdate, start_moddate/end_moddate; columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the readOnlyHint annotation by thoroughly detailing output behavior: row types, depth, value alignment, Money cell representation, id semantics for summary vs detail reports, omitted all-zero rows with hidden_zero_rows, confirmed filters, and the no_data flag. This gives an agent a clear mental model of the tool's behavior and edge cases.
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 dense but every sentence earns its place: the opening sentence states the action, and the rest efficiently describes return structure and edge cases. It is front-loaded, uses compact notation, and avoids repetition or filler.
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 absence of an output schema and the tool's complex return shape, the description does an excellent job explaining return values, row layout, id alignment, and special cases like hidden zero rows and no_data. It is slightly less complete in providing usage context or selecting among sibling reporting tools, but the core call-and-response semantics are well covered.
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 describes all parameters with 100% coverage, so the baseline is 3. The description adds some useful context by explaining how filters in the response reflect applied vs ignored parameters, but it does not elaborate further on parameter meanings or combinations beyond what the schema 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 the tool's action: 'Generate the QuickBooks transaction list by vendor report.' This is a specific verb and resource, and the 'by vendor' qualifier naturally distinguishes it from sibling report tools such as get_transaction_list_by_customer or get_transaction_detail_by_account.
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 usage context is implied by the 'by vendor' phrasing and the report name, so an agent can infer this is for vendor-focused transaction reporting. However, the description gives no explicit guidance about when to choose this tool instead of the many closely related sibling list/report tools, nor does it state any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transaction_list_with_splitsget transaction list with splitsARead-onlyInspect
Generate the QuickBooks transaction list with splits report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); transaction_type, source_account_type, docnum, name, payment_method, group_by; columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive. The description adds valuable behavioral context: row types, depth semantics, id alignment, hidden_zero_rows counting, filter confirmation behavior, and the no_data flag. These details go well beyond the annotations and help an agent interpret the response correctly.
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 dense and front-loaded with the purpose, followed by return structure and edge cases. Every clause serves a purpose, though the single-paragraph format with many semicolon-separated details could be easier to scan if 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?
Because there is no output schema, the description thoroughly compensates by explaining the response shape, filtering behavior, and no-data handling. It is nearly complete for a read-only report tool, though it omits explicit guidance on when to use this versus related transaction-list reports.
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 schema already fully documents the params object and company field. The description focuses on return semantics rather than parameter behavior; with full schema coverage, 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 it generates the QuickBooks transaction list with splits report, with a specific verb and resource. It does not explicitly differentiate from siblings like get_transaction_list or get_transaction_list_by_customer, though the 'with splits' qualifier provides some distinction.
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 given about when to choose this tool over sibling transaction-list tools, nor any exclusions or alternative routing. The intended use is only implied by the report name and the detailed return semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transferget transferARead-onlyInspect
Get a single transfer from QuickBooks Online by Id, when no search or write answer already holds it. An accounting entry recording a transfer between accounts. It does not move money between bank accounts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Transfer. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds genuinely non-obvious domain context: a 'transfer' here is a bookkeeping entry and 'does not move money between bank accounts', preventing a wrong interpretation of the returned data. It says nothing about not-found/error behavior or output shape, so it is not a 5.
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 short sentences with the operation and routing condition front-loaded; no filler. The clause 'when no search or write answer already holds it' is slightly awkwardly phrased, which keeps it from being a model of clarity.
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 two-parameter read tool with full schema coverage and annotations covering safety, the description covers identity, scope, and domain meaning adequately. There is no output schema, so a brief note on what a returned transfer contains or what happens if the Id is unknown would have made it 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% and both parameters (id, company) are fully documented in the schema, so the baseline is 3. The description only echoes 'by Id' and adds nothing about the multi-company parameter or Id formats.
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?
States a specific verb and resource with scope: 'Get a single transfer from QuickBooks Online by Id'. It also routes away from siblings ('when no search or write answer already holds it'), implicitly excluding search_transfers and create/update_transfer. The domain gloss ('an accounting entry recording a transfer between accounts') makes the resource unambiguous.
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?
Gives a real selection condition: use this only when no search or write operation already returned the record, which steers the agent toward search_transfers first. It never names that sibling explicitly or states what to do on a not-found result, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trial_balanceget trial balanceARead-onlyInspect
Generate the QuickBooks trial balance report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description goes well beyond that by disclosing subtle behaviors: all-zero rows are omitted and counted in hidden_zero_rows, filters lists only the filters QuickBooks confirmed it applied (ignored parameters are absent), and no_data: true signals an empty period. It also explains the id alignment difference between summary and detail reports. This is rich behavioral context that an agent cannot infer from the schema or 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 a single dense paragraph that front-loads the core purpose and return structure before diving into edge-case behaviors. Every sentence carries meaningful information about return format, row semantics, or filter behavior. It is longer than strictly necessary, but the density justifies the length; a slight structural improvement would be splitting the return-format details from the edge-case behaviors.
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 read-only report tool with 100% schema coverage and no output schema, the description is remarkably complete. It explains the return structure, row types, value alignment, id semantics, hidden zero rows, filter confirmation behavior, and the no_data flag. An agent has everything needed to invoke the tool and interpret its response correctly. The only minor gap is not explicitly listing the report's default date range when no date parameters are provided, but the schema's optional params make that a minor omission.
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 already documents both parameters (params and company) in detail, including the date_macro enum list and accounting_method options. The description adds context about how filters are reported back (filters lists only confirmed applied filters), which indirectly clarifies parameter behavior, but it doesn't add new meaning to the parameters themselves beyond what the schema provides. 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 opens with a specific verb and resource: 'Generate the QuickBooks trial balance report.' It then details the exact return shape (columns, column_types, rows, row types, depth, values, id semantics), which distinguishes it from sibling report tools like get_balance_sheet or get_general_ledger. The level of specificity leaves no ambiguity about what this tool produces.
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 clearly implies this is the tool to call when a trial balance report is needed, and the detailed return format helps an agent understand what to expect. However, it does not explicitly state when to prefer this over related financial report siblings (e.g., get_general_ledger, get_balance_sheet) or mention any exclusions. The context is clear but the when-not-to-use guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vendorget vendorARead-onlyInspect
Get a single vendor from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Vendor. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds no behavioral detail beyond that — nothing about not-found handling, error behavior, or whether the record is fetched live versus cached. Adequate but not additive.
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?
A single front-loaded sentence that identifies the resource and the Id key before the routing caveat. No filler, though the trailing clause is slightly awkwardly worded rather than crisp.
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 two-parameter read tool with full schema coverage and no output schema, the definition gives an agent enough to call it correctly. It does not describe the returned vendor shape, but the operation's complexity is low enough that this 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?
Schema description coverage is 100%, so both 'id' and 'company' are already documented in the schema. The description's 'by Id' merely echoes the required parameter and says nothing about the optional 'company' selector, so it adds no meaning beyond the structured fields. Baseline 3 applies.
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?
States a specific verb and resource with a precise scope: fetch one vendor from QuickBooks Online keyed by Id. This distinguishes it in spirit from the many search_* and get_*_list siblings, though it never names the closest alternative (search_vendors) explicitly.
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 clause 'when no search or write answer already holds it' gives an actual routing condition, telling the agent not to call this if a search result or write response already contains the vendor. It stops short of naming the specific sibling tools to prefer, and the phrase 'write answer' is idiosyncratic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vendor_balanceget vendor balanceARead-onlyInspect
Generate the QuickBooks vendor balance report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: report_date (YYYY-MM-DD, the as-of date; defaults to today) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); vendor, department, appaid (All|Paid|Unpaid). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explaining the exact return structure, row types, id alignment rules, hidden_zero_rows behavior, filter confirmation semantics, and no_data flag. It adds substantial behavioral context without contradicting the readOnlyHint and destructiveHint 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 dense but front-loaded with the core verb and resource, and every sentence contributes to call correctness or result interpretation. Despite its length, there is no filler 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?
With no output schema, the description fully compensates by documenting exactly what the tool returns: columns, column_types, rows, row types, depth, id alignment, hidden_zero_rows, filters, and no_data. It also addresses edge cases like ignored parameters and empty periods, making the tool safe 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 coverage is 100%, so the baseline is 3, but the description adds meaningful parameter behavior: 'filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent)' clarifies how ignored vendor/department parameters surface in the result. It also explains no_data in relation to the report period, going beyond the schema's value lists.
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 states a specific verb and resource: 'Generate the QuickBooks vendor balance report.' It clearly identifies the tool's function, though it does not explicitly differentiate it from close siblings like get_vendor_balance_detail or get_aged_payables, so it stops short of a 5.
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?
There is no guidance on when to use this tool versus alternatives such as get_vendor_balance_detail or get_aged_payables. The description implies this is a summary-level report through row types, but it never states the selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vendor_balance_detailget vendor balance detailARead-onlyInspect
Generate the QuickBooks vendor balance detail report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: report_date (YYYY-MM-DD, the as-of date; defaults to today) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); start_duedate, end_duedate (YYYY-MM-DD); vendor, department, term, appaid (All|Paid|Unpaid); columns (comma-separated, e.g. tx_date,txn_type,doc_num,name,memo,account_name,other_account,due_date,pmt_mthd,is_cleared,dept_name), sort_by (one of those columns), sort_order (ascend|descend). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint/destructiveHint annotations by disclosing the exact return shape, row types, Money cell representation, id alignment behavior, omission of all-zero rows with hidden_zero_rows count, filter confirmation semantics, and no_data flag. This is rich behavioral context that an agent needs to interpret the response correctly.
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 dense and information-rich, front-loading the report generation purpose before diving into return-format details. Every sentence adds value, though the long run-on sentence about return structure could be slightly better organized. It is appropriately sized for the complexity of the output format.
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 read-only report tool with no output schema, the description is remarkably complete: it explains the return structure, row types, value alignment, id behavior, zero-row handling, filter confirmation, and no-data signaling. The parameter schema covers all inputs. Nothing an agent needs to call this tool and interpret its response is missing.
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 already documents all parameters. The description adds context about how filters appear in the response (filters lists confirmed filters, ignored parameters are absent), which helps understand parameter behavior, but it does not add syntax or format details beyond the schema. 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 states a specific verb ('Generate') and resource ('QuickBooks vendor balance detail report'), and the detailed return-format explanation distinguishes it from sibling report tools like get_vendor_balance, get_aged_payable_detail, and get_vendor_expenses. It clearly identifies what the tool produces and how the output is structured.
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 context by naming the report type and listing filter parameters, but it does not explicitly state when to prefer this over sibling report tools (e.g., get_vendor_balance vs get_vendor_balance_detail). The parameter schema provides the filter options, but there is no explicit when/when-not guidance or alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vendor_creditget vendor creditARead-onlyInspect
Get a single vendor credit from QuickBooks Online by Id, when no search or write answer already holds it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the VendorCredit. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only that a single record is returned; it says nothing about what happens when the Id is unknown or whether the result is scoped to the connected company.
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?
One sentence, front-loaded with the verb, resource, and lookup key. The conditional clause at the end is slightly muddled but short and does not bury 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?
For a simple single-record read with full schema coverage and annotations carrying the safety profile, the description is nearly sufficient. The absence of an output schema means return shape is undocumented, but that is a minor gap for a straightforward getter.
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 both the required 'id' and the optional 'company' are already documented in the schema. The description's 'by Id' adds nothing beyond that, so the baseline 3 applies.
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 states a specific verb and resource ('Get a single vendor credit') plus the lookup key ('by Id'), and the word 'single' distinguishes it from the sibling search_vendor_credits which returns collections. It stops short of naming the sibling explicitly, so it is clear but not fully differentiated.
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 trailing clause 'when no search or write answer already holds it' implies the agent should prefer a search or write response if one is available, which is a usable routing hint. However it never names search_vendor_credits and the phrasing is awkward enough that the condition is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vendor_expensesget vendor expensesARead-onlyInspect
Generate the QuickBooks vendor expenses report. Returns { columns, column_types, rows }: each row has a type (section | data | total), a depth, and values aligned to columns (Money cells as numbers, first cell is the label on summary reports); id is the label cell's QuickBooks record id (e.g. the account); on detail reports ids aligns to values instead. All-zero rows are omitted and counted in hidden_zero_rows. filters lists the filters QuickBooks confirms it applied (a parameter it ignored is absent), and no_data: true means the period has nothing to report.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | QuickBooks report query parameters: start_date, end_date (YYYY-MM-DD) or date_macro (Today, Yesterday, This Week, Last Week, This Month, Last Month, This Month-to-date, This Fiscal Quarter, Last Fiscal Quarter, This Fiscal Year, Last Fiscal Year, This Fiscal Year-to-date, Last Fiscal Year-to-date, ...); accounting_method (Cash|Accrual); summarize_column_by (Total|Month|Quarter|Year|Week|Days|Classes|Departments|Customers|Vendors|Employees|ProductsAndServices); the filters customer, vendor, item, class, department (QuickBooks Ids, comma-separated for several). | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint and destructiveHint annotations by detailing return shape, row types, id alignment behavior, hidden_zero_rows counting, filter application semantics, and no_data handling. It also discloses edge cases like ignored parameters being absent from filters, which is valuable behavioral context.
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 dense sentence, but every clause carries useful information about report output structure and edge cases. It is front-loaded with the tool's purpose and then covers return semantics efficiently. It could be split into shorter sentences for readability, but there is little waste.
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?
Despite having no output schema, the description comprehensively explains the return structure, row types, id alignment, zero-row omission, filter reporting, and no_data state. The input schema already covers parameters, so an agent has everything needed to correctly invoke and interpret this read-only report 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?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining how filter parameters are reflected in the output: filters lists what QuickBooks confirmed applied, and an ignored parameter is absent. This helps the agent interpret parameter effects and diagnose failed filtering.
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 a specific action and resource: 'Generate the QuickBooks vendor expenses report.' This distinguishes it from vendor balance and transaction-list tools by name. However, it does not explicitly differentiate itself from sibling reporting tools such as get_customer_income or get_profit_and_loss.
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 no guidance on when to choose this tool over alternatives, nor any exclusions or prerequisites. The intended use is only implied by the report name 'vendor expenses.' There is no mention of when a different report like get_vendor_balance_detail would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
give_payeeGive a payee to purchasesAInspect
Give a vendor as payee to purchases that have none, after the user agreed to the vendor for each group. Each assignment names the vendor (vendor_id of an existing vendor, or vendor: a name, matched to an existing vendor regardless of case and created when the company has none by that name) and the purchases: texts (group texts from list_purchases_without_payee) and/or ids. Only purchases with no payee are changed, and only their payee. At most 300 purchases are changed per call; when remaining is above zero, make the same call again. Use the same from and to as the listing. Requires full access on the connection.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Latest purchase date, YYYY-MM-DD. Defaults to no upper bound. | |
| from | No | Earliest purchase date, YYYY-MM-DD. Defaults to twelve months ago. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| assignments | Yes | One entry per vendor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false; the description adds substantial behavior beyond that: the 300-purchase per-call cap, the repeat-until-remaining-zero loop, the exact mutation scope ('only purchases with no payee are changed, and only their payee'), the side effect of creating a vendor when none matches, and the 'requires full access' auth requirement. This is unusually rich disclosure that does not contradict the non-destructive annotation.
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?
Front-loaded with the core action and dense with useful detail, but the vendor parenthetical is long and nested, making one sentence do a lot of work. Nearly every clause earns its place, so the slight density cost is minor.
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 no output schema, the description covers prerequisites, batching/pagination, mutation scope, side effects, and permissions. It even references the 'remaining' field, so an agent has enough to call it correctly and to know when to re-invoke.
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, but the description adds real meaning: vendor_id must reference an existing vendor while vendor is matched case-insensitively and created on miss, texts are group texts from list_purchases_without_payee, and ids cover purchases outside a group. These distinctions are not fully spelled out in the 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?
States a specific verb and resource with scope: 'Give a vendor as payee to purchases that have none.' It implicitly distinguishes itself from the sibling list_purchases_without_payee, which it names as the source of group texts, so an agent can tell the two apart without opening a schema.
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?
Gives the precondition ('after the user agreed to the vendor for each group'), the sourcing workflow (texts come from list_purchases_without_payee), and the pagination rule ('when remaining is above zero, make the same call again'). It also tells the agent to reuse the same from/to as the listing, closing the loop on correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bank_accountsList bank accountsARead-onlyInspect
List the bank and card accounts connected on the Caribooks Banks page, with the bank's current and available balance as Caribooks last read it and the time it was read (balance_as_of), and, for each account mapped to QuickBooks, the QuickBooks account and the balance QuickBooks holds for it. Balances are read every few hours with the bank feed; this tool does not ask the bank. Tell the user how old a balance is; for a fresher one, the user presses Refresh balances on Manage banks. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Only the bank accounts mapped to this connected QuickBooks company (name, realm id, or connection id). Every bank account when left out. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint false, openWorldHint), and the description goes well beyond them by disclosing that balances are cached, refreshed every few hours with the bank feed, and never fetched live from the bank. The staleness semantics and the resulting obligation to report balance age are exactly the kind of behavioral context annotations cannot convey.
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 purpose and payload are front-loaded in the opening sentence, and the following sentences add genuinely useful constraints (caching, freshness, user guidance). It is slightly padded by restating 'Read-only.' which the annotations already declare, keeping it just under maximum.
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?
There is no output schema, so the description carries the return-shape burden and does so thoroughly: balances, balance_as_of timestamps, and QuickBooks mapping/balance. Combined with the freshness caveat and the optional company filter, an agent has everything needed to call it and interpret the results 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% for the single optional 'company' parameter, which already documents the name/realm-id/connection-id forms and the every-account default. The description only alludes to QuickBooks mapping in general terms and adds no filter syntax beyond the schema, so the baseline 3 applies.
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 states a specific verb and resource ('List the bank and card accounts connected on the Caribooks Banks page') and details exactly what each row carries: current/available balance, balance_as_of, and the mapped QuickBooks account and its balance. This clearly separates it from siblings like list_bank_feed (transactions), list_bank_transactions, and get_account_list (chart of 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?
It gives a clear use context (viewing connected account balances) plus an explicit limitation: 'this tool does not ask the bank' and the freshness workaround (user presses Refresh balances on Manage banks). It also instructs the agent to tell the user how old a balance is. It stops short of naming a sibling alternative for live/fresh data, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bank_feedList the bank feedARead-onlyInspect
List the bank transactions QuickBooks has not booked yet, from the bank accounts connected on the Caribooks Banks page, each with the entry Caribooks suggests (expense with vendor, account and tax code; transfer; payment of invoices; deposit) and whether the company's own history or rules make it sure. Pending transactions are listed apart. Read-only: booking a line is done with the regular create tools when the user asks, and lines that are not sure need the user's confirmation first.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Only the bank accounts mapped to this connected QuickBooks company (name, realm id, or connection id). Every bank account when left out. | |
| sure_only | No | true to list only the lines whose suggestion is sure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is known. The description still adds value: it reinforces read-only, explains that writes happen through other tools, and imposes a confirmation gate on uncertain lines – context beyond what annotations convey.
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?
Front-loaded with the action and scope, and the included detail (entry types, sure flag, confirmation rule) earns its place for a tool with no output schema. The middle sentence is dense and slightly run-on, costing a point against 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?
With no output schema, the description carries the burden of describing returns, and it does so well: it enumerates the entry types (expense/transfer/payment/deposit), the sure flag, and pending transactions as separate. An agent has enough to call it and interpret results, though pagination/volume behavior is unspecified.
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 schema fully documents 'company' and 'sure_only'. The description gestures at the 'sure' concept but does not explain the parameters (e.g., what 'company' accepts or how sure_only filters), so it adds nothing meaningful beyond the schema. Baseline 3 applies.
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?
States a specific verb and resource ('List the bank transactions QuickBooks has not booked yet') and qualifies the scope (connected bank accounts, pending listed apart). The unbooked-feed framing distinguishes it from siblings like list_bank_transactions and find_bank_transactions_not_in_books without needing either schema.
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 routes the booking action to 'the regular create tools when the user asks' and states that non-sure lines 'need the user's confirmation first' – a clear workflow condition. It stops short of naming which sibling to call for adjacent needs, so it's slightly below a full when/when-not/alternative statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bank_transactionsList bank transactionsARead-onlyInspect
List the transactions the bank itself shows on the connected bank and card accounts, including pending ones, newest first: date, account, description, merchant, money out or in, currency and category. Read from the bank, not from QuickBooks, so transactions not yet accepted from the bank feed are included. Defaults to the last 30 days. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Latest date, YYYY-MM-DD. Defaults to today. | |
| from | No | Earliest date, YYYY-MM-DD. Defaults to 30 days before to. | |
| search | No | Only transactions whose description or merchant contains these words. | |
| account | No | One bank account: its id, its last four digits, or part of its name, as list_bank_accounts shows them. | |
| company | No | Only the bank accounts mapped to this connected QuickBooks company (name, realm id, or connection id). Every bank account when left out. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the closing 'Read-only' confirms without contradicting. The description adds real behavioral context beyond annotations: newest-first ordering, inclusion of pending/unaccepted transactions, and a 30-day default window.
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?
Front-loaded with purpose and source in the first clause, then return fields, then data-source caveat, then default range. Every sentence carries distinct information with no 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?
With no output schema, the description usefully enumerates returned columns (date, account, description, merchant, money out/in, currency, category) and states the default time window, which is everything an agent needs to call and interpret this read 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?
Schema coverage is 100%, so all five parameters (to, from, search, account, company) are already documented in the schema. The description restates the 30-day default range but adds no syntax or semantics beyond what the schema provides, so the baseline of 3 applies.
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?
States a specific verb+resource (list bank transactions) and immediately scopes it to what 'the bank itself shows on the connected bank and card accounts,' explicitly distinguishing bank-feed data from QuickBooks books data. An agent can tell this apart from the many books-based list/search tools without opening the schema.
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?
Clearly frames the data source ('Read from the bank, not from QuickBooks') and notes pending/unaccepted feed items are included, which tells the agent when this tool is the right source. It stops short of naming an alternative sibling (e.g., find_bank_transactions_not_in_books) or stating 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.
list_connected_companiesList connected companiesARead-onlyInspect
List the QuickBooks companies connected to this Caribooks account, with their access level.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, establishing the safety profile. The description adds the access-level detail, which is useful but minor. It does not mention pagination, return format, or authentication requirements, but the annotations lower the burden for this simple read-only 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?
A single sentence that front-loads the verb and resource, with the access-level qualifier adding necessary output information. Every word earns its place; no filler or repetition.
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?
With zero parameters, no output schema, and read-only annotations, the description is fully adequate. It states what the tool lists and the key attribute of the results. An agent has everything it needs 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?
The tool has zero parameters, so the description has no parameter burden. Per the baseline for 0-parameter tools, this is a 4. The description does not attempt to document nonexistent parameters.
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 uses a specific verb ('List'), identifies the resource ('QuickBooks companies connected to this Caribooks account'), and adds a distinguishing detail ('with their access level'). This clearly separates it from every other list_* sibling and leaves no ambiguity about what the tool does.
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?
There are no sibling tools that list connected companies, so the unique resource makes the usage context clear. The description does not explicitly state exclusions or alternatives, but none are needed; an agent can infer it should be used whenever it needs to enumerate connected QuickBooks companies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_loopsList the loopsARead-onlyInspect
The loops this account has for a company, or for every company when none is named: each one's id, whether it is active or paused, the sentence it came from, what it does read back in the user's words, and when it last ran and runs next. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected company. Every company when left out. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly says 'Read-only', which aligns with the annotations (readOnlyHint: true) and adds clarity. It also mentions the specific fields returned (id, active/paused status, sentence origin, user-words read-back, last/next run times), which is helpful context beyond the annotations. No contradictions found.
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, dense sentence that packs all necessary information without any fluff. It front-loads the primary function (listing loops) and then provides scope and output details efficiently. No unnecessary 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 nature of the tool (one optional parameter, no output schema needed because the description itemizes the return fields), the description is complete enough for an agent to call it correctly. It covers scope, filtering, and output composition, leaving little ambiguity.
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 already provides complete descriptions for the single parameter 'company' (coverage 100%), so the description adds little additional meaning. However, the description's phrase 'or for every company when none is named' reinforces the optionality and default behavior, which is a slight enhancement.
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 this tool lists loops for a company or for all companies when none is named, which distinguishes it from related sibling tools like list_proposals and list_rules. While it doesn't explicitly name a sibling, the scope (loops vs. proposals vs. rules) is clear and unambiguous.
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 when to use this tool: to retrieve loops for a specific company or across all companies. It doesn't explicitly state when not to use it or mention alternatives, but the context is clear enough for an agent to select it over siblings like search_* tools when a simple list is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_proposalsList what the loops proposeARead-onlyInspect
List a company's proposed or completed bookkeeping changes, newest first. Returns each proposal's id, action type, approval mode, status, summary and supporting evidence. Pending proposals can be approved or rejected by the user in Caribooks Approvals or through the daily digest link. This tool is read-only and cannot approve or reject proposals.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Keep only the proposals waiting for the user, the ones carried out, or the ones that failed. All of them when left out. | |
| company | No | Which connected company. Every company when left out. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and non-destructive. The description adds the crucial behavioral detail that proposals can't be approved/rejected here and points to where they can, plus the ordering (newest first).
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 tight sentences, front-loaded with purpose and ordering, then return fields, then a behavioral boundary. No filler.
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, so describing returned fields is valuable. It covers ordering, status behavior, and action limitations. Could mention default scope details or pagination, but it's sufficient for a 2-parameter read 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?
Schema coverage is 100%, so the baseline is 3. The description's 'proposed or completed' loosely maps to the status enum, but the schema already explains all values and defaults. Little added meaning.
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?
States a specific verb (list) and resource (proposed/completed bookkeeping changes), plus ordering. Clearly distinguishes from sibling tools like list_loops or get_changes by naming the exact object returned.
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?
Explains the two statuses visible (proposed or completed) and that pending ones can be acted on elsewhere. It doesn't explicitly name alternatives, but the read-only note steers usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_purchases_without_payeeList purchases without a payeeARead-onlyInspect
List the purchases (bank and card expenses, including bank-feed lines) that have no payee in QuickBooks, grouped by the merchant their bank text names: OPENAI *CHATGPT SUBSCR and OPENAI *CHATGPT SUBSCR 4411 fall in one group, OPENAI CHATGPT. Each group gives its count, totals per currency, first and last date, up to three raw bank texts, and a suggested vendor when there is one: the vendor most purchases with the same bank text were already given, or a vendor whose name is the text's first words. A bank text already given several vendors (a payment provider paying several payees) suggests none: vendors_before names each with its smallest and largest amount, and purchases lists the group's purchases, to give by ids. Transfers and payments are listed apart under left_out. Several groups are often one vendor (OPENAI CHATGPT, OPENAI SAN; CLAUDE AI, ANTHROPIC CLAUDE). Show the user the groups and the vendor you propose for each before calling give_payee. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Latest purchase date, YYYY-MM-DD. Defaults to no upper bound. | |
| from | No | Earliest purchase date, YYYY-MM-DD. Defaults to twelve months ago. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint, destructiveHint=false, openWorldHint=false), and the description additively discloses real behavior: transfers and payments are separated into left_out, purchases are grouped by parsed bank text, and the vendor-suggestion heuristic is spelled out. The trailing 'Read-only' merely restates an annotation, and it omits pagination/limit behavior, but overall it adds meaningful context beyond the 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?
Dense but front-loaded: the first clause states the resource and filter, then it elaborates grouping and return fields. Given there is no output schema, the volume is largely earned, though it reads as one long run-on paragraph that could be better chunked and it slightly over-explains with example data.
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?
With no output schema, the description fully covers what comes back: per-group count, per-currency totals, first/last dates, up to three raw bank texts, suggested vendor, vendors_before with amount ranges, the purchases list with ids, and left_out. It also names the downstream give_payee action, leaving nothing essential for a correct call.
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%, with from/to/company each documented (default range, date format, single-company optionality). The description adds no parameter-level detail beyond the schema, so the baseline of 3 applies.
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?
States a specific verb and resource ('list the purchases ... that have no payee'), and goes further by naming the exact scope (bank-feed lines, no payee) and the grouping model. An agent can tell this apart from generic search_purchases or list_bank_transactions without opening any schema.
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?
Gives clear workflow context: the agent should 'Show the user the groups and the vendor you propose for each before calling give_payee', which pins down when this tool is used and what follows it. It does not explicitly say when NOT to use it or name a competing sibling, but the intended placement in the payee-assignment flow is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_receipt_inboxList the receipt inboxARead-onlyInspect
List receipts, invoices and documents uploaded through the Caribooks portal or emailed to the account's receiving address. Returns each file's upload_id, company, kind, filing status and content preview. Kinds include transaction evidence, monthly statements and reference documents. Read-only; does not create transactions or attachments. include_filed includes filed statements and references. upload_id selects a document for a full-text read; text_offset pages through long documents, and cursor pages through older files. search, from, to, min_total and max_total find documents by the words, date and total read off them, filed receipts included; each line shows the vendor, date, number, total and summary read.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Only documents dated on or before this day, YYYY-MM-DD. | |
| from | No | Only documents dated on or after this day, YYYY-MM-DD, by the date written on them. | |
| limit | No | Files per page, newest first. Defaults to 10. | |
| cursor | No | The next cursor from a listing. Keep the same company and include_filed when continuing. | |
| search | No | Words every matching document contains, in its vendor, number, summary, lines bought, text, file name, sender or subject. Case and accents do not matter. Searches filed documents too. | |
| company | No | Only the files sorted into this connected company. Every file when left out, each line saying which company it belongs to. | |
| max_total | No | Only documents whose total is at most this amount. | |
| min_total | No | Only documents whose total is at least this amount. | |
| upload_id | No | Read this file instead of listing previews. PDFs return up to 12,000 characters with a continuation until the end. | |
| text_offset | No | Continue reading upload_id at the text_offset returned by the previous call. Defaults to 0. | |
| include_filed | No | Also list filed statements and references. A named file includes these automatically; filed receipts live in QuickBooks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, and the description reinforces this with 'Read-only; does not create transactions or attachments.' Beyond annotations, it discloses cursor pagination, full-text continuation via upload_id/text_offset, and search behavior over filed receipts. No contradiction with the annotations is present.
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 dense but efficient: purpose and return values are front-loaded, and the parameter-related sentences earn their place. The semicolon-heavy style packs a lot into seven sentences, and while it could be reorganized into clearer sections, there is no redundancy or filler.
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?
With no output schema and 11 parameters, the description carries a heavy burden, and it covers the key ground: document sources, return fields, file kinds, read-only behavior, filtering, search, and pagination. It does not spell out edge cases like missing upload_id behavior, but the essential information an agent needs to invoke the tool correctly is present.
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, but the description adds meaning beyond the schema by grouping search/from/to/min_total/max_total as a coherent filtering behavior and explaining the output line format ('vendor, date, number, total and summary read'). It also clarifies the relationship among upload_id, text_offset, and cursor, which is not obvious from the 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 opens with a specific verb and resource: 'List receipts, invoices and documents uploaded through the Caribooks portal or emailed to the account's receiving address.' It also names what is returned (upload_id, company, kind, filing status, content preview), which makes the tool's purpose unmistakable. The inbox scope distinguishes it from the many search/get/create siblings in the surrounding tool list.
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 clear context: it is read-only, does not create transactions or attachments, and notes that filed receipts 'live in QuickBooks' when include_filed is used. It does not explicitly name alternative tools or state when not to use this tool, so it stops short of a 5, but the usage context is unambiguous enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rulesList a company's rulesARead-onlyInspect
List saved bookkeeping rules for a connected company, including active rules and proposals awaiting user approval. Returns each rule's id, source and evidence. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected company. Optional when only one is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Read-only', which aligns with the annotations (readOnlyHint=true, destructiveHint=false). It adds value by clarifying it includes proposals and the type of data returned, which is beyond the annotations. It does not contradict the 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 concise, two sentences, with the most critical information (what it lists and read-only) front-loaded. No unnecessary words. Every sentence contributes.
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 tool is a simple read-only list with one optional parameter. The description covers the purpose, scope (active and proposals), and return fields. It lacks explicit examples or related siblings, but given the simplicity and annotations, it is largely 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 schema has 100% description coverage for the 'company' parameter, explaining it is optional and which company. The description does not add additional parameter semantics beyond the schema, but the schema is sufficient. 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 it lists saved bookkeeping rules for a connected company, specifying the scope ('including active rules and proposals awaiting user approval') and the return fields ('id, source and evidence'). It distinguishes from siblings like list_proposals and list_loops by focusing on rules and their approval status.
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 when to use this tool: when you need to view saved rules or pending proposals. However, it does not explicitly state when not to use it or mention alternatives like list_proposals or search functions. The context of 'connected company' is provided but not elaborately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remember_ruleRemember a rule about how this company's books are keptADestructiveInspect
Save a user's bookkeeping preference for a connected company: a categorization, vendor fact, preference or procedure. For example, a categorization can associate a payee with an expense account. Every rule saved here waits for the user's approval in Caribooks Approvals (https://caribooks.com/portal/review) and applies only once approved there; tell the user so. stated_by_user records whether the user said it or it was inferred from a pattern. Rules are company-specific business data; they never change access permissions or confirmation requirements.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| text | Yes | The rule in the user's words, one sentence. | |
| company | No | Which connected company the rule belongs to. Optional when only one is connected. | |
| matcher | No | What the rule matches, as flat pairs: {"memo_contains": "UBERTRIP"}, {"payee": "Bambu Lab"}, {"amount_over": "500"}. | |
| outcome | No | What to do when it matches, as flat pairs: {"account": "5245 Travel"}, {"class": "Formation A"}. | |
| evidence | No | The record that prompted the rule, e.g. Purchase 2979. | |
| stated_by_user | Yes | true only when the user said it in this conversation; false when you inferred it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=false and destructiveHint=true, the description adds substantial context: the rule is inert until approved in Caribooks Approvals (with a URL), it is company-specific business data, and it never changes access permissions or confirmation requirements. Minor residual tension: it never explains why the tool is flagged destructive, and there is no mention of duplicate/idempotency behavior.
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, front-loaded with the save action and scoped immediately; every sentence carries either scope, workflow, or permission semantics. Slightly long, and the stated_by_user sentence is partly redundant with the schema, keeping it from a 5.
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 7-parameter mutation tool with nested matcher/outcome objects and no output schema, the description covers the essentials an agent needs: what is stored, that approval is required, and that the data is company-scoped and non-privileged. It leaves the agent guessing about the return value and about what happens on repeated saves.
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 86%, so the schema already carries most parameter meaning and baseline is 3. The description adds a cross-parameter illustration of how kind, matcher, and outcome combine (payee → expense account) and clarifies that rules are company-scoped, though its stated_by_user sentence largely repeats the schema description verbatim.
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?
States a specific verb and resource ('Save a user's bookkeeping preference... a categorization, vendor fact, preference or procedure') and enumerates the four rule kinds, which lets an agent distinguish it from siblings like list_rules, retire_rule, and update_preferences. The concrete example ('a categorization can associate a payee with an expense account') pins down what a saved rule actually is.
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?
Gives clear context for invocation (capturing a user's stated or inferred bookkeeping preference for a connected company) plus an operational directive: the rule is approval-gated, so the agent must tell the user. It does not name an alternative tool or state when NOT to use it, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retire_ruleRetire a ruleADestructiveInspect
Retire an active bookkeeping rule by id, following the user's request. The rule remains in history but is no longer active. A rule still waiting for approval is refused by the user in Caribooks Approvals (https://caribooks.com/portal/review), not here.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected company. Optional when only one is connected. | |
| rule_id | Yes | The rule's id, as shown by list_rules. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, so the agent expects a write. The description adds the crucial nuance that this is a soft deactivation – the rule stays in history but is no longer active – which reframes how 'destructive' this actually is, plus the pending-approval edge case. It omits auth/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 sentences, front-loaded with the core action, then the state effect, then the edge case. The embedded Approvals URL is slightly bulky but serves a real routing purpose, so little is wasted.
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 two-parameter mutation with no output schema, the description covers the state outcome and the one notable exception case. Missing only permission/auth expectations, but the essential calling information is present.
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 both rule_id and company are already documented in the schema. The description only echoes 'by id' without adding format or sourcing detail beyond what the schema's 'as shown by list_rules' already provides. 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?
States a specific verb (retire), resource (bookkeeping rule), and scope (active rules, by id). This clearly separates it from siblings like remember_rule (create) and list_rules (read), and the 'no longer active / remains in history' framing pins down the exact operation.
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?
Gives an explicit when-not: a rule still waiting for approval must be handled in Caribooks Approvals, not here. It also frames the action as following the user's request. It stops short of naming a sibling alternative for reversing or fully deleting a rule, so it is clear context but not complete routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_payout_setupSave the payout setupAInspect
Save the payout setup the user chose, by QuickBooks ids from get_payout_setup. It is checked first (the holding account must be a Bank account, each tax code must charge the platform's rates, the start date cannot be inside closed books) and waits for the user to confirm it on the Caribooks Payouts page; nothing is booked before that.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | each_sale or payout_summary, as the user chose. | |
| items | Yes | Stripe product id → QuickBooks item id. | |
| company | No | The connected QuickBooks company (name, realm id, or connection id). Optional when only one company is connected. | |
| customers | No | Stripe customer id → QuickBooks customer id, for customers email and name do not match. | |
| tax_codes | Yes | Stripe tax combination key (from get_payout_setup) → QuickBooks tax code id. | |
| vendor_id | Yes | The vendor on fee expenses, usually Stripe. | |
| start_date | Yes | The first day booked, YYYY-MM-DD. | |
| fee_account_id | Yes | The expense account for Stripe's fees. | |
| bank_account_id | Yes | The bank account Stripe pays out to. | |
| default_item_id | No | The item for a sale with no Stripe invoice to read products from. | |
| fee_tax_code_id | Yes | The purchase tax code for Stripe's own fees that Stripe charges sales tax on, so it is claimed back; null to book them whole. | |
| exempt_tax_code_id | Yes | The tax code for card processing fees, which carry no sales tax (e.g. Exempt); null when the company has no sales tax. | |
| holding_account_id | Yes | The Bank account that stands for the Stripe balance. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring readOnlyHint=false, destructiveHint=false and openWorldHint=true, the description adds real behavioral substance: the three validation rules (holding account must be a Bank account, tax codes must match the platform's rates, start date cannot fall inside closed books) and the fact that nothing is booked until user confirmation. It stops short of saying what happens after confirmation or whether the call is idempotent.
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?
Front-loaded with the action and the source of the ids, with the validation and confirmation details following in a parenthetical. It is a single dense sentence, but every clause carries information; only the ordering of the validation list feels slightly bolted on.
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 13-parameter, nested-object mutation with no output schema, the description covers purpose, source of inputs, preconditions, and the fact that a confirmation gate precedes any booking. It leaves the post-confirmation outcome and return behavior unstated, but the annotations carry the safety profile and the schema carries the parameter detail.
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 already documents all 13 parameters, and the baseline is 3. The description reinforces a couple of constraints (holding account type, start date vs closed books) but adds no format or mapping detail beyond what the schema's per-parameter descriptions already provide.
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?
States a specific verb and resource ("Save the payout setup"), scopes it to what "the user chose," and explicitly ties the QuickBooks ids to get_payout_setup, distinguishing it from that sibling and from get_payout_status. An agent can tell what this does without opening the schema.
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?
Clear workflow context: the ids come from get_payout_setup, the setup is validated first, and it then waits for the user to confirm on the Caribooks Payouts page. It does not name an alternative tool or a when-not condition, but the prerequisites are explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_accountssearch accountsARead-onlyInspect
Search account records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Inactive records are left out unless Active is filtered explicitly (Active: false, or Active IN (true, false) for both). Omit to return the first page of all account records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the safety profile is covered. The description adds useful behavioral detail about the return payload (full records with SyncToken, no get needed) plus the batch-read pattern. However, with the criteria schema carrying pagination and truncation behavior, the description itself contributes only modestly beyond structured data.
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 tight sentences with no filler, and the primary purpose is front-loaded before the workflow tips. Every clause 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?
There is no output schema, and the description compensates by stating that results are full records containing SyncToken, which tells the agent what comes back. Combined with the schema's coverage of filtering, pagination and inactive-record behavior, an agent has what it needs; only the overlap with get_account_list is left unexplained.
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 both 'company' and the extremely detailed 'criteria' parameter are already fully documented in the schema. The description adds only the 'Id IN' usage hint for criteria, which is a marginal gain over the schema's own operator list. Baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb and resource ('Search account records in QuickBooks Online') that separates it from the many other search_* siblings by resource. It does not, however, differentiate itself from the closely overlapping get_account and get_account_list siblings, so an agent still has to guess which account-read tool to pick.
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?
Gives concrete context: results are full records so no follow-up get is required, and several known Ids can be read at once via 'Id IN'. That is an actionable usage recipe, but it never names an alternative tool or states an exclusion (e.g. when to prefer get_account_list).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_attachablessearch attachablesARead-onlyInspect
Search attachment records (files and notes pinned to QuickBooks records). Each result names the file and the records it is attached to. Search results do not include a TempDownloadUri download link.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all attachable records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and non-destructive behavior, so the bar is lower. The description adds valuable behavioral context: it discloses that results only name the file and associated records and explicitly excludes a download link. The criteria parameter description further documents pagination behavior (page size 1000, truncation) which supplements the safety profile from 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 main description is two tightly written sentences that immediately state the purpose, the content of results, and a key limitation. No unnecessary words, and the important behavioral note about the missing download link is included without clutter.
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?
There is no output schema, so the description must explain what is returned—it does so by stating that each result names the file and its attached records, and that no download link is included. Combined with the detailed schema for the criteria parameter (filters, sorting, pagination), an agent has enough context to call the tool correctly, though it stops short of fully describing the result structure beyond that.
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% and the criteria parameter has a rich description covering formats, operators, limitations, and pagination. The main tool description does not add any parameter-specific semantics beyond what the schema already provides, so the 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 uses a specific verb ('search') and a clear resource ('attachment records (files and notes pinned to QuickBooks records)'). It states exactly what the tool does and what results contain, and explicitly notes that results lack a TempDownloadUri link, distinguishing it from other attachment tools like get_attachable.
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 searching attachment records but does not explicitly name alternatives or state when not to use it. The mention that results lack a download link hints that this tool is not for downloading, but it doesn't direct the agent to get_attachable or other tools. Guidance is present but only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_bill_paymentssearch bill paymentsARead-onlyInspect
Search bill payment records in QuickBooks Online. An accounting record of a payment to a vendor. It does not initiate a bank or card payment. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all bill_payment records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context beyond annotations: results are full records with SyncToken (no follow-up get needed), filtering supports Id IN for batch reads, and it clarifies it does not initiate any payment. That is solid added value, though it doesn't discuss pagination or truncation behavior (left to the schema).
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?
Four compact sentences, each earning its place. Verification-vs-action distinction is front-loaded, then the no-follow-up-get tip, then the Id IN batching tip. No filler.
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 read-only search tool with no output schema and full schema coverage, the description covers identity, distinctions, and the SyncToken/get shortcut. It could be slightly more complete by mentioning paging/limits that matter for large result sets, but those are in the schema and annotations carry safety.
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 schema already documents company and the rich criteria semantics (operators, AND-only, paging). The description adds little parameter detail beyond echoing the Id IN pattern, which is a nice hint but not a substitute for schema. 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?
States a specific verb+resource (Search bill payment records) and defines the record precisely as an accounting record of a payment to a vendor, explicitly distinguishing it from a bank/card payment action. This lets an agent tell it apart from search_payments, search_purchases, and get_bill_payment without inspecting schemas.
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?
Includes useful routing guidance: 'read several known Ids in one search with Id IN' vs. a single get, and 'Results are full records with SyncToken, so no get is needed after.' It does not explicitly name a sibling alternative or exclude cases, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_billssearch billsARead-onlyInspect
Search bill records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all bill records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so safety profile is known. The description adds that results are full records with SyncToken (no get needed) and the 'Id IN' pattern, which is useful behavioral context beyond annotations. It doesn't cover pagination/truncation here, though the schema does.
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, then a key operational tip. No wasted text.
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 read-only search tool with rich schema documentation and annotations, this is nearly complete. It covers the SyncToken/full-record benefit and multi-Id retrieval. Pagination is left to the schema, which is acceptable.
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%, and the criteria parameter is extensively documented in-schema. The description adds the 'Id IN' usage hint for the criteria field, a small value-add. Baseline 3 applies when schema carries the parameter documentation.
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?
States a specific verb+resource: 'Search bill records in QuickBooks Online.' This clearly identifies a query tool for bills, distinguishable from siblings like get_bill or search_invoices. However, it doesn't explicitly state what makes this different from get_bill beyond the full-records note.
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?
Implied usage is to search/filter bill records, and it notes you can read several Ids in one search with 'Id IN' rather than using get repeatedly. But it doesn't state when to use this versus get_bill explicitly, nor when not to use search (e.g., single known record).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_budgetssearch budgetsARead-onlyInspect
Search budget records in QuickBooks Online. A profit-and-loss budget with one amount per account per period. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Each budget comes back with every BudgetDetail line. Omit to return the first page of all budget records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: results are full records including SyncToken, which tells the agent a write can follow without a re-read. It does not mention rate limits, truncation, or page size (those live in the schema criteria text).
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 short sentences, each load-bearing: identity, record shape, and the practical consequence (no follow-up get; batch by Id IN). Nothing redundant and the key routing fact sits up front.
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 two-parameter read tool with no output schema, the description covers what comes back (full records with SyncToken) and one efficient retrieval pattern. Filtering and pagination are fully handled by the schema, so the only remaining gap is error/empty-result behavior, which is minor.
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%, and the criteria parameter's schema text already documents operators, AND semantics, case sensitivity, the 1000-record page, and truncation. The description only adds the 'Id IN' pattern, which is marginal on top of an already thorough schema; 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?
States a specific verb and resource ('Search budget records in QuickBooks Online') and then characterizes what a budget record is ('a profit-and-loss budget with one amount per account per period'). The clause 'no get is needed after' implicitly distinguishes it from the sibling get_budget, so an agent can separate the two without opening either schema.
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?
Gives a concrete usage pattern for batch lookup ('read several known Ids in one search with Id IN') and steers the agent away from a follow-up get_budget call. It never states when filtering/pagination is preferred over a plain search, but the routing context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_classessearch classesARead-onlyInspect
Search class records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Inactive records are left out unless Active is filtered explicitly (Active: false, or Active IN (true, false) for both). Omit to return the first page of all class records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: the return payload is a full record including SyncToken, so no subsequent get is needed. Pagination/limit behavior lives in the schema rather than here.
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 tight sentences, front-loaded with the verb+resource and immediately followed by the two pieces of value an agent needs (full-record return, batched Id lookup). Zero filler.
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 exists, but the description compensates by describing the return shape (full class records with SyncToken) and the batched-read pattern. Combined with the exhaustive criteria schema, an agent has enough to call it correctly; only explicit pagination guidance is left to the 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 description coverage is 100%, so both parameters are already fully documented in the schema (criteria syntax, operators, pagination, inactive handling). The description only adds one usage hint ('Id IN'), which is marginal over the schema-rich criteria doc, so baseline 3 is correct.
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?
States a specific verb+resource ('Search class records in QuickBooks Online') and implicitly separates itself from get_class by noting results are full records requiring no follow-up get. The sibling differentiation is present but indirect rather than by name.
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?
Gives clear tactical context: use it to avoid a follow-up get, and use 'Id IN' to read several known Ids in one call. It doesn't explicitly state when to prefer get_class instead, and offers no exclusions, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_company_currenciessearch company currenciesARead-onlyInspect
Search company currency records in QuickBooks Online. The currencies the company transacts in; only meaningful with multicurrency enabled. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all company_currency records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: the multicurrency precondition and the fact that returned records are complete with SyncToken (no follow-up get required). It doesn't mention pagination or rate limits, but those live in the criteria schema.
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?
Front-loaded with the purpose, then scope, precondition, and two practical tips in three compact clauses. No filler, though the final clause about Id IN is slightly dense.
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 read-only search tool with no output schema, it covers purpose, precondition, result shape, and a batching hint, while annotations cover safety and the schema covers pagination/truncation. Nothing critical is missing, though explicit alternative routing would round it out.
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% and the criteria parameter description is already very rich, so the baseline is 3. The description adds a useful tip not in the schema – batching known Ids via 'Id IN' – which slightly exceeds baseline.
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?
States a specific verb and resource ('Search company currency records in QuickBooks Online') and clarifies the scope ('the currencies the company transacts in'). It also implicitly differentiates from get_company_currency by noting results are full records with SyncToken, so no follow-up get is needed. It stops short of explicitly naming the sibling to route to, so it lands at 4 rather than 5.
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?
Gives a clear precondition ('only meaningful with multicurrency enabled') and a practical usage pattern ('read several known Ids in one search with Id IN'). It does not explicitly name when to prefer an alternative like get_company_currency for a single record, so no exclusion/routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_company_infossearch company infosARead-onlyInspect
Search company info records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. There is one company info record; get_company_info reads it directly. Omit to return the first page of all company_info records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. Beyond that, the description adds real value: results are full records including SyncToken, so a follow-up read is unnecessary. It stops short of describing pagination or truncation behavior, which lives only in the schema.
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 compact sentences that front-load purpose and then the SyncToken/no-get payoff. No filler, though the second clause is slightly compressed to the point of being terse.
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 read-only tool with annotations covering safety and a 100%-covered schema (no output schema needed), the description supplies the one non-obvious fact an agent needs: results are complete records. Adequate for correct invocation.
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 criteria syntax, operator list, ANDing behavior and pagination are fully documented in the schema. The description adds only the mild hint that Id IN can batch-read known Ids, which is baseline-level value over structured data.
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?
States a specific verb (Search) and resource (company info records in QuickBooks Online), which is unambiguous. It also nods toward sibling differentiation by noting no subsequent get is needed, but does not explicitly name get_company_info, the natural alternative.
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 phrase 'read several known Ids in one search with Id IN' implies a useful batch-read scenario, so context is present. However, it never states when NOT to use this tool versus get_company_info (which the schema mentions but the description omits).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_credit_card_payment_txnssearch credit card payment txnsARead-onlyInspect
Search credit card payment txn records in QuickBooks Online. An accounting record of a bank payment toward a credit card balance. It does not move money. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all credit_card_payment_txn records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with them ('It does not move money'). Beyond annotations it adds real value: results are full records carrying SyncToken, so a follow-up get is unnecessary. It omits pagination/limit behavior, which the schema covers, so 4 is fair.
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 short sentences, front-loaded with what the tool searches for, then the domain clarification, then the practical retrieval tip. No sentence is filler.
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 read-only search tool with no output schema and 100% schema coverage, the description covers domain semantics and the key return property (full records with SyncToken). It does not need to explain return values, and the remaining detail lives in the schema, so it is complete enough.
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 both parameters are fully documented in the schema. The description adds only a small hint about using Id IN to batch-read known records, which the schema already alludes to via the IN operator. Baseline 3 is appropriate when the schema does the heavy lifting.
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?
Specific verb (search) plus resource (credit card payment txn records in QuickBooks Online) and a domain gloss that distinguishes it from lookalike siblings: 'An accounting record of a bank payment toward a credit card balance. It does not move money.' An agent can separate this from search_payments and search_bill_payments without opening any schema.
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?
Gives operational guidance ('no get is needed after', 'read several known Ids in one search with Id IN') but never states when to prefer this tool over sibling search tools like search_payments. Usage is implied rather than contrasted with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_credit_memossearch credit memosARead-onlyInspect
Search credit memo records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all credit_memo records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish readOnly/destructive/openWorld hints, and the description adds genuine value beyond them: results are full records carrying SyncToken, so no follow-up get is required. It does not restate pagination/truncation behavior here, which lives in the schema instead.
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 tight sentences, front-loaded with what it does and immediately followed by the key operational payoff (no extra get, batch Ids). Every clause 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?
With no output schema, the description usefully characterizes the return payload (full records with SyncToken), and the criteria schema handles filtering/pagination. Nothing essential to a correct call is missing.
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 already documents both company and criteria in depth. The description adds only the Id IN hint, which is marginal beyond what the schema provides; baseline 3 applies.
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?
States a specific verb (Search) and resource (credit memo records) scoped to QuickBooks Online. It implicitly distinguishes itself from get_credit_memo by noting results are full records, though it never names the sibling explicitly.
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?
Gives clear when-to-use context: no follow-up get is needed, and multiple known Ids can be read in one call via Id IN. It does not explicitly say when to prefer get_credit_memo or search_vendor_credits instead, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_customerssearch customersARead-onlyInspect
Search customer records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Inactive records are left out unless Active is filtered explicitly (Active: false, or Active IN (true, false) for both). Omit to return the first page of all customer records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, so the safety profile is covered; the description adds genuinely new behavior context, namely that returned records are complete (SyncToken present) and that multiple known Ids can be resolved in a single call. It does not itself mention that inactive customers are excluded or that a page is capped/truncated, though that detail does live in the criteria parameter text.
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 the purpose, then the two operational facts an agent needs (complete records, batched Id lookup). No filler and nothing buried.
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 two-parameter read tool with a fully documented schema and no output schema, the description supplies what an agent needs to decide to use it: scope, completeness of results, and the bulk-Id pattern. Remaining details (filters, pagination, inactive handling) are thoroughly carried by the criteria schema text.
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 baseline is 3; the description still adds value by surfacing the 'Id IN' operator for bulk lookups, which is a non-obvious usage pattern for the criteria parameter. It does not add meaning for the company parameter, but the schema already handles that.
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?
States a specific verb and resource ('Search customer records in QuickBooks Online') and adds the key scope fact that results are full records carrying SyncToken. It implicitly distinguishes itself from get_customer ('no get is needed after') but never names nearby siblings such as get_customer or search_customer_types explicitly.
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?
Gives a concrete usage pattern: use this to read several known Ids in one call via 'Id IN', and skip a follow-up get because the records are complete. It stops short of stating when NOT to use it (e.g., single-record fetches, or how to pick between this and the dedicated customer reports).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_customer_typessearch customer typesARead-onlyInspect
Search customer type records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all customer_type records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, non-destructive, closed-world). The description adds useful behavior beyond that: results are full records with SyncToken, so no follow-up get is required, and batch reads are supported via Id IN. It does not discuss pagination or rate limits, but those are covered in the schema's criteria description.
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 tightly written sentences with the core purpose front-loaded and no wasted words. The second sentence efficiently conveys the main behavioral benefit of the tool.
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 search tool with rich schema documentation and safety annotations but no output schema, the description is mostly complete: it explains that results are full records with SyncToken and that batch reads are possible. It omits pagination behavior, though the schema already documents the 1000-record page limit and offset/limit 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 description coverage is 100%, so both the company and criteria parameters are already well documented. The description mentions using Id IN for batch reads, but that operator and its syntax are already described in the schema; the description adds little new parameter-level meaning.
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 states a specific verb and resource: 'Search customer type records in QuickBooks Online.' It implicitly distinguishes from get_customer_type by noting results already include SyncToken, so no follow-up get is needed, but it does not explicitly name any sibling 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?
It gives clear usage context: use this to read several known Ids in one search with Id IN, and no separate get call is needed afterward. It does not state explicit exclusions or name alternative tools by name, but the guidance is practical and sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_departmentssearch departmentsARead-onlyInspect
Search department records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Inactive records are left out unless Active is filtered explicitly (Active: false, or Active IN (true, false) for both). Omit to return the first page of all department records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the result is a full record including SyncToken (relevant for subsequent updates) and that batch Id lookups are supported in one call.
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 tight sentences, front-loaded with the core purpose, then the highest-value non-obvious details. Nothing wasted and no repetition of the exhaustive schema text.
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?
With no output schema, the description helpfully characterizes the return (full records with SyncToken). Pagination and filtering details live in the schema, so the pairing is adequate; only a note on result ordering or default limits would improve it.
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%, with criteria operators, case-sensitivity, AND semantics, pagination, and inactive-record handling all documented in the schema. The description only echoes one usage pattern (Id IN) already covered there, so 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?
States a specific verb and resource ("Search department records") scoped to QuickBooks Online, and clarifies the payload shape. It implies the search/get distinction but never names the sibling get_department it is offsetting against.
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 real usage context: because results are full records with SyncToken, a follow-up get is unnecessary, and multiple known Ids can be read in one call with Id IN. Clear when-to-use guidance, though no explicit when-not conditions or boundaries versus other search_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_depositssearch depositsARead-onlyInspect
Search deposit records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all deposit records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered; the description adds the non-obvious return-completeness trait that records include SyncToken. It does not add auth, rate-limit, or paging behavior (paging lives in the schema), so it is solid but not rich.
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 compact sentences, front-loaded with the action and the differentiator; every clause carries information an agent needs. No filler.
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?
With no output schema, the description carries the return-value burden and does so at a high level (full records + SyncToken), which is the key fact. Paging/truncation and company selection are handled in the schema, leaving only minor gaps.
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% and the criteria parameter is documented exhaustively in the schema itself (operators, AND semantics, filterable fields, case sensitivity, 1000-record paging). The description adds no parameter-level meaning beyond that, so baseline 3 is correct.
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?
States a specific verb+resource ('Search deposit records in QuickBooks Online') and immediately distinguishes itself from get_deposit by noting results are full records with SyncToken so a follow-up get is unnecessary. An agent can pick this over the ~90 siblings without opening a schema.
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?
Gives a concrete usage pattern ('read several known Ids in one search with Id IN') and implies when this replaces get_deposit. It stops short of an explicit when-not-to-use statement (e.g., single known Id or bulk export), so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_employeessearch employeesBRead-onlyInspect
Search employee records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Inactive records are left out unless Active is filtered explicitly (Active: false, or Active IN (true, false) for both). Omit to return the first page of all employee records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that results are full records with SyncToken, which is useful behavior context, but it does not mention the 1000-record page cap or truncation, which is left entirely to the schema.
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 tight sentences, front-loaded with the core action and followed by a practical tip. 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 read-only search tool with a fully documented schema, the description is adequate but incomplete. It omits pagination and truncation behavior and does not reference the sibling get_employee, leaving the agent to rely on the schema for operational limits.
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 both company and criteria are fully documented in the schema. The description adds the Id IN tip for criteria, which is a small value-add, but otherwise leaves parameter semantics to 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?
States a specific verb and resource: search employee records in QuickBooks Online. It is clear what it does, though it does not explicitly contrast with get_employee beyond noting that sync tokens make a follow-up get unnecessary.
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 use for finding employees and gives a practical hint for reading several known Ids via Id IN, but it does not state when to prefer search_employees over get_employee or create_employee.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_estimatessearch estimatesARead-onlyInspect
Search estimate records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all estimate records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds that full records with SyncToken are returned and that Id IN can batch reads, which is useful behavioral context. However, it doesn't mention pagination limits (though schema covers that) or rate limiting. A 3 is appropriate given some added value beyond 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?
Two short sentences, front-loaded with the core purpose and then the key usage tip. 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 readOnly search tool with no output schema, the description covers the essentials: what it searches, that full records are returned, and a batching tip. The schema covers parameters and pagination, so the description needn't repeat those. Slightly incomplete on when to use this vs get_estimate, but overall adequate.
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 parameter details are fully documented in the schema. The description mentions the Id IN operator which is an example of criteria usage, adding minor value. Baseline 3 is correct when schema does the heavy lifting.
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?
States a specific verb+resource: search estimate records in QuickBooks Online. It's clearly distinguished from get_estimate implicitly by being a search, though it doesn't explicitly name the alternative.
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?
Adds a concrete usage tip: results are full records so no get is needed after, and you can read several known Ids in one search with Id IN. This gives practical usage context but doesn't explain when to prefer this over get_estimate or other search tools explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_exchange_ratessearch exchange ratesARead-onlyInspect
Search exchange rate records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Filter on SourceCurrencyCode and AsOfDate (YYYY-MM-DD) to read one rate. Omit to return the first page of all exchange_rate records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and destructiveHint already covering the safety profile, the description still adds real value: it discloses that returns are full records including SyncToken, and that Id IN allows multi-record reads in one call. It omits pagination/truncation behavior, but that is documented in the criteria schema.
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 short sentences, front-loaded with the purpose and immediately followed by the two facts that change how an agent calls it. No filler.
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?
There is no output schema, and the description compensates by stating the shape of results (full records with SyncToken). Combined with a fully documented criteria schema and read-only annotations, an agent has nearly everything needed; only pagination limits live solely in the 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% and the criteria field description is unusually detailed (operators, AND-only filtering, field names, 1000-record page cap). The description's only added parameter guidance is the 'Id IN' batching pattern, which the schema already lists as a supported operator, so the baseline of 3 applies.
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 names a specific verb and resource ('Search exchange rate records in QuickBooks Online'), which is enough to separate it from update_exchange_rate and delete-style siblings. It stops short of explicitly distinguishing itself from get_exchange_rate, though the 'no get is needed after' line implies the split.
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?
Usage is implied rather than stated: full records mean a follow-up get is unnecessary, and Id IN lets you batch known Ids. There is no explicit statement of when to prefer this over get_exchange_rate, and no exclusions, so guidance is only partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_invoicessearch invoicesARead-onlyInspect
Search invoice records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all invoice records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond readOnlyHint=true/destructiveHint=false by disclosing a return-behavior detail: results carry SyncToken and are full records, so no follow-up get is needed. It also exposes the Id IN bulk-read pattern. It does not cover pagination/limits in the description, but those are handled thoroughly in the schema.
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 filler. The resource is stated first and the high-value behavioral note (full records, SyncToken, no get needed) is 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?
The description covers the essential usage scenario and return-completeness for a search tool, and the schema fully covers parameter semantics and pagination. No output schema exists, but the description states results are full records with SyncToken, which is the key return-value detail an agent needs.
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% and the criteria description already details operators, ANDing, 1000-record page limits, and offset/limit. The description only restates the Id IN pattern, adding marginal value. 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?
States a specific verb ('Search') and resource ('invoice records') with the target system ('QuickBooks Online'). It distinguishes itself from get_invoice by explaining search returns full records, and from get_open_invoices by implying arbitrary criteria.
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?
Explains when to use search over get ('no get is needed after') and gives a concrete pattern ('read several known Ids in one search with Id IN'). However, it doesn't name sibling alternatives like get_invoice or get_open_invoices explicitly, nor does it state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_itemssearch itemsARead-onlyInspect
Search item records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Inactive records are left out unless Active is filtered explicitly (Active: false, or Active IN (true, false) for both). Omit to return the first page of all item records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: results include SyncToken (enabling writes without a prior get) and batch reading of known Ids is supported. It stops short of describing the truncated-page behavior, which lives only in the schema.
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 dense sentences, no padding, with the core purpose front-loaded and the two practical hints (full records/SyncToken, Id IN) immediately following. Every clause carries 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?
There is no output schema, so the description correctly notes the return shape is full records with SyncToken, and pagination/limits are covered in the schema. Complete enough for an agent to call it correctly; only the truncation behavior is left solely to the 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 description coverage is 100%, and the criteria parameter is exhaustively documented there (operators, AND-only semantics, allowed fields, pagination, inactive handling). The description adds only the Id IN tip, which the schema already lists as a supported operator, so the baseline 3 applies.
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?
States a specific verb (search) and resource (item records) scoped to QuickBooks Online, which an agent can distinguish from the many sibling search_* tools. It gestures at the relationship with get_item via 'no get is needed after', but never names get_item explicitly, so differentiation is implied rather than stated.
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?
Gives actionable context: results are full records so a follow-up get is unnecessary, and multiple known Ids can be read in one call using Id IN. It does not spell out when to prefer this over get_item or how it differs from other item-related reads, but the practical routing guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_journal_entriessearch journal entriesARead-onlyInspect
Search journal entry records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all journal_entry records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds one genuinely useful behavioral fact -- the returned records include SyncToken so no follow-up get is required -- but says nothing about pagination, truncation, or response shape. Modest added value against an already-covered annotation set.
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, zero filler, and the purpose is front-loaded ahead of the practical tip. Every clause 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?
For a read-only search tool with a rich, 100%-covered schema and annotations carrying the safety profile, the description covers what it needs to: scope, result completeness, and one batching pattern. It omits alternative routing (get_journal_report, get_journal_entry) and any pagination reminder, but the schema already handles the latter.
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%: `company` and `criteria` are both documented in detail, including operators, ANDed filters, case-sensitivity, and the 1000-record page limit. The description only adds the `Id IN` tip, which is already implied by the schema's operator list. Baseline 3 is appropriate when the schema does the heavy lifting.
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?
States a specific verb (search) and resource (journal entry records in QuickBooks Online), and differentiates from the sibling get_journal_entry by noting results are full records with SyncToken so no follow-up get is needed. An agent can pick between search and get without opening either schema.
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?
Gives concrete usage context: read several known Ids in one call with `Id IN`, which tells the agent when a search beats multiple gets. It stops short of stating exclusions (e.g., when to prefer get_journal_report or get_journal_entry for a single Id), so it is clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_payment_methodssearch payment methodsARead-onlyInspect
Search payment method records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Inactive records are left out unless Active is filtered explicitly (Active: false, or Active IN (true, false) for both). Omit to return the first page of all payment_method records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: results are full records carrying SyncToken, so no follow-up get is required. Pagination/truncation behavior exists but lives in the schema, not the description.
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 dense sentences with no filler; the core purpose is front-loaded and the SyncToken/Id IN hints follow. It is efficient, though the second clause is telegraphic and packs two ideas together.
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 two-parameter, zero-required search tool with a fully documented schema and clear safety annotations, the description is largely complete. The main omission is explicit routing to the get_payment_method alternative, but the return-value and no-follow-up behavior is covered.
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 criteria semantics (operators, IN, limit/offset, case sensitivity) are already fully documented in the schema. The description adds a small hint about Id IN usage but nothing substantive beyond what the schema provides, matching the 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?
States a specific verb and resource ('Search payment method records in QuickBooks Online'), so the purpose is unambiguous. It partially differentiates from the get_payment_method sibling by noting that results are full records with SyncToken, but it doesn't name or contrast with that sibling directly, so it falls short of a 5.
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 second sentence implies usage patterns ('no get is needed after' and reading multiple known Ids via Id IN), which hints at when this tool is preferable. However, there is no explicit when-to-use/when-not guidance or named alternative (e.g., get_payment_method), leaving it implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_paymentssearch paymentsARead-onlyInspect
Search payment records in QuickBooks Online. An accounting record of a customer payment already received. Payment processing is not supported; ProcessPayment must be omitted or false. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all payment records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds value beyond that: results come back as full records including SyncToken (so no follow-up get is required), and the ProcessPayment flag must be omitted or false. It does not mention paging limits, though the schema does.
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 compact sentences, front-loaded with the verb+resource and ending with the highest-value operational hints. The sentence "An accounting record of a customer payment already received" is a fragment, but it earns its place by defining the resource boundary.
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 two-parameter, fully documented search tool with no output schema, the description covers what an agent needs: what is returned (full records with SyncToken), what is excluded, and how to fetch multiple known records at once. Paging/truncation behavior lives in the schema rather than the description, which is acceptable here.
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 a baseline of 3 would be defensible. The description still adds a concrete usage pattern not spelled out in the schema — resolving multiple known Ids with "Id IN" in a single search — and clarifies that the record type excludes payment processing, which shapes what criteria values are meaningful.
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?
States a specific verb and resource ("Search payment records in QuickBooks Online") and immediately narrows the resource to "an accounting record of a customer payment already received," which separates it from create_payment/send_payment/void_payment. The line "Payment processing is not supported" plus "no get is needed after" explicitly contrasts it with the processing and get_payment 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?
Gives real usage context: it tells the agent that a follow-up get is unnecessary and that several known Ids can be resolved in one call via "Id IN." It stops short of an explicit when-to-use-this-vs-search_invoices/search_bill_payments rule, but the search-vs-get distinction is clear enough to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_purchase_orderssearch purchase ordersARead-onlyInspect
Search purchase order records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all purchase_order records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral value by disclosing that returned records are complete (with SyncToken), removing an anticipated follow-up call.
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 tightly packed sentences; the resource is front-loaded and the two useful behaviors (full records, batch Id reads) follow immediately. No filler.
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?
With no output schema, the description usefully indicates what comes back (full purchase order records with SyncToken). Pagination and filtering limits live in the schema, so the summary is adequate, though it could hint at the 1000-record page limit.
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% and the criteria/operators guidance is already fully documented there. The description's 'Id IN' mention merely echoes the schema's IN operator, adding no syntax or semantics beyond it, so baseline 3 applies.
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?
States a specific verb (Search) and resource (purchase order records in QuickBooks Online), and separates itself from get_purchase_order by noting results already carry SyncToken so no follow-up get is needed. It does not name the sibling directly, but the differentiation is inferable.
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?
Gives actionable context: use it for batch reads of known Ids via 'Id IN', and don't chain a get afterwards. It lacks explicit exclusions (e.g. when to prefer get_purchase_order for a single record), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_purchasessearch purchasesARead-onlyInspect
Search purchase records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all purchase records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds genuinely useful behavior: returned records are full records including SyncToken, and multi-Id batch reads via IN are supported. It doesn't mention the 1000-record cap in the description, though that lives in the criteria schema.
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 short sentences, both front-loaded with the essential fact first (what it searches, then what comes back and how to batch). No filler or repetition of schema 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?
With no output schema, the description carries the burden of describing returns and does so (full records with SyncToken). The criteria parameter is exhaustively documented in-schema. Only missing element is any note about result-size limits, which is covered inside the criteria description rather than the top-level text.
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 criteria parameter's operators, AND semantics, allowed top-level fields, and pagination are already fully documented in the schema. The description only adds the 'Id IN' usage pattern, which is marginally beyond that. 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?
States a specific verb and resource ('Search purchase records in QuickBooks Online'), so the agent knows exactly what domain is being queried. It implicitly contrasts with get_purchase by noting no follow-up get is needed, but it never names sibling search tools (e.g. search_purchase_orders, list_purchases_without_payee) that could be confused with it.
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?
Gives two concrete usage patterns: results are self-sufficient so a follow-up get is unnecessary, and several known Ids can be read in one call via 'Id IN'. That effectively steers the agent away from get_purchase, but there is no explicit when-not guidance versus other purchase-related retrievers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recurring_transactionssearch recurring transactionsARead-onlyInspect
Search recurring transaction records in QuickBooks Online. A template QuickBooks uses to create a transaction on a schedule, or on request. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Each result wraps the template's transaction under its type (Invoice, Bill, ...) with RecurringInfo. Omit to return the first page of all recurring_transaction records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds value beyond that by disclosing the return shape (full records including SyncToken, meaning no follow-up get is required), which is genuine behavioral context for planning a workflow.
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 tight sentences, front-loaded with the verb and resource, then the domain clarification, then the practical return/batching advice. No sentence is wasted and nothing is buried.
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?
With no output schema, the description still communicates what comes back (full records with SyncToken) and how to batch reads, while the schema carries the complex filtering and pagination rules. It is complete enough to invoke correctly, with only minor room for stating pagination behavior in prose.
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% and the criteria parameter is exhaustively documented there (operators, ANDed filters, page limits, allowed fields). The description adds only the Id IN batching hint, which is already implied by the schema's IN operator, so the baseline 3 for high schema coverage applies.
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?
States a specific verb and resource ("Search recurring transaction records in QuickBooks Online") and explains the domain concept (a template QBO uses to create a transaction on a schedule). It implicitly distinguishes itself from get_recurring_transaction by noting that full records with SyncToken come back, so no get is needed, though it never names sibling tools explicitly.
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 a clear usage pattern ("read several known Ids in one search with Id IN") and an exclusion ("no get is needed after"), effectively routing the agent away from per-record get calls. It stops short of a full when/when-not treatment against create/delete siblings, but the guidance is concrete rather than merely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_refund_receiptssearch refund receiptsARead-onlyInspect
Search refund receipt records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all refund_receipt records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: results are complete records including SyncToken, so no follow-up get call is required, and multiple known Ids can be retrieved in one IN-filtered call.
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 short sentences, zero filler, with the highest-value fact (no get needed after search) placed right after the purpose statement. Nothing is redundant.
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?
With no output schema, the description rightly tells the agent what comes back (full records with SyncToken) and how to batch-read known Ids. It is essentially complete for a paginated search tool whose filtering grammar lives entirely in the schema, though it could say more about result ordering or the pagination workflow.
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 criteria grammar, AND-semantics, case-sensitivity and 1000-record pagination/truncation limits are already fully documented in the schema. The description's only added semantic is the 'Id IN' pattern, which is helpful but marginal against the baseline.
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?
It states a specific verb and resource ('Search refund receipt records in QuickBooks Online'), so the agent immediately knows this is a read/query tool for that one entity type. It implicitly separates itself from get_refund_receipt by noting results are already full records, but it never names the sibling outright, so it falls short of the clearest possible differentiation.
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 one concrete usage pattern ('read several known Ids in one search with Id IN') and implies that get is unnecessary after a search. It offers no explicit when-to-use guidance against get_refund_receipt or other search_* tools, and no when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_reimburse_chargessearch reimburse chargesARead-onlyInspect
Search reimburse charge records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all reimburse_charge records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely useful behavior beyond that: results are complete records including SyncToken, so an agent can skip a subsequent get call. It does not mention ordering guarantees or truncation behavior (that lives in the schema), keeping it short of a 5.
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 filler, and the most important fact (results are complete, no get needed) is front-loaded ahead of the batch-read idiom. Every clause carries 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?
There is no output schema, and the description compensates by stating what comes back (full records with SyncToken). Annotations cover safety, the schema covers criteria and the 1000-record page limit, so an agent has everything needed to call this 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 the baseline is 3 and the criteria syntax, operators, and pagination rules are already documented there. The description still adds meaning by giving the 'Id IN' idiom for batch-fetching known records, which is a practical semantic the schema does not spell out.
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 first sentence gives a specific verb (Search) and resource (reimburse charge records) scoped to QuickBooks Online, which distinguishes it from the many get_/create_ siblings. However it never names a sibling it should be preferred over or explicitly contrasts with search_transactions-type tools, so differentiation is by naming convention 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?
It supplies a concrete usage rule ('read several known Ids in one search with Id IN') and explains that a follow-up get is unnecessary because results are full records. That is clear context for when this tool suffices, but there is no explicit when-not or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_sales_receiptssearch sales receiptsARead-onlyInspect
Search sales receipt records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all sales_receipt records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint/openWorldHint/destructiveHint already declare the safety profile, so the bar is lower. The description still adds real behavioral value by disclosing that results are full records carrying SyncToken, meaning no follow-up fetch is required — a non-obvious trait beyond the annotations or schema.
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 tight sentences that lead with the core action and follow with the highest-value behavioral fact (full records, no get needed) and a usage tip. No filler sentences.
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 exists, yet the description notes results are full records with SyncToken, covering the main return concern. The criteria param carries extensive pagination/filter documentation in the schema, so the description is largely complete, though it never restates the 1000-record/offset paging limit that an agent will hit.
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 goes slightly beyond it by showing a concrete criteria pattern ('Id IN' for batch reads) and explaining the record completeness that criteria results return, which a reader would not infer purely from the generic property 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?
States a specific verb and resource ('Search sales receipt records in QuickBooks Online'), which cleanly separates it from search_invoices, search_refund_receipts and the other search_* siblings by resource. It does not explicitly name the sibling it replaces for single-record fetches, but the scope is unambiguous.
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 get is needed after' implicitly steers the agent away from get_sales_receipt, and 'read several known Ids in one search with Id IN' gives one concrete use case. However, there is no explicit when-to-use vs when-not statement or named alternative, so guidance is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tax_agenciessearch tax agenciesARead-onlyInspect
Search tax agency records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all tax_agency records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds a genuine behavioral trait beyond the structured data: returns are full records including SyncToken, so no subsequent get is required. Pagination/truncation details live in the schema, not the description.
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 tight sentences, front-loaded with the core action and followed immediately by the highest-value operational hint (no follow-up get needed). No filler.
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 exists, so the description must carry return-value context, and it does (full records with SyncToken). Pagination and filter constraints are fully covered by the schema. Nearly complete for a read-only search 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?
Schema description coverage is 100%, so baseline is 3. The description reinforces the 'Id IN' pattern, which the schema already documents via the IN operator, so it adds only marginal meaning beyond the structured fields.
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?
States a specific verb+resource ('Search tax agency records in QuickBooks Online') and implicitly contrasts with get_tax_agency by noting results are full records so 'no get is needed after'. Clear enough to distinguish from the search_* family, though it doesn't name the sibling tool explicitly.
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?
Gives actionable usage guidance: use this instead of a follow-up get, and use 'Id IN' to batch-read several known Ids in one call. No exclusions are stated, but the when-to-use context relative to get is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tax_codessearch tax codesARead-onlyInspect
Search tax code records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all tax_code records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), so the bar is lower. The description adds genuinely useful behavioral context beyond them: results include SyncToken, meaning an update can follow without a refetch. Pagination/truncation limits, however, live in the schema's criteria description rather than here.
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 short sentences, front-loaded with purpose and followed by the highest-value behavioral fact. No filler, no restatement of the title.
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 two-parameter read tool with no output schema, the description plus rich schema coverage is nearly sufficient: it explains the return shape (full records with SyncToken) and a batch-read pattern. It does not restate pagination, but the schema does, so this 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?
Schema description coverage is 100% and the criteria parameter is documented in exhaustive detail in the schema itself, so the baseline is 3. The description only adds the 'Id IN' usage pattern and does not otherwise extend parameter meaning beyond what the 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?
States a specific verb ('Search') and resource ('tax code records') and scopes it to QuickBooks Online. It also pre-empts confusion with the sibling get_tax_code by stating results are full records so 'no get is needed after', which lets an agent route correctly without opening a schema.
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?
Gives a concrete retrieval pattern ('read several known Ids in one search with Id IN') and implicitly steers away from get_tax_code by noting full records are returned. It lacks an explicit when-not or a named alternative for the single-record case, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tax_paymentssearch tax paymentsARead-onlyInspect
Search tax payment records in QuickBooks Online. Sales tax (GST/HST, QST, VAT) payments and refunds recorded against filed returns; AU, CA and UK companies only. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all tax_payment records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description still adds value beyond them: that returns are full records including SyncToken (eliminating follow-up reads) and that the tool is region-restricted to AU/CA/UK entities.
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 dense sentences with no filler, and the most decision-relevant information (what it searches, region restriction) is front-loaded. Every clause carries information an agent needs.
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?
With no output schema, the description compensates by describing the shape of results (full records with SyncToken) and the region constraint, while pagination and criteria mechanics live in the schema. Adequate for a two-parameter read tool, though the returned record structure itself is only loosely characterized.
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% and the criteria parameter is exhaustively documented in the schema, so the baseline is 3. The description adds a genuinely useful usage idiom for that parameter (querying several known Ids in a single call with Id IN) that the schema only implies via the operator list.
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?
States a specific verb+resource (search tax payment records), defines scope precisely (sales tax payments/refunds recorded against filed returns), and adds a hard constraint (AU, CA and UK companies only). This clearly separates it from siblings like search_tax_agencies, search_tax_codes, search_tax_rates and get_tax_payment.
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?
Gives concrete routing guidance: results are full records with SyncToken so a follow-up get is unnecessary, and multiple known Ids can be read in one call via Id IN. It also states an eligibility condition (AU/CA/UK only). It stops short of explicitly naming get_tax_payment as the alternative for single-record retrieval, but the implication is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tax_ratessearch tax ratesARead-onlyInspect
Search tax rate records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all tax_rate records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world). The description adds value on top of them by disclosing the return shape (full records including SyncToken), which matters because there is no output schema, and by implying a batch-read capability. Pagination behavior is left to the schema.
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, zero waste, front-loaded with the purpose. The batching/return-shape tips are compact and each 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?
With no output schema, the description usefully signals what a result contains (full records with SyncToken). Combined with the exhaustive criteria schema, an agent has enough to call it correctly; only pagination specifics are absent, and those live in the 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 description coverage is 100% and the criteria description is exceptionally rich (operators, AND-only semantics, case sensitivity, field limits, 1000-record paging), so the schema carries the burden. The description only adds the "Id IN" batching hint, which is a marginal supplement to an already complete 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?
States a specific verb and resource ("Search tax rate records in QuickBooks Online") and implicitly distinguishes itself from get_tax_rate by noting results are full records with SyncToken. It doesn't explicitly name the sibling tools it competes with, so it falls short of a 5.
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?
Gives concrete usage direction: prefer this over a follow-up get because records are complete, and batch known Ids with "Id IN". It stops short of stating when-not-to-use or explicitly naming alternatives like get_tax_rate, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_termssearch termsARead-onlyInspect
Search term records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Inactive records are left out unless Active is filtered explicitly (Active: false, or Active IN (true, false) for both). Omit to return the first page of all term records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior: results come back as complete records including SyncToken, so no follow-up fetch is required, and batch reads via Id IN are supported.
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 tight sentences, purpose front-loaded, zero filler. Every clause carries information an agent can act on.
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?
With no output schema, the description helpfully states what comes back (full records with SyncToken) and how to batch-read. Pagination and truncation behavior live in the schema, which is acceptable, though a brief nod to paging in the description would have made it fully self-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 description coverage is 100% and the criteria parameter is documented exhaustively (operators, AND-ing, case sensitivity, pagination, inactive-record handling). The description contributes only a single usage idiom ('Id IN'), so the 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?
States a specific verb+resource ('Search term records in QuickBooks Online'), which cleanly separates it from the create_term/update_term/get_term siblings by naming the Term resource. It does not explicitly contrast itself with get_term, but the resource scope is unambiguous.
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 implies a usage pattern ('read several known Ids in one search with Id IN') and hints that a follow-up get is unnecessary, which is useful context. However, it never explicitly says when to prefer search_terms over get_term, nor any exclusions or prerequisites, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_time_activitiessearch time activitiesBRead-onlyInspect
Search time activity records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all time_activity records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds that results include SyncToken (useful for updates) and that Id IN can batch-read, which is beyond annotations. However, it doesn't disclose pagination behavior beyond what's in the schema, truncation, or rate limits.
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 no wasted words. The first states purpose and return completeness; the second gives a usage hint. It is front-loaded and efficient, though could be slightly more 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?
For a search tool with no output schema but annotations covering safety, the description is adequate but incomplete. It conveys return completeness and a batching tip, but omits pagination limits, truncation behavior, and explicit differentiation from get_time_activity, leaving gaps an agent might need.
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 already documents both parameters in detail, including criteria syntax, operators, and limitations. The description adds no additional parameter meaning beyond the schema 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?
States a specific verb and resource (search time activity records) in QuickBooks Online, which clearly distinguishes it from get_time_activity, create_time_activity, update_time_activity, and delete_time_activity. However, it doesn't explain what a 'time activity' record actually is beyond the name.
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 that results are full records so no get is needed and suggests using Id IN for reading multiple known Ids, which implies when to use search vs get. But it doesn't explicitly say when to use this tool versus get_time_activity or list alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_transferssearch transfersARead-onlyInspect
Search transfer records in QuickBooks Online. An accounting entry recording a transfer between accounts. It does not move money between bank accounts. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all transfer records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, destructive=false, openWorld=false, so the safety profile is covered. The description adds useful behavior beyond that: results are full records including SyncToken, removing the need for a subsequent read, plus the semantic clarification of what a transfer is.
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?
Front-loaded with purpose, then a short domain clarification, then a compact usage/behavior note. Every sentence contributes; only the transfer definition is arguably padding, but it aids disambiguation.
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 exists, but the description covers the return shape (full records with SyncToken) and annotations cover the safety profile, while the criteria schema handles filtering and pagination. Nothing essential for correct invocation is missing.
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%, and the criteria schema already documents operators, AND semantics, case-sensitivity, pagination limits and offset handling. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.
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?
States a specific verb+resource ("Search transfer records in QuickBooks Online") and disambiguates from the get sibling by noting results are full records with SyncToken. It adds a domain clarification (accounting entry, not a bank money movement), though it does not name get_transfer explicitly.
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?
Gives concrete routing advice: no follow-up get is needed because records are complete, and several known Ids can be read in one call via Id IN. This supplies clear context for when to reach for search over get, but no explicit when-not or exclusion cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vendor_creditssearch vendor creditsARead-onlyInspect
Search vendor credit records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Omit to return the first page of all vendor_credit records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds a genuinely useful behavioral fact (results are full records including SyncToken, so no follow-up get is required), but omits pagination/truncation behavior, which the schema description carries instead.
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 tight sentences, front-loaded with what the tool returns and then the practical consequence (no separate get, batch by Id). No filler.
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?
There is no output schema, and the description partially compensates by saying results are full records with SyncToken. Combined with the fully documented criteria parameter, an agent has enough to call it correctly, though return shape and paging are only partly addressed.
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 criteria syntax and operators are already fully documented by the schema. The mention of "Id IN" only echoes what the schema already states about the IN operator, so the baseline 3 applies.
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?
States a specific verb (Search) and resource (vendor credit records) scoped to QuickBooks Online, and implicitly separates itself from get_vendor_credit by noting that full records with SyncToken come back so no follow-up get is needed. It never names the sibling tool directly, which keeps it just short of a 5.
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?
Gives one concrete usage pattern ("read several known Ids in one search with Id IN") but does not say when to prefer this over search_vendors/get_vendor_credit or when it is the wrong choice. The batch-read hint is useful context, but the when-not guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vendorssearch vendorsARead-onlyInspect
Search vendor records in QuickBooks Online. Results are full records with SyncToken, so no get is needed after; read several known Ids in one search with Id IN.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| criteria | No | Criteria accepts: an array of {field, value, operator} objects (operators: =, <, >, <=, >=, LIKE with % wildcards, IN), a simple {Field: value} object, or {criteria: [...], asc|desc: "Field", limit, offset, count}. Filters are ANDed; QuickBooks has no OR, cannot filter on Line fields, and only filters top-level fields (TxnDate, DocNumber, CustomerRef, VendorRef, Balance, TotalAmt, DueDate, MetaData.LastUpdatedTime, ...). Field names and values are case-sensitive as QuickBooks stores them. Government identifiers, birth dates and card-processing details are not available through these tools. One call returns one page of at most 1000 records, and a large page is truncated to fit the answer: narrow with filters or walk it with limit and offset rather than asking for everything. Inactive records are left out unless Active is filtered explicitly (Active: false, or Active IN (true, false) for both). Omit to return the first page of all vendor records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds useful behavioral context that the returned records are complete (include SyncToken), but says nothing about page/truncation behavior or latency, which live only in the schema.
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 tight clauses, front-loaded with the core action and followed by the practical payoff (no follow-up get) and the batch-read tip. No filler, though the second clause is slightly compressed in phrasing.
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 read-only search tool with no output schema and full schema coverage, the description supplies the key missing context an agent needs: that results are complete records, so an agent won't waste a call on get_vendor. Return-shape and paging details are adequately handled by the 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 description coverage is 100%, so the criteria operators, paging and inactive-record handling are fully documented in the schema. The description's 'Id IN' hint merely echoes an operator already defined there, so 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?
States a specific verb+resource ('Search vendor records in QuickBooks Online') and implicitly distinguishes itself from the many sibling get_/search_ tools by noting results are full records so 'no get is needed after.' The differentiation is present but indirect rather than naming get_vendor explicitly.
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 hints at when to prefer this over a get ('no get is needed after') and shows a batch-read pattern ('read several known Ids in one search with Id IN'), but it never names an alternative tool or states a clear when-not. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_credit_memosend credit memoADestructiveInspect
Email a credit memo to the customer as a PDF from QuickBooks Online, and mark it sent. QuickBooks sends the email asynchronously a few seconds after it is approved. The record must still exist when delivery occurs; deletion or voiding can prevent delivery. Cannot be unsent, so the email waits for the user's approval in Caribooks (Approvals page, https://caribooks.com/portal/review) and goes out only once they approve it there; tell them so.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the CreditMemo to email. | |
| No | Recipient address. Defaults to the address on the QuickBooks record. | ||
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed sending this email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description reveals critical behaviors: sending is asynchronous, delivery requires user approval in Caribooks, the memo cannot be unsent, and the record must still exist at delivery time. This is exactly the kind of behavioral context an agent needs and goes well beyond the structured annotation hints.
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, each earning its place: the first states the primary action, the second explains asynchronous delivery and record-liveness constraints, and the third discloses irreversibility and the required user approval step. Critical warnings are front-loaded and the language is efficient.
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 send action with no output schema, the description covers everything an agent needs to know: what happens, when it happens, what can prevent it, and what the user must do. Combined with a fully described schema, this is a complete operational picture.
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 for all four parameters, so the schema already carries the semantic weight. The description does not add parameter-level detail, but it does reinforce the need for explicit approval, which complements the 'confirm' parameter's 'must be true' requirement.
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 states a specific verb ('Email'), a specific resource ('a credit memo ... as a PDF from QuickBooks Online'), and a clear outcome ('mark it sent'). This clearly distinguishes it from sibling send_* tools that target other document types like invoices, estimates, or sales receipts.
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 makes clear that this tool is for emailing credit memos and that it is subject to an approval workflow, which is essential context for deciding when to invoke it. It does not explicitly name sibling alternatives or state conditions to avoid using it, but the resource-specific purpose is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_estimatesend estimateADestructiveInspect
Email an estimate to the customer as a PDF from QuickBooks Online, and mark it sent. QuickBooks sends the email asynchronously a few seconds after it is approved. The record must still exist when delivery occurs; deletion or voiding can prevent delivery. Cannot be unsent, so the email waits for the user's approval in Caribooks (Approvals page, https://caribooks.com/portal/review) and goes out only once they approve it there; tell them so.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Estimate to email. | |
| No | Recipient address. Defaults to the address on the QuickBooks record. | ||
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed sending this email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false, openWorldHint=true, and destructiveHint=true. The description adds crucial behavior beyond these: asynchronous delivery, 'mark it sent', record-must-exist caveat, deletion/voiding risk, and approval delay. It thoroughly explains what happens when the tool is invoked.
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?
Every sentence carries essential information: the core action, async behavior, delivery prerequisites, and the user-approval requirement. The structure front-loads the main purpose and then layers critical caveats without waste.
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 mutating send operation with no output schema, the description covers the essential lifecycle, approval flow, and failure conditions. It does not describe return values, but the most important operational facts are present.
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 already documents id, email, company, and confirm. The description does not add parameter-specific detail beyond the schema, but no compensation is needed because the schema is complete.
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 opens with a specific verb and resource: 'Email an estimate to the customer as a PDF from QuickBooks Online, and mark it sent.' This clearly differentiates it from sibling send_* tools by naming the exact record type (estimate) and the system (QuickBooks Online).
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 clear operational context: sending is async, requires user approval in Caribooks, and cannot be undone. It tells the agent to inform the user of the approval step. It does not explicitly name alternative tools like send_invoice, but the resource is unambiguous enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_invoicesend invoiceADestructiveInspect
Email an invoice to the customer as a PDF from QuickBooks Online, and mark it sent. QuickBooks sends the email asynchronously a few seconds after it is approved. The record must still exist when delivery occurs; deletion or voiding can prevent delivery. Cannot be unsent, so the email waits for the user's approval in Caribooks (Approvals page, https://caribooks.com/portal/review) and goes out only once they approve it there; tell them so.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Invoice to email. | |
| No | Recipient address. Defaults to the address on the QuickBooks record. | ||
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed sending this email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and non-read-only behavior, so the bar for adding context is lower, but the description goes well beyond annotations by disclosing asynchronous sending, irreversibility, approval dependency, and failure conditions such as deletion or voiding preventing delivery. This is highly transparent about real-world 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 front-loaded with the core action, then gives essential caveats in a sensible order. Every sentence provides necessary behavioral information, including the exact approval URL, without padding.
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 mutating send operation with no output schema, the description covers all critical invocation-time knowledge: the action, async delivery, irreversibility, user approval, and deletion/voiding risks. An agent has enough context to invoke this correctly and inform the user appropriately.
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 for all four parameters, so the schema carries the parameter documentation burden. The description adds general workflow context but does not add new meaning to individual parameters beyond what the 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 states a specific verb and resource: email an invoice as a PDF from QuickBooks Online and mark it sent. This clearly distinguishes it from sibling send_estimate, send_purchase_order, and other send_* 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 gives clear context: the email is sent asynchronously, requires user approval in Caribooks, cannot be unsent, and depends on the record still existing at delivery time. It does not explicitly name alternatives, but the scope is clear enough for an agent to know when to invoke this tool versus other send_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_paymentEmail a payment receiptADestructiveInspect
Email the customer a receipt for a payment received, as a PDF from QuickBooks Online. It moves no money. QuickBooks sends the email asynchronously a few seconds after it is approved. The record must still exist when delivery occurs; deletion or voiding can prevent delivery. Cannot be unsent, so the email waits for the user's approval in Caribooks (Approvals page, https://caribooks.com/portal/review) and goes out only once they approve it there; tell them so.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Payment to email. | |
| No | Recipient address. Defaults to the address on the QuickBooks record. | ||
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed sending this email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: clarifies "It moves no money" (disambiguating the destructiveHint), documents asynchronous delivery a few seconds after approval, warns that deletion/voiding of the record can block delivery, and explains that the send is irreversible and therefore gated behind user approval. This is exactly the behavioral context annotations cannot convey.
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?
Front-loaded with purpose, then layered with the behavior an agent must know. Every sentence carries a distinct fact (no money moved, async timing, record-must-exist, irreversible/approval-gated) with no filler.
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 no-output-schema mutation tool, the description covers timing, irreversibility, preconditions, and the approval gate thoroughly. It does not say what the call itself returns or how the agent learns the email was actually delivered, which would be the last missing piece for a mutation whose effect is deferred.
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 all four parameters (id, email, company, confirm) are already documented in the schema. The description adds no additional parameter meaning (no format hints, no default behavior for email/company), so the baseline 3 applies.
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?
States a specific verb and resource: "Email the customer a receipt for a payment received, as a PDF from QuickBooks Online." The resource (a Payment) cleanly separates it from the other send_* siblings (send_invoice, send_estimate, send_credit_memo), so an agent can pick it without opening any schema.
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?
Gives real usage context and preconditions: the email is only dispatched after the user approves it in Caribooks, and the agent is told to inform the user of that. It does not, however, name an alternative or state when *not* to use it (e.g., no discussion of the other send_* tools for non-payment documents).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_purchase_ordersend purchase orderADestructiveInspect
Email a purchase order to the vendor as a PDF from QuickBooks Online. The email parameter is required: QuickBooks answers 'Email Address is required to send email' even when the purchase order carries a POEmail. QuickBooks sends the email asynchronously a few seconds after it is approved. The record must still exist when delivery occurs; deletion or voiding can prevent delivery. Cannot be unsent, so the email waits for the user's approval in Caribooks (Approvals page, https://caribooks.com/portal/review) and goes out only once they approve it there; tell them so.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the PurchaseOrder to email. | |
| No | Recipient address. Defaults to the address on the QuickBooks record. | ||
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed sending this email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The destructiveHint annotation is already present, but the description goes well beyond it by disclosing that the email cannot be unsent, delivery is asynchronous, the record must still exist, and user approval is required in Caribooks. It also explains a surprising QuickBooks quirk about the email parameter.
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?
Four dense, purposeful sentences with the core action front-loaded. Every additional clause carries a necessary caveat or instruction, and there is no wasted wording.
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 mutating asynchronous operation with no output schema, this is remarkably complete: it covers required email behavior, approval dependency, delivery timing, irreversibility, and a failure mode. An agent knows what to do, what to warn the user about, and what can go wrong.
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 important meaning for the `email` parameter: it is effectively required even though the schema marks it optional with a default, and it explains why. This genuinely helps an agent avoid a known failure.
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?
Opens with a specific action ('Email a purchase order to the vendor as a PDF') and names the exact resource, making it immediately distinguishable from send_invoice, send_estimate, and other send_* siblings. The delivery mechanism and document type are unambiguous.
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 clear context for when this tool is appropriate: emailing a purchase order. It also tells the agent what to convey to the user about the approval flow. It does not explicitly name alternatives or exclusion conditions, but no other sibling serves this exact purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_refund_receiptsend refund receiptADestructiveInspect
Email a refund receipt to the customer as a PDF from QuickBooks Online, and mark it sent. QuickBooks sends the email asynchronously a few seconds after it is approved. The record must still exist when delivery occurs; deletion or voiding can prevent delivery. Cannot be unsent, so the email waits for the user's approval in Caribooks (Approvals page, https://caribooks.com/portal/review) and goes out only once they approve it there; tell them so.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the RefundReceipt to email. | |
| No | Recipient address. Defaults to the address on the QuickBooks record. | ||
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed sending this email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral context beyond the annotations: asynchronous sending after approval, irreversible nature, dependency on record existence, and the explicit instruction to tell the user. These are critical for safe invocation and are not derivable from readOnlyHint/destructiveHint alone.
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?
Four sentences with the core action first, followed by important caveats in order of relevance. Some minor redundancy between 'Cannot be unsent' and the approval explanation, but overall every sentence contributes.
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 the major behavioral constraints: approval requirement, asynchronous email, non-reversibility, and record existence. Includes a link to the approvals page. No output schema exists, but for a fire-and-forget email action, return value details are not essential.
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 description doesn't add much parameter-specific meaning. It mentions 'to the customer' but doesn't elaborate on the email or company selection parameters. 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?
States a specific verb (email), resource (refund receipt), format (PDF), and system (QuickBooks Online). This clearly distinguishes it from sibling send_* tools, which target different document 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?
Explains that the email requires user approval in Caribooks, cannot be unsent, and that the record must exist at delivery. This gives clear preconditions and warns the agent to inform the user. It doesn't explicitly name alternatives, but the resource-specific name makes the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_sales_receiptsend sales receiptADestructiveInspect
Email a sales receipt to the customer as a PDF from QuickBooks Online, and mark it sent. QuickBooks sends the email asynchronously a few seconds after it is approved. The record must still exist when delivery occurs; deletion or voiding can prevent delivery. Cannot be unsent, so the email waits for the user's approval in Caribooks (Approvals page, https://caribooks.com/portal/review) and goes out only once they approve it there; tell them so.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the SalesReceipt to email. | |
| No | Recipient address. Defaults to the address on the QuickBooks record. | ||
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed sending this email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the annotations: async delivery, approval requirement in Caribooks, inability to unsend, and the need for the record to exist at delivery time. Annotations only indicate a destructive write (readOnlyHint=false, destructiveHint=true), so this additional detail is valuable and not redundant. It does not fully explain the exact status change of 'mark it sent', but the coverage is strong.
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 appropriately structured: the first sentence gives the core purpose, followed by necessary caveats in a logical order. It is slightly longer than strictly needed, but every sentence covers an important behavioral constraint (async, record existence, irrevocability, approval), so the length is justified. The inclusion of a URL for the approval page is a practical addition.
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 no output schema and a simple parameter set, the description covers the essential behavioral context an agent needs: how to handle user confirmation, the async nature, potential delivery failure, and the requirement to inform the user about approval. It does not mention error responses or success indications, but the absence of an output schema and the simplicity of the action make the description 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 description coverage is 100%, so the baseline is 3. The description does not add new meaning to the parameters themselves; it reinforces the confirm parameter indirectly by stating the email waits for approval, but this is not a parameter-level detail. It neither harms nor significantly enhances the schema's parameter documentation.
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 first sentence states a specific action ('Email a sales receipt to the customer as a PDF from QuickBooks Online, and mark it sent') with a clear verb and resource. It also distinguishes itself from sibling 'send_' tools by explicitly naming the sales receipt, so an agent can differentiate it from send_invoice or send_estimate.
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 through its clear action statement, but it does not explicitly mention alternatives or conditions for when not to use this tool (e.g., 'use send_invoice instead for invoices'). The sibling tools are similarly named, so the agent must infer the appropriate one based on the document type, which is only implicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_accountupdate accountADestructiveInspect
Update an existing account in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Account first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. A sparse update must also repeat Name and AccountType, unchanged, or QuickBooks rejects it as missing. QuickBooks cannot delete a account; to retire one, update it with Active: false. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, and the description adds important context beyond them: it returns the saved record with a new SyncToken, and the schema notes sparse-by-default updates, line replacement, full-update behavior, and retire-via-Active:false. The top-level description itself could state the mutation and SyncToken chaining more explicitly, but it is a genuine supplement to the 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?
Two compact sentences, front-loaded with the action and the hard prerequisite, followed by the return value. No filler.
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 the mutation, the auth-like prerequisite (Id+SyncToken), and the return value for a destructive write tool with no output schema. It lacks explicit guidance on fetching the record beforehand via get_account and does not say what happens on stale SyncToken, leaving a small 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?
Schema coverage is 100% and the entity description already documents Id/SyncToken inclusion, sparse behavior, and the Name/AccountType repeat rule. The description only mentions the Id/SyncToken requirement, which the schema also states, so it adds little beyond the schema. Baseline 3 applies.
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?
States a specific verb+resource ('Update an existing account in QuickBooks Online') and distinguishes it from create_account and get_account via 'existing' and the SyncToken prerequisite. An agent can place it among the many update_* siblings without opening the schema.
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?
Explains the precondition (requires Id and current SyncToken 'as the last search or write returned it'), which implicitly tells the agent to fetch first via get_account. However, it never explicitly names get_account or search_accounts as the alternative, nor when to prefer create_account vs this tool. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_attachableupdate attachableADestructiveInspect
Update an existing attachable in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Attachable first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, and the description adds genuinely non-annotated behavior: optimistic concurrency via SyncToken, the requirement to fetch the current token, and that the recorded return carries a new token. It stops short of describing what an update destroys (the sparse-vs-full clear semantics live only in the schema), which is the main remaining behavioral gap.
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 tight sentences with zero filler; the prerequisite is front-loaded and the return-value note follows. Nothing redundant is included.
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?
With no output schema, the description usefully states what is returned (the saved record with its new SyncToken), and it covers the required concurrency token. It is only slightly short of complete because the destructive sparse/full-update consequence — flagged by destructiveHint=true — is not surfaced in the description itself.
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 already documents both the entity payload (including Id/SyncToken and sparse semantics) and the company selector. The description only restates the Id/SyncToken requirement, adding no syntax or format detail beyond structured fields — the baseline 3 for full coverage applies.
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?
States a specific verb and resource ("Update an existing attachable in QuickBooks Online") and adds the key concurrency prerequisite. It distinguishes itself from create_attachable/get_attachable by the word "existing", though it never names those siblings explicitly, so an agent must infer the routing.
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 prerequisite chain is implied well — "the current SyncToken, as the last search or write returned it" tells the agent to read the record first, which points implicitly at get_attachable/search_attachables. However, there is no explicit when-to-use vs. create_attachable or delete_attachable, and no guidance on when an update is preferable to recreating the record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_billupdate billADestructiveInspect
Update an existing bill in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Bill first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. A sparse update must also repeat VendorRef, unchanged, or QuickBooks rejects it as missing. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false, so the mutation and safety profile are already covered. The description adds useful behavioral context: it requires the current SyncToken for optimistic concurrency and returns the saved record with a new SyncToken. It does not describe sparse-update semantics, which are left to the schema.
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 no wasted words. The action is front-loaded, prerequisites are parenthetically placed, and the return behavior is stated briefly and usefully.
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 covers the essential points: it updates an existing bill, requires an Id and current SyncToken, and returns the saved record with a new SyncToken. Given the rich 100%-covered input schema for the nested entity object and annotations that already flag destructiveness, no critical information is missing, though it could mention sparse-update implications at a high level.
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 input schema already fully documents both parameters, including the nested entity fields, required Id, SyncToken, sparse update behavior, and VendorRef requirement. The description only restates the Id and SyncToken requirement, adding no semantics beyond the schema, so the baseline 3 applies.
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?
States a specific verb (update) and resource (existing bill) in a named system (QuickBooks Online). Clearly distinguishes from create_bill, get_bill, delete_bill, and update_bill_payment by resource and action.
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 the tool is used to modify an already-existing bill and notes the required Id and current SyncToken, which implies you must fetch the bill first. It does not explicitly name alternatives or when not to use it, but the prerequisite gives clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_bill_paymentupdate bill paymentADestructiveInspect
Update an existing bill payment in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the BillPayment first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations and schema already disclose destructiveHint=true and the sparse-vs-full update semantics. The description adds genuine value by stating the SyncToken/concurrency prerequisite and the return payload ('saved record with its new SyncToken'), which is real behavioral context beyond structured fields. No contradiction with destructiveHint.
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 tight sentences, front-loaded with the action and the prerequisite, followed by the return value. Nothing wasted.
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 destructive mutation with nested entity params and no output schema, the description plus rich entity schema covers prerequisites and return shape. Slightly incomplete on when to prefer void/delete over update.
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% and the entity schema description already covers sparse, full-update clearing, line replacement, and restricted fields. The description restates the Id/SyncToken requirement, adding little beyond the schema. Baseline 3 for high coverage.
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?
States a specific verb+resource ('Update an existing bill payment') and names the domain (QuickBooks Online). Distinguishable from siblings like update_payment or update_bill by the resource, though it doesn't explicitly differentiate from void_bill_payment or delete_bill_payment.
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 via the SyncToken requirement and the note to fetch the BillPayment first, but never states when to use this vs void_bill_payment or delete_bill_payment, nor any exclusions. Usage context is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_budgetupdate budgetADestructiveInspect
Update an existing budget in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Budget first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false; the description adds real context beyond them by explaining the SyncToken concurrency requirement and that the response carries a new SyncToken. It could do more on what a full update clears, but that lives in the schema.
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 the operation and the critical concurrency constraint; nothing redundant.
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 the key hazards (SyncToken staleness, sparse vs full update delegates to schema, response shape) for a single-entity mutation; no output schema exists but the description states what is returned.
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 that Id plus the current SyncToken are required and ties SyncToken freshness to the last search/write, which is operational meaning 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?
States a specific verb (Update) and resource (an existing budget) in QuickBooks Online, and distinguishes itself from create_budget/delete_budget by the word 'existing'.
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 via the SyncToken requirement and points to the read-before-write flow, but never explicitly says when to use this versus create_budget or delete_budget, nor names prerequisites beyond Id/SyncToken.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_classupdate classADestructiveInspect
Update an existing class in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Class first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. QuickBooks cannot delete a class; to retire one, update it with Active: false. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: optimistic-concurrency via SyncToken and the fact that the response carries a new SyncToken the caller must reuse. The richer mutation semantics (sparse updates, Active:false retirement, prohibited fields) live in the schema rather than the description, so no credit for those here.
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 tight sentences with the prerequisite front-loaded in parentheses and the return value last. Nothing is wasted and no sentence restates the title.
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 no output schema, the description usefully previews the return (saved record plus new SyncToken), which the agent needs for chaining. The heavy behavioral detail sits in the parameter schema, which is acceptable, though the description itself could have flagged that updates are sparse by default.
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% and the nested entity schema already documents Id, SyncToken, sparse semantics, and prohibited fields in depth. The description merely echoes the Id/SyncToken requirement, adding no format or syntax detail beyond the schema. 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?
States a specific verb and resource ("Update an existing class in QuickBooks Online"), which cleanly separates it from create_class, get_class, and search_classes in the sibling list. It never explicitly names an alternative, but the resource noun alone is unambiguous among ~170 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?
Gives a clear prerequisite: the caller needs the Id and the current SyncToken "as the last search or write returned it," which implicitly tells the agent to fetch the record first (get_class/search_classes) before updating. No explicit when-not conditions or alternative routing are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_company_currencyupdate company currencyADestructiveInspect
Update an existing company currency in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the CompanyCurrency first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so safety is covered. The description adds genuine behavioral context beyond that: the optimistic-concurrency SyncToken requirement and the fact that a new SyncToken is returned. It does not explain what the destructive path actually clears, but that detail lives in the entity schema.
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 tight sentences with the core action front-loaded and the prerequisite/return note following. The parenthetical is slightly dense but every clause carries needed information; nothing is wasted.
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?
With no output schema, the description correctly discloses the return value (saved record plus new SyncToken), and annotations cover the mutation profile. The main omission is permission/error behavior on a stale SyncToken, which is minor for a well-annotated single-entity update.
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%, and the entity field's schema text already documents Id, SyncToken, sparse semantics, and excluded fields in depth. The description restates the Id/SyncToken requirement but adds no syntax or format detail beyond the schema, so baseline 3 applies.
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?
States a specific verb and resource ('Update an existing company currency in QuickBooks Online') and the word 'existing' distinguishes it from the create/delete siblings. It does not name those siblings explicitly, but the create/update/delete/get family makes the intent unambiguous.
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 parenthetical tells the agent it needs Id and the current SyncToken 'as the last search or write returned it', which implies a preceding search/get. However, it never states when to use this versus create_company_currency or the other update tools, nor any exclusions, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_company_infoupdate company infoADestructiveInspect
Update an existing company info in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the CompanyInfo first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, openWorldHint=false), the description discloses the optimistic-concurrency contract — a stale SyncToken will fail — and states the return payload includes the new SyncToken. It does not warn about the destructive sparse-vs-full behavior, but that detail lives in the schema's entity description, so the omission is minor.
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 tightly packed sentences: the action and its prerequisite come first, the return contract second. Nothing is padded and nothing extraneous is included.
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?
With no output schema, the description correctly compensates by describing the return value (saved record plus new SyncToken), and it covers the required prerequisite. The destructive sparse-update caveat is only in the schema text, so the description is slightly thin for a destructive write, but it is largely 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%, including the rich sparse/full-update semantics and the prohibited-field list, so the schema carries the parameter burden. The description only restates the Id/SyncToken requirement already in the schema, adding no new parameter meaning.
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?
States a specific verb and resource ('Update an existing company info in QuickBooks Online'), which cleanly separates it from get_company_info and search_company_infos. It does not, however, explicitly distinguish itself from update_preferences, the other company-level write sibling, so it falls short of a 5.
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 the key prerequisite for calling it: an Id and the current SyncToken 'as the last search or write returned it,' which tells the agent to fetch first. There is no explicit when-not guidance or named alternative tool, so it stays at a 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_credit_card_payment_txnupdate credit card payment txnADestructiveInspect
Update an existing credit card payment txn in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the CreditCardPaymentTxn first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. A sparse update must also repeat Amount, BankAccountRef and CreditCardAccountRef, unchanged, or QuickBooks rejects it as missing. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, and the description adds meaningful behavior beyond them: the optimistic-concurrency requirement (Id + current SyncToken) and the fact that the saved record is returned with a new SyncToken. It does not mention error behavior on stale tokens or side effects on linked transactions.
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 tight sentences, front-loaded with the action and immediately followed by the prerequisite and return behavior. No filler.
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 two-parameter mutation with a very rich nested schema and destructive/readOnly annotations already present, the description supplies the missing pieces: the concurrency prerequisite and the return value (helpful since there is no output schema). Coverage is essentially complete, though it could note how failures on stale SyncTokens are surfaced.
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% and the entity schema already documents Id, SyncToken, sparse-update semantics, sparse:false clearing behavior, and the required Amount/BankAccountRef/CreditCardAccountRef repeats. The description only restates the Id/SyncToken requirement, adding no syntax or format detail beyond the schema, so the baseline of 3 applies.
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?
States a specific verb+resource ('Update an existing credit card payment txn in QuickBooks Online'), which cleanly separates it from create_, delete_, get_, and search_ siblings for the same entity. It does not explicitly name the alternatives, but the resource specificity makes its role unambiguous.
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 the key prerequisite: the record must exist and the caller needs Id plus the current SyncToken 'as the last search or write returned it', which tells the agent to fetch first via search_credit_card_payment_txns or a prior write. It gives no explicit when-not guidance or named alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_credit_memoupdate credit memoADestructiveInspect
Update an existing credit memo in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the CreditMemo first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds useful preconditions (Id, SyncToken) and return behavior (new SyncToken), but does not explain the sparse-update or line-replacement destruction semantics that are central to safe use.
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 tightly written sentences with no waste. The core action is front-loaded, and the parenthetical prerequisite plus return note add useful detail without bloat.
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 rich input schema covering sparse updates, line replacement, and PII restrictions, plus annotations covering destructiveness, the description is complete enough for a mutation tool. Its only gap is not restating the data-loss nuances, but those are well handled in the 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 description coverage is 100%, so the detailed entity and company parameter descriptions already carry the semantic load. The description repeats the Id/SyncToken requirement but adds no additional parameter meaning 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?
States a specific verb and resource: 'Update an existing credit memo in QuickBooks Online.' This clearly distinguishes it from sibling tools like create_credit_memo, get_credit_memo, and delete_credit_memo without needing to open their schemas.
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 clear context that the tool is for modifying an existing credit memo and requires Id plus the current SyncToken. It does not explicitly name alternatives or state when-not-to-use, but 'existing' sufficiently separates it from creation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_customerupdate customerADestructiveInspect
Update an existing customer in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Customer first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. QuickBooks cannot delete a customer; to retire one, update it with Active: false. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: the concurrency-token requirement (SyncToken) and the fact that the saved record is returned with a new SyncToken. It does not repeat the schema's sparse-update and deletion details, but those are in the structured field.
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 the core action and requirements, with zero wasted words. The prerequisite is embedded parenthetically without disrupting the main clause.
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 very rich schema description (100% coverage, nested object details) and annotations covering the destructive profile, the description provides enough context to select and invoke the tool: it says what it does, the required SyncToken, and the return value. It omits schema-level nuances like sparse updates and the Active:false retirement workaround, but those are available in the structured fields.
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 entity and company parameters are already thoroughly documented in the schema. The description only reiterates the Id and SyncToken requirement, adding no syntax, format, or meaning beyond what the schema provides; 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?
States a specific verb (Update) and resource (existing customer in QuickBooks Online), and the word 'existing' distinguishes it from create_customer. An agent can tell this is for modifying an already-present customer, not creating or fetching one.
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 clear context and a prerequisite: it requires the Id and current SyncToken as returned by the last search or write, implying the customer must already exist and have been fetched. It does not explicitly state when not to use it or name alternative tools like create_customer, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_departmentupdate departmentADestructiveInspect
Update an existing department in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Department first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. QuickBooks cannot delete a department; to retire one, update it with Active: false. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: the optimistic-concurrency SyncToken requirement and the fact that the saved record plus a new SyncToken are returned. It does not, however, restate or expand on the destructive/sparse-update semantics that live in the schema.
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 tightly written sentences with the operation and its key prerequisite front-loaded and the return value trailing. No filler, though the parenthetical about SyncToken is slightly wordy.
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?
There is no output schema, so the description earns credit for stating what is returned ('the saved record with its new SyncToken'). Combined with the rich entity schema, an agent has enough to invoke this mutation correctly; only the lack of alternative-tool routing keeps it from a 5.
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% and both parameters (entity, company) are thoroughly documented inline, including sparse-update behavior and the Active:false retirement pattern. The description only echoes Id/SyncToken, which the schema already defines, so it adds no meaning beyond the structured fields — 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?
States a specific verb and resource ('Update an existing department in QuickBooks Online'), which clearly distinguishes it from create_department, get_department, and search_departments. It doesn't explicitly name those siblings, but the purpose is unambiguous for an agent scanning the tool list.
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 when to use it ('an existing department') and gives a concrete prerequisite ('fetch the Department first' to get the current SyncToken), but never states when-not to use it or points to alternatives like create_department for new records. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_depositupdate depositADestructiveInspect
Update an existing deposit in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Deposit first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. A sparse update must also repeat DepositToAccountRef, unchanged, or QuickBooks rejects it as missing. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds the optimistic-concurrency requirement (current SyncToken) and, with no output schema present, tells the agent what comes back ('the saved record with its new SyncToken'), which enables chaining. The specifics of what a destructive sparse update actually clears is left to the schema, not the description.
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 waste: the action and its precondition come first, the return value second. Every clause 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?
For a mutation tool with a rich nested schema and annotations already declaring destructiveness, the description covers the prerequisite, the mutation nature, and the return value without an output schema. It omits the top-level warning that updates are sparse and that a Line array replaces all lines, though that detail lives in the entity 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 description coverage is 100% and the nested entity description already documents Id, SyncToken, sparse semantics, and company resolution in depth. The description's mention of Id and SyncToken repeats schema content rather than adding meaning, so the baseline 3 applies.
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?
States a specific verb ('Update') and resource ('an existing deposit in QuickBooks Online'), which is exactly what distinguishes it from the many sibling update_*/delete_deposit/search_deposits tools. An agent can select it without opening the schema.
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?
Gives a clear precondition ('requires Id and the current SyncToken, as the last search or write returned it'), which tells the agent it must retrieve the record first. It does not name an alternative tool (e.g. use search_deposits to fetch the SyncToken) or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_employeeupdate employeeADestructiveInspect
Update an existing employee in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Employee first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. QuickBooks cannot delete a employee; to retire one, update it with Active: false. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: the operation is token-guarded (Id + current SyncToken) and returns the saved record with its new SyncToken, which matters for sequential updates. It does not itself mention the sparse-vs-full update behavior, but that is documented in the schema.
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 the action and resource, then the key requirement and return value. Nothing is wasted and no important precondition is buried.
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 rich input schema, destructive annotation, and absence of an output schema, the description covers the essential call semantics: it updates an existing employee, needs Id and SyncToken, and returns the saved record with a new SyncToken. It omits schema-level details like sparse updates and employee retirement, but those are provided directly in the entity parameter.
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% and the entity parameter already documents Id, SyncToken, sparse updates, full-update behavior, and field restrictions. The description repeats the Id/SyncToken requirement but adds little parameter meaning beyond the schema, so the 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 states a specific verb and resource — 'Update an existing employee in QuickBooks Online' — and distinguishes this mutation from sibling operations like create_employee, get_employee, and search_employees. An agent can identify the intended action without opening the schema.
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 makes clear this is for updating an existing employee and requires an Id plus the current SyncToken from a prior search or write. That gives a usable preconditions workflow, but it does not explicitly rule out alternatives or name a specific sibling to use for fetching the employee first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_estimateupdate estimateADestructiveInspect
Update an existing estimate in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Estimate first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds genuinely useful context beyond that: the concurrency requirement that the SyncToken must be the current one, and that the response carries a new SyncToken. It stops short of stating what a failed/conflicting update does.
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 filler. The core action and the SyncToken prerequisite are front-loaded, and the return value is appended compactly.
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 destructive mutation with no output schema, the description covers the prerequisite token, the return payload, and the new token. Combined with a 100%-covered schema, an agent has enough to call it correctly; only error/conflict behavior is left implicit.
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 entity and company parameters are already fully documented, including sparse-update semantics. The description only restates the Id/SyncToken requirement, adding little beyond the schema, so the baseline 3 applies.
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?
States a specific verb (Update) and resource (an existing estimate) scoped to QuickBooks Online, which naturally separates it from create_estimate, delete_estimate, get_estimate and search_estimates. It never names a sibling explicitly, so the distinction rests on the verb alone rather than deliberate routing.
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 gives a prerequisite (requires Id and the current SyncToken 'as the last search or write returned it'), implying a fetch-then-update flow, but does not state when to prefer this over update_estimate's alternatives or what to do when the token is stale. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_exchange_rateupdate exchange rateADestructiveInspect
Set the exchange rate QuickBooks uses for a currency on a given date (multicurrency companies only).
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The rate to set: { SourceCurrencyCode: 'USD', AsOfDate: 'YYYY-MM-DD', Rate: 1.37 }. An exchange rate has no Id or SyncToken. Only companies with multicurrency enabled have exchange rates. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the mutation nature is disclosed. The description adds useful context: it is date-scoped and limited to multicurrency companies. However, it does not explain what happens if a rate already exists for that date (overwrite), or any side effects. Given the annotations carry the safety profile, the description adds moderate behavioral context but not rich detail.
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, concise sentence that front-loads the core action and includes the critical constraint. Every word earns its place with no filler. It is appropriately brief for a tool with a well-covered schema.
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 tool has a nested required parameter and no output schema. The schema provides the structure, and the description gives the core intent. However, it lacks any information about return values, error conditions, or behavior on existing rates. For a mutation tool with no output schema, an agent might need to know what to expect after invocation. Given the simplicity, a 3 is fair, but it could improve by mentioning overwrite behavior or confirmation of success.
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% for both parameters. The entity property has an explicit description showing the exact structure and noting that exchange rates have no Id or SyncToken. The description itself adds no additional parameter meaning beyond the schema. Since the schema is thorough, a baseline of 3 is appropriate; the description does not need to supplement.
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 a specific action ('Set the exchange rate'), the resource (exchange rate), and the exact scope (for a currency on a given date). It also includes a critical constraint (multicurrency companies only), which distinguishes it from currency-related tools like update_company_currency. An agent can immediately understand what this tool does and when it applies.
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 offers no guidance on when to use this tool versus alternatives such as get_exchange_rate or search_exchange_rates. There is no mention of prerequisites (e.g., checking existence) or exclusions. It only states a constraint (multicurrency companies only) but does not clarify that this tool is for setting/updating rather than reading. An agent would need to infer usage from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_inventory_adjustmentupdate inventory adjustmentADestructiveInspect
Update an existing inventory adjustment in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the InventoryAdjustment first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds specific behavioral facts beyond annotations: it requires the current SyncToken (optimistic concurrency) and returns the saved record with its new SyncToken, which helps an agent understand the workflow and response.
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 the core action, followed by the prerequisite and return behavior. No filler or repetition; every clause 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 helpfully states the return value (saved record with new SyncToken), and the schema covers sparse update semantics. Annotations cover destructiveness. The description could mention that the company parameter exists, but the schema handles that adequately.
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 entity and company parameters are already fully documented. The description reinforces the Id/SyncToken requirement but adds no syntax, format, or constraint details beyond what the schema 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?
States a specific verb (Update) and resource (inventory adjustment) in QuickBooks Online, clearly distinguishing it from create/delete/get siblings for the same entity. An agent can identify the exact operation without opening the schema.
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 clear context and prerequisites: requires Id and the current SyncToken, with the note to fetch the InventoryAdjustment first. It does not explicitly say when to use this versus create_inventory_adjustment for new records, but the word 'existing' implies the distinction and no misleading guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_invoiceupdate invoiceADestructiveInspect
Update an existing invoice in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Invoice first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true; the description adds value by explaining sparse-by-default behavior, that a Line array replaces all lines, and that sparse:false clears omitted writable fields. It also states the return includes a new SyncToken, though that's in the schema too.
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 tight sentences, front-loaded with the action and the key prerequisites, with no waste.
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 nested-object mutation tool, the description covers the critical SyncToken prerequisite and return value. The schema carries the detailed sparse/full-update semantics, and annotations cover destructiveness, so only minor gaps remain.
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 reinforces the critical Id/SyncToken requirement for the entity param, adding emphasis beyond the schema, but doesn't add syntax or format details beyond what the schema 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 states a specific verb (Update) and resource (an existing invoice in QuickBooks Online), and the mention of Id + SyncToken requirements distinguishes it from create_invoice and delete_invoice.
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 gives clear context on prerequisites (requires Id and current SyncToken, as returned by the last search or write). It doesn't explicitly name alternatives like void_invoice or send_invoice, but the when-to-use is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_itemupdate itemADestructiveInspect
Update an existing item in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Item first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. QuickBooks cannot delete a item; to retire one, update it with Active: false. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds important behavioral context beyond that: the optimistic concurrency requirement (current SyncToken) and the fact that it returns the saved record with a new SyncToken. It does not detail what fields are destroyed or the sparse-update default, but those are covered in the schema.
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 the core action and prerequisites, and the return value follows immediately. Every clause carries needed information without repetition or filler.
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 a nested entity parameter, no output schema, and rich schema descriptions, the definition covers the essential call prerequisites, return behavior, and safety annotation. It omits some schema-documented details like sparse update behavior and deletion limitations, but those are clearly present in the entity 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 description coverage is 100%, so the schema already documents the entity and company parameters in detail. The description reinforces the need for Id and SyncToken but adds no new syntax or format beyond what the schema provides, making the baseline 3 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 gives a specific verb and resource: 'Update an existing item in QuickBooks Online.' It distinguishes update from create implicitly by saying 'existing,' but does not name sibling tools like create_item or get_item for contrast.
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 states the required concurrency inputs (Id and current SyncToken as returned by the last search or write), which tells the agent what it must have before calling. It does not explicitly compare with alternatives such as create_item or search_items, so no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_journal_entryupdate journal entryADestructiveInspect
Update an existing journal entry in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the JournalEntry first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, yet the description adds two useful behaviors: the optimistic-concurrency SyncToken requirement and the fact that the saved record plus a new SyncToken comes back. It does not warn that omitting fields left out can be cleared (that lives in the schema's sparse semantics).
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 the action, then the prerequisite, then the return value. Nothing is wasted and no filler is present.
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 exists, so the description's note about returning the saved record with its new SyncToken is exactly the missing piece an agent needs. Combined with the schema's sparse-update rules and the destructive annotation, the definition is essentially complete, though the SyncToken prerequisite is only stated once and could be reinforced as a hard requirement.
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 entity and company parameters are fully documented in the schema, including sparse semantics and the SyncToken/PII rules. The description's mention of Id and SyncToken is a helpful restatement but adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
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?
States a specific verb + resource ("Update an existing journal entry") and scopes it to QuickBooks Online, so it is clearly distinguishable from sibling update_* tools by resource. It does not, however, explicitly differentiate itself from create_journal_entry, get_journal_entry, or delete_journal_entry beyond the verb.
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 gives a real prerequisite (Id plus the current SyncToken, as returned by the last search or write), which implies the fetch-then-update workflow. It never states when to choose this over alternatives such as create_journal_entry or search_journal_entries, nor any when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_paymentupdate paymentADestructiveInspect
Update an existing payment in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Payment first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds meaningful context beyond that: the SyncToken concurrency requirement (updates are rejected against a stale token) and the fact that a new SyncToken comes back, which matters because there is no output schema. It stops short of restating the sparse-vs-full overwrite behavior, though that is covered in the entity schema.
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 tight sentences, front-loaded with the action and the critical preconditions, with the return-value note last. Every clause carries information the agent needs.
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 no output schema, the description covers the essential preconditions and the return contract (saved record plus new SyncToken). It omits any mention of permission requirements or failure modes, but the schema and destructiveHint annotation already carry the overwrite risk, so coverage is close to adequate.
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%, and the entity parameter already documents Id, SyncToken, sparse semantics, the Line-array replacement rule, and the excluded sensitive fields. The description only echoes the Id/SyncToken requirement, so it adds little beyond the schema and the baseline of 3 applies.
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?
States a specific verb (Update) and resource (an existing payment) scoped to QuickBooks Online, which cleanly separates it from create_payment and delete_payment in the sibling set. It does not, however, explicitly distinguish itself from the near-neighbor void_payment, which is also a mutating operation on a payment.
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 supplies a real prerequisite - 'requires Id and the current SyncToken, as the last search or write returned it' - which implies the agent must call get_payment or search_payments first. But it offers no guidance on when to update versus void or delete a payment, leaving the sibling choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_payment_methodupdate payment methodADestructiveInspect
Update an existing payment method in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the PaymentMethod first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. QuickBooks cannot delete a payment method; to retire one, update it with Active: false. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=false and destructiveHint=true already declared, the description adds the concurrency/SyncToken requirement and that the response carries a refreshed SyncToken. Sparse-vs-full update and 'cannot delete, retire with Active:false' live in the schema rather than the description, so it is good but not rich.
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 the action and precondition, ending with the return value. No filler 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?
No output schema, so the description does its job by stating the returned record and new SyncToken, and annotations cover safety. It omits any mention of the sparse-update behavior an agent should know when mutating, but the schema covers it, leaving only 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?
Schema description coverage is 100%, so the schema already documents both parameters in depth (sparse semantics, Line replacement, SyncToken, company selection). The description only restates the Id/SyncToken requirement already in the schema, adding no new parameter meaning. Baseline 3 applies.
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?
Specific verb (update) on a specific resource (existing payment method) with scope ('in QuickBooks Online'), and it names the return value. It distinguishes itself from create_payment_method/get_payment_method implicitly via 'existing' but never names a sibling, so it falls short of the 5-level differentiation.
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?
States the precondition clearly: an Id and the current SyncToken as returned by the last search or write, which implies a fetch-before-update workflow. It gives no explicit when-not or alternatives (e.g. create vs update vs Active:false retirement), so no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_preferencesupdate preferencesADestructiveInspect
Update the company's QuickBooks preferences. Requires a sparse payload with Id, SyncToken, sparse: true and the preference block being changed. Read-only preference fields are rejected by QuickBooks.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Preferences first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveHint=true, but the description adds meaningful behavior beyond that: sparse updates avoid clobbering, full updates clear omitted writable fields, read-only preference fields are rejected, and a current SyncToken is required. This is exactly the behavioral context an agent needs before mutating company preferences.
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 no filler: the first front-loads the purpose and the critical payload requirements, the second adds the key field-level constraint. Detailed rules are correctly deferred to the schema rather than bloating the description.
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 destructive update tool with rich schema coverage and annotations, this definition covers the full call cycle: obtain current Preferences for Id/SyncToken, send a sparse update, avoid read-only and sensitive fields, and understand full-update clearing behavior. The absence of an output schema is acceptable because the critical preconditions are thoroughly described.
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 schema already documents entity and company, including sensitive-field prohibitions and sparse-vs-full semantics. The description adds explicit value by requiring sparse: true and warning that read-only fields are rejected, which helps the agent construct a valid payload. There is minor tension with the schema's 'sparse by default' phrasing, but the added guidance is still useful.
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 states a specific verb and resource: 'Update the company's QuickBooks preferences.' Among a large sibling set of update_* tools, it uniquely targets preferences and is clearly distinct from get_preferences. The sparse-payload requirement adds operational specificity without obscuring the 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 and entity schema give a clear invocation context: fetch Preferences first to obtain the current SyncToken, send a sparse payload, and avoid read-only or sensitive fields. It does not explicitly name get_preferences as the read alternative or list when-not-to-use conditions, but the prerequisites and sparse/full-update behavior are well conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_purchaseupdate purchaseADestructiveInspect
Update an existing purchase in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Purchase first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. A sparse update must also repeat PaymentType and AccountRef, unchanged, or QuickBooks rejects it as missing. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false; the description adds critical behavioral details: sparse update semantics, that a Line array replaces all lines, that sparse: false clears omitted fields, and that a sparse update must repeat PaymentType and AccountRef. These go beyond what annotations provide. It does not mention permissions or rate limits, but covers the main mutation behaviors.
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 the core action and requirement. It is concise and focused, though the second sentence about return value is somewhat redundant with the schema but still useful. 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?
Given the tool's complexity (nested entity object, sparse updates), the description along with annotations and schema provides sufficient information: it covers the required SyncToken, sparse update behavior, and return value. An output schema is absent, but the description states the return includes the new SyncToken. The only minor gap is lack of explicit when-to-use vs alternatives, but overall it is complete for correct invocation.
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 extra meaning: it explains that SyncToken must be current (as last search or write returned it), and the schema already details the entity fields including sparse update behavior. The description reinforces the critical SyncToken requirement and return value (new SyncToken), 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?
States a specific verb (update) and resource (existing purchase in QuickBooks Online), and distinguishes itself from create_purchase, get_purchase, delete_purchase, and update_purchase_order by naming the target entity precisely.
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 when to use it (to update an existing purchase) and mentions the prerequisite of having Id and SyncToken, but does not explicitly say when to choose this over delete_purchase or create_purchase, nor does it list alternatives. The implicit guidance is adequate but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_purchase_orderupdate purchase orderADestructiveInspect
Update an existing purchase order in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the PurchaseOrder first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=false. The description adds context beyond them: the concurrency token requirement and the fact that the saved record with a new SyncToken is returned. It does not elaborate on what the destructive update can overwrite, though the nested entity schema does.
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 tightly written sentences with the required inputs and return behavior front-loaded and no filler. Every clause carries 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 exists, and the description covers the return value (saved record plus new SyncToken). For a mutation tool with rich annotations and a fully documented nested entity schema, this is close to complete; it omits any mention of permission or error-permission constraints.
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% and the entity schema deeply documents sparse semantics, SyncToken requirements, and prohibited fields. The description only restates the Id/SyncToken requirement, so it adds little beyond what the schema already provides; baseline 3 applies.
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 states a specific verb and resource ('Update an existing purchase order in QuickBooks Online'), clearly distinguishing it from create_purchase_order, get_purchase_order, and delete_purchase_order by name and scope. It does not explicitly name a sibling or routing condition, so it stops just short of a 5.
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 gives a concrete prerequisite for use: the caller needs the Id and the current SyncToken 'as the last search or write returned it,' which implicitly routes the agent through a read before updating. It does not state when to prefer this over alternatives (e.g., sparse vs full update strategy is left to the schema), but the operational context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_refund_receiptupdate refund receiptADestructiveInspect
Update an existing refund receipt in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the RefundReceipt first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds real value beyond that: it explains the SyncToken concurrency requirement and the return of the saved record with a new SyncToken. It doesn't detail what gets destroyed or the permission scope, so a 4 rather than 5.
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 tight sentences: the first front-loads the operation and prerequisites, the second covers the return value. 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?
Covers purpose, prerequisites, and return value, and works with a rich nested-schema entity param and opposing annotations. It doesn't mention the sparse:false destructive full-update behavior in the description text, but that detail lives in the schema; a 4 given how much the schema and annotations already carry.
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 reinforces the Id/SyncToken requirement, and the schema itself adds the sparse-update semantics, line replacement, and prohibited-fields guidance. It doesn't add syntax beyond the schema, so a moderate 4.
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?
States a specific verb (Update) and resource (refund receipt) plus the target system (QuickBooks Online). The name is unambiguous against siblings like update_sales_receipt and update_credit_memo, and the description reinforces that distinction.
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 states the prerequisite of needing Id and the current SyncToken as returned by the last search or write, which implicitly routes the agent to get_refund_receipt/search_refund_receipts first. No explicit exclusions or named alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_sales_receiptupdate sales receiptADestructiveInspect
Update an existing sales receipt in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the SalesReceipt first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: the optimistic-concurrency requirement (current SyncToken) and the fact that the saved record along with a new SyncToken is returned, which matters since no output schema exists. It stops short of describing what 'destructive' actually means in sparse-update terms, which the schema covers instead.
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 tight sentences: the action and its required preconditions come first, the return value second. No filler and nothing repeated for padding.
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?
With no output schema, the description correctly compensates by stating what is returned (the saved record with its new SyncToken). Combined with a fully documented schema and destructive/readOnly annotations, an agent has what it needs to invoke this safely, with only the sparse-vs-full update behavior left entirely to the 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 description coverage is 100%, and the nested entity object already documents Id, SyncToken, sparse-vs-full update semantics, and the Line array replacement rule. The description restates the Id/SyncToken requirement, which reinforces but does not extend the schema, so the baseline 3 applies.
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 states a specific verb and resource ('Update an existing sales receipt in QuickBooks Online'), naming the domain and the target entity precisely. It does not explicitly differentiate itself from the adjacent siblings (update_refund_receipt, create_sales_receipt, void_sales_receipt, delete_sales_receipt), but the verb+resource pairing is unambiguous enough that an agent could pick it correctly.
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 gives an implied precondition ('requires Id and the current SyncToken, as the last search or write returned it'), which effectively routes the agent to a prior search or write. However, there is no explicit when-to-use vs. when-not guidance, and no statement of when to prefer void_sales_receipt or the delete/update siblings instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_termupdate termADestructiveInspect
Update an existing term in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Term first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. A sparse update must also repeat Name, unchanged, or QuickBooks rejects it as missing. QuickBooks cannot delete a term; to retire one, update it with Active: false. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real behavioral value by disclosing the optimistic-concurrency requirement (current SyncToken) and that the response carries the new SyncToken, which an agent needs to chain further writes.
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 the action and its prerequisites, and it closes on the return value. Nothing is padded or repeated.
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 exists, and the description still names what comes back (the saved record plus its new SyncToken). Combined with the very rich nested entity schema, an agent has enough to invoke correctly; only the destructive sparse-update semantics live solely in the 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 description coverage is 100%, so the entity object already documents sparse updates, the Line-replacement rule, the SSN-exclusion rule, and the Active:false retirement pattern. The description only restates the Id/SyncToken requirement the schema already carries, adding no new parameter meaning.
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?
States a specific verb and resource ("Update an existing term in QuickBooks Online") and, combined with the sibling naming (create_term, get_term, search_terms), an agent can immediately place it. It does not name any sibling explicitly, so it falls short of full differentiation.
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?
Specifies the prerequisite clearly: Id and the current SyncToken "as the last search or write returned it," which implies the caller must read before writing. No explicit when-not or alternative (e.g. use search_terms to find the Id, or Active:false to retire) is offered in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_time_activityupdate time activityADestructiveInspect
Update an existing time activity in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the TimeActivity first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (destructiveHint=true, readOnlyHint=false), so the bar is lower. The description still adds real value by disclosing the optimistic-concurrency requirement (Id + current SyncToken) and the return behavior (saved record with new SyncToken), which are not in the 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?
Two tightly written sentences with zero waste, front-loading the action and immediately following with the key prerequisite and return value.
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?
With no output schema, the description correctly notes the return value ('saved record with its new SyncToken'), and the SyncToken concurrency workflow is explained. The nested entity object is fully covered by the schema, so the definition is essentially complete, missing only explicit guidance on sibling selection.
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 already documents both the entity and company parameters, including sparse-update semantics. The description restates the Id/SyncToken requirement but adds no syntax or format detail beyond what the schema provides; baseline 3 applies.
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?
States a specific verb ('Update') and resource ('time activity') with product context ('QuickBooks Online'), clearly distinguishing it from create_time_activity, delete_time_activity, get_time_activity, and search_time_activities. It does not explicitly name those siblings, but the verb+resource is unambiguous.
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 requirement to supply the current SyncToken 'as the last search or write returned it' implies the agent must first fetch the record (via get_time_activity or search_time_activities), which is useful workflow guidance. However, it never explicitly states when to prefer this tool over alternatives or what preconditions apply beyond the token.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_transferupdate transferADestructiveInspect
Update an existing transfer in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Transfer first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. A sparse update must also repeat FromAccountRef, ToAccountRef and Amount, unchanged, or QuickBooks rejects it as missing. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely useful non-annotation context: optimistic concurrency via SyncToken and the fact that the saved record is returned with a new SyncToken, which matters for chained updates.
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 tightly packed sentences with no filler. The concurrency requirement and return behavior are front-loaded and each clause 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?
For a mutation tool with a nested entity object and no output schema, the description briefly covers the return value and the key prerequisite, while the schema carries the complex sparse-update semantics. Combined, an agent has enough to invoke correctly, though it could note the sparse-by-default behavior more visibly.
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 entity and company parameters are already fully documented in the schema, including sparse-update rules and required fields. The description only restates the Id/SyncToken requirement already present in the schema, adding no new syntax or format detail.
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?
States a specific verb (Update) and resource (an existing transfer in QuickBooks Online), making it trivially distinguishable from siblings like create_transfer, get_transfer, delete_transfer, and search_transfers. An agent knows exactly which operation this performs.
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?
Gives a concrete prerequisite — requires the Id and the current SyncToken as returned by the last search or write — which implicitly routes the agent through a fetch/search first. It does not, however, explicitly name alternatives or state when-not-to-use this tool versus a full-overwrite path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_vendorupdate vendorADestructiveInspect
Update an existing vendor in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the Vendor first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. QuickBooks cannot delete a vendor; to retire one, update it with Active: false. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true. The description adds beyond that by disclosing SyncToken rotation (the transaction returns a new SyncToken), which tells the agent the token is invalidated after the call and concurrency matters. Richer detail (sparse vs. full update, field clearing) lives only in the schema.
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 the action, then the prerequisite, then the return value. No filler; the parenthetical is slightly dense but earns its place by explaining SyncToken currency.
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?
With no output schema, stating that the saved record and its new SyncToken are returned is necessary and present. Combined with the schema's coverage of sparse/full update semantics and the cannot-delete/Active:false constraint, an agent has enough to call this 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%, so the schema already carries the heavy lifting on both 'entity' and 'company'. The description only restates the Id/SyncToken requirement and adds the provenance of the SyncToken, which is marginal added meaning.
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?
States a specific verb and resource ('Update an existing vendor in QuickBooks Online'), and the word 'existing' implicitly separates it from create_vendor. It does not name any sibling explicitly, so an agent must infer the boundary, but the purpose itself is unambiguous.
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?
Gives a hard prerequisite (Id plus the current SyncToken, obtained from the last search or write) and points at the fetch-first workflow, which is the key gating condition for a safe update. It stops short of naming alternatives (e.g. get_vendor/search_vendors for retrieval) or a when-not-to-use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_vendor_creditupdate vendor creditADestructiveInspect
Update an existing vendor credit in QuickBooks Online (requires Id and the current SyncToken, as the last search or write returned it). Returns the saved record with its new SyncToken.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Fields to update. Must include Id and the current SyncToken (fetch the VendorCredit first). Do not send government identifiers (SSN or tax IDs), birth dates or card-processing details. Manage those fields directly in QuickBooks. Updates are sparse by default: only the fields sent change, and a Line array sent replaces all lines. Send sparse: false for a full update, which clears every writable field left out. A sparse update must also repeat VendorRef, unchanged, or QuickBooks rejects it as missing. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, so the safety profile is already structured; the description adds genuinely new behavior — this is an optimistic-concurrency write keyed on SyncToken — and discloses the return value including the new SyncToken for chaining. It doesn't cover the sparse-vs-full update semantics, but those live in the schema.
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?
A single sentence, no filler, front-loaded with the action, scope, and the blocking precondition, then the return. Nothing to trim.
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?
Even without an output schema the description states the return shape (saved record plus new SyncToken), which is what an agent needs for follow-up calls. The only gap is that it does not restate the destructive/sparse-write implications, which annotations and the rich schema already carry.
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 already explains Id/SyncToken, sparse semantics, VendorRef repetition and forbidden government identifiers. The description repeats the Id+SyncToken requirement without adding format or syntactic detail, so the baseline 3 applies.
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?
States a specific verb (Update) and resource (vendor credit) plus the product scope (QuickBooks Online), which cleanly separates it from create_vendor_credit, delete_vendor_credit, get_vendor_credit and the many other *vendor_credit siblings. The concurrency precondition (Id + current SyncToken) is named up front, so an agent knows what state it must already hold.
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 gives a prerequisite (fetch the record first to get the current SyncToken) which implies the workflow, but never says when to choose update over create/delete or what to do if the SyncToken is stale. That is implied guidance rather than explicit when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
void_bill_paymentvoid bill paymentADestructiveInspect
Void a bill payment in QuickBooks Online, keeping the record and its number but zeroing its amounts. Cannot be undone; requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the BillPayment to void. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this void. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is known. The description adds valuable context beyond the annotations: the record and its number are preserved, amounts are zeroed, the operation cannot be undone, and explicit user confirmation is required. This is meaningful behavioral disclosure for a destructive 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 with zero waste. The core action and its key behavioral consequence are front-loaded, followed by the irreversibility warning and confirmation requirement. 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?
For a destructive single-resource operation with a fully documented schema and annotations covering the safety profile, the description is nearly complete. It covers what happens (void, zero amounts), what doesn't happen (record/number preserved), and the required precondition (explicit confirmation). It doesn't describe the return value, but there is no output schema and the operation's outcome is clear enough for an agent to call it 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 the schema already documents all three parameters (id, company, confirm). The description adds the critical semantic that 'confirm' must be true and only set after explicit user confirmation, which reinforces the schema. However, it doesn't add much beyond that, so the 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 states a specific verb ('Void'), a specific resource ('a bill payment in QuickBooks Online'), and the precise behavioral scope: it keeps the record and its number but zeroes its amounts. This clearly distinguishes it from delete_bill_payment and update_bill_payment, which are the closest 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?
The description implies when to use this tool: when the goal is to void rather than delete or update a bill payment. It does not explicitly name alternatives like delete_bill_payment or update_bill_payment, but the contrast is strongly implied by the phrase 'keeping the record and its number but zeroing its amounts.' The explicit confirmation requirement also gives clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
void_invoicevoid invoiceADestructiveInspect
Void an invoice in QuickBooks Online, keeping the record and its number but zeroing its amounts. Cannot be undone; requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Invoice to void. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this void. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description adds critical behavioral facts: the action cannot be undone and requires explicit user confirmation. It also explains the exact effect on the invoice record, which is more specific than the generic destructive hint.
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 with no filler. The first sentence front-loads the purpose and distinguishing effect, and the second sentence delivers the irreversibility and confirmation requirement.
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 with three well-documented parameters, destructive annotation, and no output schema, the description covers the essential facts an agent needs: what voiding does, that it is irreversible, and that user confirmation is mandatory. No critical operational context is missing.
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 already explains all three parameters. The description reinforces that confirmation is required but does not add meaning beyond the schema's 'Must be true' note, 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 names a specific verb and resource ('Void an invoice') and clarifies the operation's semantic scope: it keeps the record and number while zeroing amounts. This distinguishes void_invoice from delete_invoice and update_invoice without needing to inspect schemas.
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 makes the intended use case clear: voiding when you want to preserve the record and number rather than delete it. It does not explicitly name alternatives like delete_invoice, but the 'keeping the record and its number but zeroing its amounts' phrasing gives strong contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
void_paymentvoid paymentADestructiveInspect
Void a payment in QuickBooks Online, keeping the record and its number but zeroing its amounts. Cannot be undone; requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the Payment to void. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this void. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the destructiveHint annotation: the record stays, the number stays, amounts become zero, the operation cannot be undone, and explicit user confirmation is required. These details tell the agent exactly what happens and what safeguards must precede invocation.
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 tightly written sentences front-load the core action and effect, then add the two critical warnings. Every phrase earns its place with no 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 destructive single-entity action with fully documented parameters and a destructiveHint annotation, the description captures the effect, irreversibility, and confirmation requirement. Nothing needed for correct invocation is missing.
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 schema already documents id, company, and confirm. The description reinforces the confirm requirement, but does not need to add new parameter-level semantics.
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?
States a specific verb and resource ('Void a payment in QuickBooks Online') and clarifies the exact behavioral distinction: the record and its number are kept while amounts are zeroed. This implicitly differentiates void_payment from delete_payment and from create/update payment 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?
Describes clear operational context: the action is irreversible and requires explicit user confirmation, which tells the agent to gate the call on user approval. It does not explicitly name alternatives like delete_payment or void_invoice, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
void_sales_receiptvoid sales receiptADestructiveInspect
Void a sales receipt in QuickBooks Online, keeping the record and its number but zeroing its amounts. Cannot be undone; requires explicit user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | QuickBooks Id of the SalesReceipt to void. | |
| company | No | Which connected QuickBooks company to use (name, realm id, or connection id). Optional when only one company is connected. | |
| confirm | No | Must be true. Only set after the user has explicitly confirmed this void. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already mark the tool as destructive, the description adds important behavioral details: it is irreversible, requires explicit user confirmation, and preserves the record and number while zeroing amounts. This goes meaningfully beyond the structured 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 one dense, front-loaded sentence that states the action, the effect, and the two most critical cautions without any filler. Every clause 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?
For an irreversible destructive mutation with no output schema, the description covers the essential context: what the tool does, what it preserves, that it cannot be undone, and that confirmation is required. It does not specify the response format, but that is less critical here given the clear side effects and existing annotations.
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 already documents all three parameters. The description's mention of explicit user confirmation reinforces the confirm parameter, but that information is already in the schema, so the description adds no new parameter-level meaning beyond the baseline.
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 names the exact verb ('Void'), the resource ('sales receipt'), and the distinguishing effect ('keeping the record and its number but zeroing its amounts'). This clearly separates it from delete_sales_receipt, which would remove the record, and update_sales_receipt, which edits it.
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 when to use the tool by explaining that it zeroes amounts while preserving the record, which contrasts with deletion. However, it never explicitly names alternatives like delete_sales_receipt or states when not to use this tool, so the guidance is implied rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Added
get_payout_status
1 tool update
- Changed
list_bank_accounts1 field changed- removed
Input schema / properties / liveRemoved value: -{ - "description": "true to ask the bank for its balance now rather than its last reading.", - "type": "boolean" -}
2 tool updates
- Added
get_payout_setup - Added
save_payout_setup
1 tool update
- Added
list_bank_feed
2 tool updates
- Added
give_payee - Added
list_purchases_without_payee
3 tool updates
- Added
find_bank_transactions_not_in_books - Added
list_bank_accounts - Added
list_bank_transactions
1 tool update
- Changed
list_receipt_inbox5 fields changed- added
Input schema / properties / fromAdded value: +{ + "description": "Only documents dated on or after this day, YYYY-MM-DD, by the date written on them.", + "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$", + "type": "string" +} - added
Input schema / properties / max_totalAdded value: +{ + "description": "Only documents whose total is at most this amount.", + "type": "number" +} - added
Input schema / properties / min_totalAdded value: +{ + "description": "Only documents whose total is at least this amount.", + "type": "number" +} - added
Input schema / properties / searchAdded value: +{ + "description": "Words every matching document contains, in its vendor, number, summary, lines bought, text, file name, sender or subject. Case and accents do not matter. Searches filed documents too.", + "maxLength": 200, + "type": "string" +} - added
Input schema / properties / toAdded value: +{ + "description": "Only documents dated on or before this day, YYYY-MM-DD.", + "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$", + "type": "string" +}
220 tool updates
- First observed
activate_loop - First observed
attach_file - First observed
attach_receipt - First observed
create_account - First observed
create_attachable - First observed
create_bill - First observed
create_bill_payment - First observed
create_budget - First observed
create_class - First observed
create_company_currency - First observed
create_credit_card_payment_txn - First observed
create_credit_memo - First observed
create_customer - First observed
create_department - First observed
create_deposit - First observed
create_employee - First observed
create_estimate - First observed
create_inventory_adjustment - First observed
create_invoice - First observed
create_item - First observed
create_journal_entry - First observed
create_payment - First observed
create_payment_method - First observed
create_purchase - First observed
create_purchase_order - First observed
create_recurring_transaction - First observed
create_refund_receipt - First observed
create_sales_receipt - First observed
create_task - First observed
create_tax_agency - First observed
create_tax_service - First observed
create_term - First observed
create_time_activity - First observed
create_transfer - First observed
create_vendor - First observed
create_vendor_credit - First observed
delete_attachable - First observed
delete_bill - First observed
delete_bill_payment - First observed
delete_budget - First observed
delete_company_currency - First observed
delete_credit_card_payment_txn - First observed
delete_credit_memo - First observed
delete_deposit - First observed
delete_estimate - First observed
delete_inventory_adjustment - First observed
delete_invoice - First observed
delete_journal_entry - First observed
delete_payment - First observed
delete_purchase - First observed
delete_purchase_order - First observed
delete_recurring_transaction - First observed
delete_refund_receipt - First observed
delete_sales_receipt - First observed
delete_time_activity - First observed
delete_transfer - First observed
delete_vendor_credit - First observed
discard_inbox_file - First observed
find_expenses_without_attachments - First observed
get_account - First observed
get_account_list - First observed
get_aged_payable_detail - First observed
get_aged_payables - First observed
get_aged_receivable_detail - First observed
get_aged_receivables - First observed
get_attachable - First observed
get_balance_sheet - First observed
get_balance_sheet_detail - First observed
get_balance_sheet_summary - First observed
get_bill - First observed
get_bill_payment - First observed
get_budget - First observed
get_budget_vs_actuals - First observed
get_cash_flow - First observed
get_changes - First observed
get_class - First observed
get_class_sales - First observed
get_company_currency - First observed
get_company_info - First observed
get_credit_card_payment_txn - First observed
get_credit_memo - First observed
get_customer - First observed
get_customer_balance - First observed
get_customer_balance_detail - First observed
get_customer_income - First observed
get_customer_sales - First observed
get_customer_type - First observed
get_department - First observed
get_department_sales - First observed
get_deposit - First observed
get_employee - First observed
get_estimate - First observed
get_exchange_rate - First observed
get_general_ledger - First observed
get_inventory_adjustment - First observed
get_inventory_valuation_detail - First observed
get_inventory_valuation_summary - First observed
get_invoice - First observed
get_item - First observed
get_item_sales - First observed
get_journal_entry - First observed
get_journal_report - First observed
get_open_invoices - First observed
get_payment - First observed
get_payment_method - First observed
get_physical_inventory_worksheet - First observed
get_preferences - First observed
get_profit_and_loss - First observed
get_profit_and_loss_detail - First observed
get_purchase - First observed
get_purchase_order - First observed
get_recurring_transaction - First observed
get_refund_receipt - First observed
get_sales_receipt - First observed
get_tax_agency - First observed
get_tax_code - First observed
get_tax_payment - First observed
get_tax_rate - First observed
get_tax_summary - First observed
get_term - First observed
get_time_activity - First observed
get_transaction_detail_by_account - First observed
get_transaction_list - First observed
get_transaction_list_by_customer - First observed
get_transaction_list_by_vendor - First observed
get_transaction_list_with_splits - First observed
get_transfer - First observed
get_trial_balance - First observed
get_vendor - First observed
get_vendor_balance - First observed
get_vendor_balance_detail - First observed
get_vendor_credit - First observed
get_vendor_expenses - First observed
list_connected_companies - First observed
list_loops - First observed
list_proposals - First observed
list_receipt_inbox - First observed
list_rules - First observed
remember_rule - First observed
retire_rule - First observed
search_accounts - First observed
search_attachables - First observed
search_bill_payments - First observed
search_bills - First observed
search_budgets - First observed
search_classes - First observed
search_company_currencies - First observed
search_company_infos - First observed
search_credit_card_payment_txns - First observed
search_credit_memos - First observed
search_customer_types - First observed
search_customers - First observed
search_departments - First observed
search_deposits - First observed
search_employees - First observed
search_estimates - First observed
search_exchange_rates - First observed
search_invoices - First observed
search_items - First observed
search_journal_entries - First observed
search_payment_methods - First observed
search_payments - First observed
search_purchase_orders - First observed
search_purchases - First observed
search_recurring_transactions - First observed
search_refund_receipts - First observed
search_reimburse_charges - First observed
search_sales_receipts - First observed
search_tax_agencies - First observed
search_tax_codes - First observed
search_tax_payments - First observed
search_tax_rates - First observed
search_terms - First observed
search_time_activities - First observed
search_transfers - First observed
search_vendor_credits - First observed
search_vendors - First observed
send_credit_memo - First observed
send_estimate - First observed
send_invoice - First observed
send_payment - First observed
send_purchase_order - First observed
send_refund_receipt - First observed
send_sales_receipt - First observed
update_account - First observed
update_attachable - First observed
update_bill - First observed
update_bill_payment - First observed
update_budget - First observed
update_class - First observed
update_company_currency - First observed
update_company_info - First observed
update_credit_card_payment_txn - First observed
update_credit_memo - First observed
update_customer - First observed
update_department - First observed
update_deposit - First observed
update_employee - First observed
update_estimate - First observed
update_exchange_rate - First observed
update_inventory_adjustment - First observed
update_invoice - First observed
update_item - First observed
update_journal_entry - First observed
update_payment - First observed
update_payment_method - First observed
update_preferences - First observed
update_purchase - First observed
update_purchase_order - First observed
update_refund_receipt - First observed
update_sales_receipt - First observed
update_term - First observed
update_time_activity - First observed
update_transfer - First observed
update_vendor - First observed
update_vendor_credit - First observed
void_bill_payment - First observed
void_invoice - First observed
void_payment - First observed
void_sales_receipt
Publisher details
- Operator
- Peich Technologies, Inc. · Publisher source
- Operator website
- https://www.peich.xyz · Publisher source
- Vendor relationship
- Independent
- Documentation
- https://caribooks.com/en/setup
- Trust center
- https://caribooks.com/en/security
- Restrictions
- Requires a QuickBooks Online company. 14-day free trial, then a paid plan (from $39/month). Canada and US.
Related MCP Connectors
Connect QuickBooks to ChatGPT, Claude & Grok. Record bills, invoices, journal entries. Run reports.
QuickBooks Online for Claude: reports, bookkeeping cleanup, and US & Canadian tax prep.
Connect Claude or Cursor to books, invoices, bills, payroll, and sealed closes.
Connect QuickBooks Online to AI agents with secure read or write access across multiple companies.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceThe AccountingQB-MCP server is a comprehensive QuickBooks Online integration for Claude, offering 108 tools to manage transactions, run reports, and prepare taxes for US and Canada through natural language. It supports sole proprietors and small businesses with features like GST/HST returns, 1099/T4A reporting, reconciliation, and cash flow forecasting.-
- 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.643 npmMIT
- AlicenseCqualityDmaintenanceProvides complete QuickBooks Online API integration for Claude Code and other MCP-compatible clients, enabling full CRUD operations on 29 entity types and 11 financial reports.100Apache 2.0
- AlicenseNot gradedqualityCmaintenanceGives Claude full read/write access to QuickBooks Online, including tools to create, delete, and query accounting data, plus reconciliation features that detect bank-feed gaps and duplicate transactions.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.