Zenskar MCP Server
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Zenskar MCP ServerShow me my recent customers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Zenskar MCP Server
MCP server for the Zenskar API. 113 tools covering customers, contracts, invoices, payments, credit notes, accounting, products, plans, entitlements, billable metrics, and more.
What it does
Customers: list, search, create, update, delete, addresses, contacts, payment methods
Contracts: create, read, update, delete, amend, add phases and pricing, pause/resume, expire
Invoices: list, get, approve, void, generate, credit notes, download
Payments: create, edit, refund, delete, auto-charge
Credit notes: list, create against invoice, get by ID
Accounting: chart of accounts, journal entries and lines, balance sheet, income statement, account balances
Products: CRUD, pricing configurations
Plans: list, create, add products, preview estimates
Entitlements: list, get, create, update, delete
Billable metrics (aggregates): list, get, create, update, delete, schemas, estimates, logs
Business entities: list, get, create, update
Jobs: monitor async operations
Custom attributes and tax categories
Multi-tenant, supports Bearer token and API key auth
Related MCP server: QuickBooks Online MCP Server
Prerequisites
Before continuing, you need two things:
Node.js 20.10 or newer on your machine
Zenskar credentials — your Organization ID and an API Key
Node.js
Check whether it's already installed. Open a terminal and run:
node --version
npm --versionThis project requires Node.js 20.10 or newer. If both commands print a version that meets this, jump to Zenskar credentials.
If you see command not found or a version older than 20.10, download and install the LTS build from https://nodejs.org/en/download. npm (and npx) ship with Node.js — no separate install needed. After installing, open a new terminal window and re-run node --version to confirm.
Zenskar credentials
You need two values from your Zenskar dashboard. Grab both before moving to Installation.
Organization ID — open https://app.zenskar.com/settings (General tab) and copy your Organization ID.
API Key — open https://app.zenskar.com/settings?tab=api-keys, click Create new API key, give it a name, and copy the key.
Store the API key somewhere safe — the dashboard only shows the full key once. If you lose it, you'll have to create a new one.
Installation
For Claude Desktop App
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"zenskar": {
"command": "npx",
"args": ["mcp-zenskar"],
"env": {
"ZENSKAR_ORGANIZATION": "your-org-id",
"ZENSKAR_API_KEY": "your-api-key"
}
}
}
}You can omit one or both environment variables from the config, but the server will error until Claude supplies them in a tool call. Keeping them in the env block prevents repeated credential prompts.
For Other AI Applications
Install globally:
npm install -g mcp-zenskarOr run directly:
npx mcp-zenskarAuthentication
Every request needs:
Organization ID — set via
ZENSKAR_ORGANIZATIONAPI Key — set via
ZENSKAR_API_KEY
See Zenskar credentials above for how to get both.
At runtime the server reads these env vars (or accepts them from the MCP client via tool invocation).
Advanced: bearer tokens
Same session token from your browser devtools is also accepted via ZENSKAR_AUTH_TOKEN (sent as Authorization: Bearer ...). Short-lived — API key is preferred for any non-throwaway use. Kept for backward compatibility, so existing configs that use ZENSKAR_AUTH_TOKEN continue to work unchanged.
Usage
In Claude Desktop
Once configured, you can ask Claude to interact with your Zenskar data:
"Show me my recent customers"
"Find the contract for Acme Corp and add a $500/month add-on phase"
"Create a $25 credit note against the latest invoice for customer X"
"Show me the balance sheet and income statement"
"List all products and their pricing configurations"
"Record a $1000 successful manual payment or tax withheld amount against invoice Y"Available Tools
Customers
Tool | Description |
| List customers with search, filtering, and pagination |
| Get a customer by ID |
| Create a customer with address and tax info |
| Update customer details (partial update) |
| Permanently delete a customer by ID (only allowed when they have no active contracts or unpaid invoices) |
Contacts
Tool | Description |
| List contacts with pagination |
| Get a contact by ID |
| Create a contact for a customer |
| Update a contact's details |
| Delete a contact by ID |
Contracts
Tool | Description |
| List contracts with filtering by status, customer, dates |
| Get a contract with phases, pricings, and customer details |
| Create a contract with phases and pricing |
| Update contract terms, status, pricing, or renewal policy |
| Delete a draft contract |
| Get amendment history for a contract |
| Add a phase to a contract (add-ons, expansions) |
| Add pricing to a contract phase |
| Expire an active contract |
| Pause an active contract from a given start date, with an unpause-extension policy ( |
| Edit an existing pause phase — set or change the resume date, shift the start, or change the unpause policy |
| Resume a paused contract |
| Create a contract prompt |
| Extract contract data from raw text using AI |
Invoices
Tool | Description |
| List invoices with filtering by customer, status, dates |
| Get an invoice by ID |
| Get an invoice by external ID |
| Check invoice generation status |
| Download invoice in JSON format |
| Get contract actuals for an invoice |
| Get successful payments currently mapped to an invoice |
| Get successful payments for a specific invoice ID |
| Get original payment records for an invoice, excluding refund payment rows |
| Get invoice line items and pricing details |
| Get invoice summary |
| Get all available invoice tags |
| Generate a payment link for an invoice |
| Initiate payment for an invoice |
| Approve an invoice for billing |
| Void an invoice |
| Delete a draft invoice |
| Generate an invoice for a contract and date range |
| Create a credit note against an invoice |
| Auto-charge an invoice via payment gateway |
Payments
Tool | Description |
| List all payments with filtering and sorting, including refund records |
| Get a payment by ID |
| Record a successful manual/offline payment or tax withheld amount |
| Update a payment's invoice allocations ( |
| Delete a manual payment |
| Edit a manual payment's amount or method |
| Refund a payment (full or partial) |
Credit Notes
Tool | Description |
| List credit notes with pagination |
| Get a credit note by ID |
Products and Pricing
Tool | Description |
| List products in the catalog |
| Get a product by ID |
| Create a product |
| Update a product's details |
| Get pricing configs for a product |
| Create a pricing config for a product |
Plans (Templates)
Tool | Description |
| List plan templates |
| Get a plan by ID with phases and pricing |
| Create a plan template |
Accounting
Tool | Description |
| Get the full chart of accounts |
| List GL accounts with filtering |
| Create a GL account |
| List journal entries with filtering |
| Create a manual journal entry |
| Get a journal entry by ID with all lines |
| List journal lines across all entries |
| Get the balance sheet report |
| Get the income statement (P&L) |
| Get balance for a specific GL account |
| Trigger revenue recognition up to a date |
Custom Attributes and Tax
Tool | Description |
| List custom attribute definitions |
| Create a custom attribute definition |
| List tax categories |
| Create a tax category |
Jobs
Tool | Description |
| List async jobs (invoice gen, rev rec, etc.) |
| Get a job by ID to check status |
Business Entities
Tool | Description |
| List business entities |
| Get a business entity by ID |
| Create a business entity |
| Update a business entity |
Customer Addresses and Payment Methods
Tool | Description |
| List addresses for a customer |
| Add an address to a customer |
| Update a customer address |
| List payment methods for a customer |
| Attach a payment method to a customer |
| Delete a payment method from a customer |
Metrics and Usage Events
Tool | Description |
| List Billable Metrics with filtering; backend/API may also call these aggregates |
| Show the underlying schemas for Billable Metrics (Aggregates); mainly useful for debugging or integration work |
| Get Billable Metric estimates; backend/API may also call these aggregates |
| Get a Billable Metric by ID; backend/API may also call it an aggregate |
| Get logs for a Billable Metric (Aggregate) |
| Create a Billable Metric (Aggregate) |
| Update a Billable Metric (Aggregate) |
| Delete a Billable Metric (Aggregate) |
| List Usage Events with filtering; backend/API may also call these raw metrics |
| Create a Usage Event schema; backend/API calls this a raw metric |
| Get a Usage Event by ID; backend/API may also call it a raw metric |
| Get recent event rows for a Usage Event using the same preview-query path as the frontend |
| Get a Usage Event by API slug; backend/API may also call it a raw metric |
| Ingest a usage event |
Entitlements
Tool | Description |
| List entitlements with filtering |
| Get an entitlement by ID |
| Create an entitlement |
| Update an entitlement |
| Delete an entitlement |
Other
Tool | Description |
| Get customer portal config |
| Get current date/time in multiple formats |
Security
All requests require a valid organization ID and auth token
No credentials are stored by the server
Auth is passed through from the client
Development
This repo uses pnpm for package management. If you don't have it, install it once with npm install -g pnpm (or corepack enable && corepack prepare pnpm@latest --activate).
# Clone the repository
git clone https://github.com/zenskar/mcp-zenskar
cd mcp-zenskar
# Install dependencies
pnpm install
# Build the bundle (produces dist/server.mjs + dist/mcp-config.json)
pnpm run build
# Run the server
pnpm startDeveloping Locally Without Publishing
If you want Claude Desktop to use a local checkout instead of the npm package:
# Install dependencies + build the bundle
pnpm install
pnpm run build
# Optional: install the local build globally (requires dist/ from the previous step)
npm install -g .Then either point Claude to the globally-installed binary (usually $(npm bin -g)/mcp-zenskar) or call the built bundle directly:
{
"command": "node",
"args": ["/absolute/path/to/mcp-zenskar/dist/server.mjs"],
"env": {
"ZENSKAR_ORGANIZATION": "your-org-id",
"ZENSKAR_AUTH_TOKEN": "your-token"
}
}To iterate on src/server.js without rebuilding, run it directly — npm install already installs the bundler's devDependencies which include the runtime libs:
{
"command": "node",
"args": ["/absolute/path/to/mcp-zenskar/src/server.js"]
}Configuration
The server uses src/mcp-config.json to define available tools and API endpoints. This file contains the complete mapping of MCP tools to Zenskar API operations. All tools are declarative — no code changes needed to add new tools.
License
MIT
Support
For issues and support:
GitHub Issues: https://github.com/zenskar/mcp-zenskar/issues
Zenskar Documentation: https://docs.zenskar.com
Available Tools
114 toolsapproveInvoiceapproveInvoiceA
Approve an invoice; sets status to approved. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The unique ID of the invoice to approve (required). | |
| send_email | No | Whether to send email notification (defaults to false). | |
| check_duplicate_invoice | No | Whether to check for duplicate invoices (defaults to true). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool sets status to approved and that the host handles confirmation, but it lacks details on idempotency, side effects (e.g., email sending is parameterized but not described), or error handling. The disclosure is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with the core purpose. Highly 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 lack of output schema and the presence of a nested parameter object, the description is adequate but incomplete. It covers purpose and a key usage guideline, but omits return values, idempotency, and potential error scenarios, which could impact agent understanding.
Complex tools with many parameters or behaviors need more documentation. 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 additional meaning beyond the schema's descriptions, meeting the baseline but providing no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Approve an invoice; sets status to approved.' The verb 'approve' and resource 'invoice' are specific, and it distinguishes from sibling tools like payInvoice or voidInvoice by specifying the effect on 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?
Explicitly warns that the host enforces user confirmation via an approval gate and instructs not to ask the user to re-confirm before calling. This provides clear context for when to use the tool, though it does not mention alternatives beyond the given instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attachPaymentMethodattachPaymentMethodC
Attach a payment method to a customer.
| Name | Required | Description | Default |
|---|---|---|---|
| customerId | Yes | The unique identifier of the customer. | |
| payment_method_id | Yes | The payment method ID (from payment gateway) to attach. | |
| connector | No | Payment provider connector config object (e.g., {"name": "stripe", "reference_id": "cus_xxx"}). Either field is optional. If omitted, backend auto-detects from resource mappings. | |
| set_as_default | No | Whether to set as the default payment method. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist; the description does not disclose behavioral traits such as idempotency, side effects, authorization requirements, or the approval workflow hinted at by the __userContext 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?
Extremely concise, one sentence front-loading the primary purpose. No unnecessary text, but 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?
Given the complexity (5 params, nested objects, no output schema), the description is insufficient. It omits return values, error handling, and the multi-tenant authentication context indicated by __userContext.
Complex tools with many parameters or behaviors need more documentation. 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 description adds no additional meaning beyond what the parameter descriptions already provide. 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 clearly states the verb 'attach' and resource 'payment method to a customer', but does not differentiate from similar operations like setting as default or creating a new payment method.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guidelines provided on when to use this tool versus alternatives (e.g., createPayment, updatePayment, deletePaymentMethod). No prerequisites or context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createAccountcreateAccountC
Create a new accounting (GL) account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the account. | |
| account_category | Yes | Category of account. Valid values: 'Assets', 'Liabilities', 'Equity', 'Income', 'Expenses'. | |
| description | No | Description of the account. | |
| custom_data | No | Custom data object for the account. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing side effects, permissions, or constraints. It only states 'Create a new accounting (GL) account', omitting details about required authorization, potential duplicates, or any immutable properties. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundancy. It efficiently conveys the core action, though it could be slightly expanded without losing 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?
The tool has 5 parameters including a nested '__userContext' object and no output schema. The description fails to explain return behavior, error cases, or the impact of the '__userContext' fields. This leaves significant gaps 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 schema descriptions provide 100% coverage of all 5 parameters, including valid values for 'account_category' and details for '__userContext'. The description adds no extra parameter information, but per the rule, baseline is 3 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 clearly states the verb 'Create' and the resource 'accounting (GL) account', making the purpose immediately understandable. However, it does not differentiate from sibling tools like 'createAggregate' or 'createContact', which also create 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?
No guidance is provided on when to use this tool versus alternatives such as 'listAccounts' or 'getChartOfAccounts'. The description lacks context about prerequisites or typical workflows, making it hard for an agent to decide when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createAggregatecreateAggregateB
Create a new Billable Metric. Requires a name, data schema, aggregation queries, visual query builder config, and a data source. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the billable metric (required). | |
| dataschema | Yes | Data schema of the aggregate (JSON string, required). | |
| aggregation_query | Yes | Aggregate query — SQL/Jinja template for computing the metric (required). | |
| cust_agg_query | Yes | Customer aggregate query — SQL/Jinja template for customer-level computation (required). | |
| visual_query_builder | Yes | Visual query builder configuration object (required). | |
| datasource | Yes | Data source UUID (required). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It mentions the approval gate but does not address side effects, required permissions, idempotency, rate limits, or what happens on conflict. The description is insufficient for an agent to understand the full behavioral impact.
Agents need to know what a tool does to the 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-loading the purpose and then a key usage note. Each sentence earns its place, and there is no extraneous text. Could be slightly more structured but overall 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 tool has 7 parameters, nested objects, and no output schema, the description is incomplete. It does not describe the return value, error conditions, prerequisites, or the behavior of the approval gate beyond a single directive. An agent would need more context to handle this tool confidently.
Complex tools with many parameters or behaviors need more documentation. 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 adds a list of required components (name, data schema, etc.), but this largely duplicates the schema parameter descriptions. It does not explain semantics beyond what the schema provides, such as the structure of visual_query_builder or acceptable values for datasource.
Input schemas describe structure but not intent. Descriptions should explain 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 'Create a new Billable Metric' which is a clear verb+resource. However, it does not distinguish from sibling tools like createRawMetric, which also creates a metric-like entity. The list of required components adds specificity but not 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 an explicit usage guideline: 'Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.' This clarifies an important workflow step. However, it does not discuss when to use this tool versus alternatives (e.g., createRawMetric), so it lacks exclusions or when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createBusinessEntitycreateBusinessEntityA
Creates a new business entity in the system with various attributes including name, address, contact details, tax configuration, and logo. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Business Entity Name (required). | |
| No | Business Entity email address (optional). | ||
| phone_number | No | Business Entity phone number with country code (optional). | +911234567890 |
| is_default | No | Whether this is the default business entity (defaults to false). | |
| logo_url | No | Business Entity logo URL (optional). | |
| tax_config | No | Business Entity tax configuration as JSON object (optional). | |
| address_line1 | No | Address line 1 (optional). | |
| address_line2 | No | Address line 2 (optional). | |
| address_line3 | No | Address line 3 (optional). | |
| address_city | No | Address city (optional). | |
| address_state | No | Address state (optional). | |
| address_zipCode | No | Address zip code (optional). | |
| address_country | No | Address country (optional). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full burden. It mentions creation and an approval gate, but lacks details on side effects, permissions, error states, or what happens on failure. For a mutation tool, more transparency is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the purpose and following with a critical usage guideline. Every word earns its place with 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?
Despite 14 parameters and no output schema, the description does not address return value, error scenarios, or prerequisites beyond the approval gate. It leaves significant gaps for an AI agent to understand the full tool 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 coverage is 100%, so the schema already documents all 14 parameters. The description lists some attribute categories (name, address, etc.) but adds no semantic nuance beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Creates a new business entity', which is a specific verb and resource. It clearly distinguishes from sibling tools like updateBusinessEntity and listBusinessEntities. The mention of various attributes adds clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that the host enforces user confirmation via the approval gate and instructs not to re-confirm. This is clear usage guidance. However, it does not compare to alternative tools or specify when not 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.
createContactcreateContactB
Create a new contact associated with a customer.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | Yes | The customer ID (UUID) to associate this contact with. | |
| first_name | No | First name of the contact. | |
| last_name | No | Last name of the contact. | |
| Yes | Email address of the contact. | ||
| send_contract | No | Whether to send contracts to this contact. | |
| send_invoice | No | Whether to send invoices to this contact. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits like side effects, authentication requirements, or rate limits. It only states the basic action without additional 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 sentence that efficiently conveys the tool's purpose with no unnecessary words 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?
Given the tool creates a contact with 7 parameters including a complex nested object, the description lacks details on required fields, behavior after creation, or any return value. No output schema exists to supplement 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%, providing clear descriptions for each parameter. The tool description adds no extra meaning beyond the schema, meeting the baseline for complete 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 the action 'Create' and the resource 'contact', and specifies the association 'with a customer'. It is specific and distinguishes from sibling tools like updateContact and deleteContact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when to use createCustomer or other creation tools. No when-not or context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createContractcreateContractA
Create a new contract in Zenskar. Use this after extracting contract data via extractContractFromRaw and creating a customer via createCustomer. The contract includes customer details, pricing phases, products, and billing configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Contract name (required). | |
| description | No | Contract description (optional). | |
| status | No | Contract status (required, typically 'draft' for new contracts). | draft |
| currency | No | Currency code for the contract (e.g., 'USD', 'EUR'). | USD |
| start_date | Yes | Contract start date in ISO 8601 format (e.g., '2025-01-01T00:00:00.000000'). | |
| end_date | No | Contract end date in ISO 8601 format (e.g., '2025-12-31T23:59:59.999999'). Optional — omit for open-ended contracts. | |
| anchor_date | No | Anchor date for billing cycles in ISO 8601 format (defaults to start_date). | |
| customer_id | Yes | The ID of the customer for this contract (required, UUID format). | |
| renewal_policy | No | Contract renewal policy. Currently only 'do_not_renew' is supported at runtime. | do_not_renew |
| bill_parent_customer | No | Whether to bill the parent customer (defaults to false). | |
| phases | No | Array of contract phases with pricing details. Each phase includes name, start_date, end_date, phase_type, and pricings array. Defaults to empty array if omitted. | |
| source | No | Source information for the contract (e.g., {source_type: 'ai', source_id: 'uuid'}). | |
| custom_attributes | No | Custom attributes for the contract as key-value pairs. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states 'Create a new contract' without disclosing behavioral traits such as potential failure conditions, authentication requirements, or what happens on success. Lacks detail on side effects or constraints.
Agents need to know what a tool does to the 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 no redundancy: first sentence states purpose, second gives usage guidance, third lists included components. Well-structured and 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?
Given the tool's complexity (14 parameters, nested objects, no output schema), the description lacks completeness. It does not explain return values, provide examples, or clarify how to structure phases. The schema helps, but the description should offer more contextual guidance.
Complex tools with many parameters or behaviors need more documentation. 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 individual parameter descriptions, so baseline is 3. The description adds minimal extra meaning beyond summarizing components like 'customer details, pricing phases, products, and billing configuration', which is already implied 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 clearly states the verb 'Create a new contract' and resource 'in Zenskar', and distinguishes from sibling tools like createCustomer and createContractPhase by providing prerequisites. It also lists what the contract includes, making 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?
Explicitly guides agents to use this after extractContractFromRaw and createCustomer, providing a clear workflow order. However, does not mention when not to use it or alternatives for contract modifications, but for a creation tool this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createContractPhasecreateContractPhaseA
Add a new phase to an existing contract. Use this for add-on expansions, mid-contract changes, or creating distinct billing periods with different pricing. Phase type enum: active, pause, trial.
| Name | Required | Description | Default |
|---|---|---|---|
| contractId | Yes | The unique identifier (UUID) of the contract to add a phase to. | |
| name | Yes | Name for this contract phase (e.g. 'Add-On Phase', 'Expansion Phase'). | |
| start_date | No | Phase start date in ISO 8601 format. | |
| end_date | No | Phase end date in ISO 8601 format. | |
| phase_type | No | Type of phase: active, pause, or trial. | |
| description | No | Description of this phase. | |
| pricings | No | Array of pricing configurations for this phase. | |
| source_plan_phase_id | No | UUID of the plan phase template this was derived from. | |
| phase_metadata | No | Additional metadata for this phase as key-value pairs. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It lacks information about side effects (e.g., whether the phase is appended or inserted), required permissions, reversibility, or atomicity. The only behavioral clue is the phase_type enum constraint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that convey the purpose, usage guidance, and a key parameter hint. No extraneous words, and the most critical information 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?
Given the tool's complexity (10 parameters, nested objects, no output schema, no annotations), the description does not cover return value, preconditions (e.g., contract must exist), or the structure of the pricings array. It is adequate but leaves gaps that require inference from 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 schema already documents all parameters well. The tool description adds limited extra value (e.g., clarifying the phase_type enum, but the schema already lists the values). Thus, it meets the baseline of 3 but does not substantially enhance 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 adds a new phase to an existing contract, and lists specific use cases (add-on expansions, mid-contract changes, distinct billing periods). This effectively differentiates it from siblings like createContractPhasePricing and createContract.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases ('add-on expansions, mid-contract changes, or creating distinct billing periods with different pricing'), guiding the agent on when to use this tool. However, it does not mention when not to use it or compare directly with alternatives (e.g., updateContract for modifying phases).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createContractPhasePricingcreateContractPhasePricingA
Add pricing to a contract phase. REQUIRED: pass EXACTLY ONE of pricing_id (reference an existing product pricing) OR pricing (inline pricing object) — never both, never neither. Pair with product_id (existing product) or inline product to associate with a product.
| Name | Required | Description | Default |
|---|---|---|---|
| contractId | Yes | The unique identifier (UUID) of the contract. | |
| phaseId | Yes | The unique identifier (UUID) of the phase to add pricing to. | |
| pricing_id | No | UUID of an existing product pricing to reference. Either this or inline pricing must be provided. | |
| product_id | No | UUID of the product this pricing is for. | |
| pricing | No | Inline pricing configuration object. Either this or pricing_id must be provided. | |
| product | No | Inline product definition object (name, description, sku, tax_codes, etc.). | |
| start_date | No | Pricing start date in ISO 8601 format. | |
| end_date | No | Pricing end date in ISO 8601 format. | |
| anchor_date | No | Billing anchor date for this pricing. | |
| external_id | No | External identifier for this pricing entry. | |
| custom_data | No | Custom metadata for this pricing. | |
| description | No | Description for this pricing entry. | |
| plan_id | No | UUID of the plan template this pricing derives from. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral traits. It discloses it's a write operation ('add pricing') but does not mention side effects, error conditions, authorization requirements, or return value. The mutual exclusivity rule is more about parameter semantics than 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 two sentences, front-loaded with the action. The second sentence is somewhat long but packs essential constraints. Could be slightly more concise, but overall 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?
The description covers the core mutual exclusivity but omits context for other required parameters (contractId, phaseId) and optional parameters like start_date, end_date, etc. Given the complexity (14 params, nested objects, no output schema), it could be more complete in explaining how all pieces fit together.
Complex tools with many parameters or behaviors need more documentation. 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 has 100% description coverage for all parameters. The description adds value by clarifying the mutual exclusivity between pricing_id and pricing, and the pairing with product_id/product, which is not conveyed purely by the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Add pricing to a contract phase' with a specific verb and resource. It distinguishes the tool from siblings by focusing on contract phase pricing, and includes key usage constraints like 'pass EXACTLY ONE of pricing_id or pricing'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that exactly one of pricing_id or pricing must be provided, and that it should be paired with product_id or product. However, it does not provide guidance on when to choose one option over the other or compare with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createContractPromptcreateContractPromptA
Save a reusable AI extraction prompt that drives contract data extraction (used by extractContractFromRaw). Use this to create / update / version the instructions the AI follows when parsing raw contract text.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt_name | Yes | Identifier for this prompt template (e.g., 'Standard Contract Extraction', 'SaaS Subscription v2'). Used to look up / version-track the prompt. | |
| prompt_text | Yes | AI instructions that tell the model how to extract contract fields from raw text (e.g., what to do with dates, products, pricing tiers, billing cadence). This is the system/user prompt body the extractor will run against. | |
| prompt_schema | No | Optional schema name pinning the expected output shape (e.g., 'billing_schema', 'subscription_schema'). Null lets the AI infer. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions versioning but does not detail update behavior (overwrite vs new version) or any side effects (destructiveness, authentication beyond schema). Adequate but not thorough.
Agents need to know what a tool does to the 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. Parenthetical note efficiently connects to sibling tool. 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?
Adequate for a 4-param tool with no output schema. Lacks explicit behavior on duplicate prompt_name (create vs update vs version). __userContext is well-documented in schema. Minor gap for completeness.
Complex tools with many parameters or behaviors need more documentation. 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 3. Description adds no extra meaning beyond schema descriptions for parameters. Does not clarify parameter usage or format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb (save/create/update) and resource (reusable AI extraction prompt). Explicitly mentions sibling tool extractContractFromRaw to distinguish usage. No 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?
Implies when to use (for managing extraction prompts) and mentions the consumer (extractContractFromRaw). However, lacks explicit when-not-to-use or alternatives beyond the named sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createCustomAttributecreateCustomAttributeC
Create a new custom attribute definition for an entity type.
| Name | Required | Description | Default |
|---|---|---|---|
| attribute_key_name | Yes | Key name of the custom attribute (used as the field key). | |
| display_name | Yes | Display name for the custom attribute. | |
| module | Yes | Module/entity type this attribute applies to. Allowed values: 'customers', 'contracts', 'invoices', 'payments', 'products', 'plans'. | |
| data_type | Yes | Data type of the attribute. Valid values: 'STRING', 'INTEGER', 'FLOAT', 'BOOLEAN', 'LIST_STRING', 'ENUM', 'JSON', 'DATE'. | |
| default_value | No | Default value for the attribute. | |
| enum_choices | No | Array of allowed values for enum-type attributes. | |
| is_required | No | Whether the attribute is required. | |
| description | No | Description of the custom attribute. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits, but it only states the action without any details about side effects, idempotency, error handling, or implications for existing data. This is insufficient for an agent to understand 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 is a single sentence, which is concise but also very brief; it could be expanded to include key usage context without being verbose. It is minimally acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 9 parameters and no output schema, the description is insufficient. It does not explain return values, error conditions, or how the tool integrates with related tools like listCustomAttributes. The description lacks completeness.
Complex tools with many parameters or behaviors need more documentation. 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 all 9 parameters, so the baseline is 3. The description adds no additional meaning beyond what the schema already provides, thus it neither improves nor detracts from parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new custom attribute definition for an entity type,' which includes a specific verb ('create') and resource ('custom attribute definition'), distinguishing it from sibling tools that create other entities like accounts or customers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage guidelines are provided. The description does not specify when to use this tool versus alternatives, nor does it mention any prerequisites, constraints (e.g., uniqueness of attribute key), or conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createCustomercreateCustomerC
Creates a new customer in the system with various attributes including address, tax info, and contact details.
| Name | Required | Description | Default |
|---|---|---|---|
| external_id | No | External customer ID (optional). | |
| customer_name | Yes | Customer name (required). | |
| No | Customer primary email address (optional). | ||
| phone_number | No | Customer phone number (optional). | |
| address_line1 | No | Address line 1 (optional). | |
| address_line2 | No | Address line 2 (optional). | |
| address_line3 | No | Address line 3 (optional). | |
| address_city | No | Address city (optional). | |
| address_state | No | Address state (optional). | |
| address_zipCode | No | Address zip code (optional). | |
| address_country | No | Address country (optional). | |
| address_country_code | No | Address country code (optional). | |
| ship_to_line1 | No | Shipping address line 1 (optional). | |
| ship_to_line2 | No | Shipping address line 2 (optional). | |
| ship_to_line3 | No | Shipping address line 3 (optional). | |
| ship_to_city | No | Shipping address city (optional). | |
| ship_to_state | No | Shipping address state (optional). | |
| ship_to_zipCode | No | Shipping address zip code (optional). | |
| ship_to_country | No | Shipping address country (optional). | |
| ship_to_country_code | No | Shipping address country code (optional). | |
| communications_enabled | No | Enable/disable communications (defaults to true). | |
| auto_charge_enabled | No | Enable/disable auto-charge (defaults to true). | |
| business_entity_id | No | Business entity ID (UUID format, optional). | |
| custom_data | No | Custom key-value pairs for additional customer info (e.g., {"industry": "saas", "account_tier": "enterprise", "sales_rep": "jane"}). Optional. | |
| tax_info | No | List of tax identifiers. Each item: {country_code, tax_code, tax_id}. country_code uses mixed ISO formats (e.g. 'USA', 'IND', 'AUS', 'EU', 'GB'/'UK', 'SG', 'JP', 'BR', 'CA', and 2-letter codes for EU members like 'DE', 'FR', 'IT'). tax_code varies by country — common pairings: VAT (most of EU + UK + CH + most of MENA + IL/PH/ZA/EG/JO etc.), GST (India, Australia, Singapore), GST/HST (Canada), GST/IRD (NZ), TIN (USA, Qatar, Kuwait, Iraq, Libya), JCT (Japan), CNPJ (Brazil), SST (Malaysia), NPWP (Indonesia), MVA (Norway). Pair country_code + tax_code correctly. Optional. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only says 'Creates' without disclosing side effects, permissions, idempotency, rate limits, or error conditions. The internal __userContext parameter is not mentioned in 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?
Single sentence of 14 words, front-loaded with the action. Efficient but could be slightly expanded for clarity without losing 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?
Desperately incomplete for 26 parameters and no output schema. Missing return value info, error handling, authentication context, and behavioral details. The description adds almost no value beyond 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%, so baseline is 3. Description adds no additional meaning beyond summarizing parameter categories; it does not compensate with extra context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Creates a new customer' with a brief mention of attributes. It distinguishes from 'updateCustomer' but not from 'createCustomerAddress', which also deals with addresses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool vs alternatives, no prerequisites mentioned, and no when-not-to-use advice. Given 30+ sibling tools, this is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createCustomerAddresscreateCustomerAddressB
Add a new address to a customer.
| Name | Required | Description | Default |
|---|---|---|---|
| customerId | Yes | The unique identifier of the customer. | |
| line1 | Yes | Address line 1. | |
| line2 | No | Address line 2. | |
| city | No | City. | |
| state | No | State/province. | |
| zipCode | No | ZIP/postal code. | |
| country | No | Country name. | |
| country_code | No | ISO country code (e.g., 'US', 'GB'). | |
| line3 | No | Address line 3. | |
| is_default_billing | No | Set as default billing address. Default: false. | |
| is_default_shipping | No | Set as default shipping address. Default: false. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description does not disclose any behavioral traits such as side effects, default behaviors (e.g., is_default fields default to false), authorization needs, or return values. With no annotations, the description bears the full burden and fails to provide necessary 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, clear sentence with no unnecessary words. It is appropriately concise and 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?
Given the complexity (12 parameters, nested objects, no output schema) and absence of annotations, the description is insufficient. It does not explain what the tool returns, any validation or constraints, or how to interpret the response. A more complete description is needed for effective use.
Complex tools with many parameters or behaviors need more documentation. 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 no extra meaning beyond the schema; it merely repeats the tool's purpose. The parameter descriptions are basic but present.
Input schemas describe structure but not intent. Descriptions should explain 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 'add', the resource 'address', and the context 'to a customer'. This distinguishes it from sibling tools like updateCustomerAddress and listCustomerAddresses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool versus alternatives, no prerequisites, and no context on when not to use it. The description is purely operational.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createEntitlementcreateEntitlementA
Creates a new entitlement in the system with various attributes including name, description, type, units, and product association. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Entitlement name (required). | |
| description | No | Entitlement description (optional). | |
| entitlement_type | No | Type of entitlement (e.g., 'Quantity', 'Feature', 'Access'). | |
| units | No | Units for the entitlement (e.g., 'units', 'GB', 'users'). | |
| is_active | No | Whether the entitlement is active (defaults to true). | |
| product_id | No | Associated product ID (UUID format, optional). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the approval gate behavior, which is a key trait beyond a basic create, but does not mention idempotency, error handling, or mutation specifics.
Agents need to know what a tool does to the 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 purpose, and the second sentence provides crucial behavioral guidance. 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?
Given the tool's complexity (7 parameters, nested objects), the description covers the main purpose and a key behavioral note. However, it lacks information about return values or side effects, which would be helpful for completeness.
Complex tools with many parameters or behaviors need more documentation. 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 minimal extra meaning beyond the schema (e.g., 'UUID format' is mentioned in the schema for product_id). The __userContext parameter is only hinted as 'internal'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Creates a new entitlement') and lists specific attributes (name, description, type, units, product association), distinguishing it from update and delete 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 provides a critical usage guideline: the host enforces confirmation via the approval gate, so the agent must not ask the user to re-confirm. However, it does not compare with alternative create tools or specify when to use this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createInvoiceChargecreateInvoiceChargeB
Create an auto-charge for an invoice. Triggers payment collection via the customer's configured payment method.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The unique identifier (UUID) of the invoice to charge. | |
| connector | No | Optional payment provider connector config object (e.g., {"name": "stripe", "reference_id": "cus_xxx"}). Backend auto-detects if omitted. | |
| source | No | Optional source identifier for the charge. | |
| payment_method_types | No | Optional list of allowed payment method types (e.g., ["card", "ach"]). | |
| skip_invoice_due_date_check | No | If true, charge proceeds even if the invoice is not yet due. Defaults to false. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the tool triggers payment collection but omits potential side effects (e.g., failure cases, impact on invoice status, idempotency, rate limits). Limited transparency for a payment-related tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action. No unnecessary words. Efficiently communicates the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should mention return values (e.g., charge ID, success status). It does not. However, it covers the basic action. For a tool with many optional parameters, some context on defaults (like connector auto-detection) 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 descriptions cover all parameters (100% coverage), so baseline is 3. The description adds no additional meaning beyond what the schema provides; it doesn't explain parameter relationships or usage patterns.
Input schemas describe structure but not intent. Descriptions should explain 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 (create), resource (auto-charge for invoice), and action (triggers payment collection via customer's payment method). It distinguishes from siblings like 'payInvoice' and 'generateInvoicePaymentLink' by specifying automation and use of configured payment method.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 lacks guidance on when to use this tool versus alternatives like 'payInvoice' or 'generateInvoicePaymentLink'. No mention of prerequisites, scenarios (e.g., invoice due, customer has payment method), or 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.
createInvoiceCreditNotecreateInvoiceCreditNoteB
Create a credit note against a specific invoice. The credit_note_amount is in the invoice's currency (e.g. 25 for $25). The API stores amounts in cents internally. Returns the created credit note.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The unique identifier (UUID) of the invoice to create a credit note against. | |
| credit_note_amount | Yes | Amount for the credit note in the invoice's currency (e.g. 25 for $25.00). | |
| reason | Yes | Reason for creating this credit note. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that the amount is in the invoice's currency and that the API stores amounts in cents internally. It also states the return value. However, it does not mention side effects, idempotency, or authentication 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 extremely concise with two sentences. The first sentence states the purpose, the second provides unit clarification and return value. No superfluous 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?
The description is brief but covers the core purpose and unit detail. Given no output schema, 'Returns the created credit note' is minimal but sufficient. However, it lacks context about prerequisites, authentication, or the structure of the returned object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by explaining the credit note amount unit and internal conversion ('stores amounts in cents internally'), which is not in the schema. The other parameters are adequately described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a credit note against a specific invoice. It specifies the verb 'create' and resource 'credit note', and the scope is against an invoice. However, it does not explicitly differentiate from sibling tools like refundPayment or voidInvoice, which could be alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 over alternatives (e.g., refundPayment, voidInvoice). It lacks context about prerequisites (e.g., invoice must exist and be in a certain state) or 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.
createJournalEntrycreateJournalEntryB
Create a new manual journal entry with debit and credit lines.
| Name | Required | Description | Default |
|---|---|---|---|
| posted_at | No | Posting date of the journal entry in ISO 8601 format (e.g., '2026-01-15T00:00:00'). | |
| description | Yes | Description/memo for the journal entry. | |
| currency | Yes | Three-letter ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP'). | |
| journal_lines | Yes | Array of journal lines. Each line requires: {account_id, debits, credits, currency}. Use 'debits' and 'credits' (plural, integers in cents). Example: [{account_id:'...', debits:10000, credits:0, currency:'USD'}, {account_id:'...', debits:0, credits:10000, currency:'USD'}]. Optional tags: customer_id, contract_id, invoice_id, custom_tags. | |
| custom_data | No | Additional metadata as key-value pairs. | |
| status_type | No | Journal entry status (default: 'posted'). | posted |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states 'Create' but does not disclose authorization needs, validation, defaults (e.g., status_type='posted'), or 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?
One concise sentence with no redundancy, front-loads the key action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite complex nested parameters and accounting concepts, the description is minimal. It does not explain debit/credit semantics, output, or the role of __userContext.
Complex tools with many parameters or behaviors need more documentation. 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 detailed parameter descriptions. The tool description adds no additional meaning beyond the schema, 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?
The description clearly states the tool creates a new manual journal entry with debit and credit lines, which is specific and distinguishes it from sibling tools like listJournalEntries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool versus alternatives, no prerequisites or when-not-to-use mentioned. The description lacks context for optimal invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createPaymentcreatePaymentA
Record a successful manual/offline payment or tax-withheld amount, equivalent to the frontend Add Payment flow. Link to invoices via payment_parts array. Use type='payment' with payment_method='bank_transfer', 'check', 'cash', or 'card'. Use type='tax_withheld' without payment_method. Always use status='success'. Do not use status='created' for manually recorded payments; created payments are unrealized and will not reduce invoice amount_due or mark invoices paid. The backend assigns the payment timestamp when the payment is recorded. Refunds, authorizations, reversals, payment links, and gateway charge attempts are outside this tool's scope.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | No | UUID of the customer making the payment. | |
| amount | Yes | Total payment amount in the smallest currency unit (e.g. cents). | |
| currency_code | Yes | Three-letter ISO 4217 currency code (e.g. USD). | |
| payment_parts | No | Array of invoice allocations. Each element: {invoice_id: 'UUID', amount: 10000}. Links the payment to one or more invoices. | |
| payment_method | No | Manual payment method. Required when type='payment'; omit for type='tax_withheld'. Supported values match the frontend Add Payment flow. | |
| type | No | Frontend Add Payment type. Use 'payment' for a manual/offline payment, or 'tax_withheld' for a tax withheld amount. Refunds, payment reversals, and authorizations are outside this tool's scope. | payment |
| status | No | Payment status for this recorded payment. Use 'success' for manually recorded/offline payments so linked invoices are marked paid when payment_parts cover the amount due. | success |
| external_id | No | External reference ID for this payment. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description discloses backend assigns timestamp, effect of status='success' on invoice payment, and that created status is unrealized. Could mention return value or side effects, but sufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph with key points front-loaded. No wasted sentences, but could be slightly more structured for easier parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 most aspects, but lacks description of return value (no output schema) and does not address __userContext parameter. For a complex tool with 9 params, these gaps reduce completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value beyond schema: explains type and payment_method relationship, provides example for payment_parts, clarifies amount units. Still, some parameter descriptions in schema are already clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool records manual/offline payments or tax-withheld amounts, equivalent to frontend Add Payment flow. Distinguishes from sibling tools like refundPayment, payInvoice, 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?
Explicitly specifies when to use (manual/offline payments, tax withheld) and what not to use (refunds, authorizations, reversals, etc.). Provides guidance on type, status, and payment_method usage. Includes warning about status='created' not reducing amount_due.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createPlancreatePlanA
Create a new plan — a reusable contract template with phased pricing. Hits POST /plans (same Plan table the Zenskar app's PlansV2 page reads). The request body shape is NESTED, not flat: top-level fields are name, status, schedule, optional description, optional phases[]. Currency is set per-pricing inside phase.pricings[].pricing.pricing_data.currency, NOT at the top level. A plan with no phases is unusable in the UI — always include at least one phase. Plan starts as 'draft'; the user must publish it to make it active.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the plan (required). | |
| status | Yes | Plan status (required). Valid values: 'draft', 'active', 'archived'. New plans almost always start as 'draft' — the user publishes via the UI to activate. | |
| schedule | Yes | Plan-level schedule (required). Object: {duration: ISO-8601 e.g. 'P1Y'|'P1M', start_offset?: ISO-8601 e.g. 'P0D', trigger_type?: 'time_based'}. Example: {"duration":"P1Y","start_offset":"P0D"}. | |
| description | No | Optional plan description. | |
| phases | Yes | Array of plan phases (REQUIRED — must be non-empty). Each phase: {name: string (required), schedule: {duration, start_offset?, trigger_type?} (required), order: int (required, 0-indexed), description?: string, features?: CreateProductPricingRequestSchema (one-off phase-level pricing/features), pricings?: [{schedule, pricing_id?, product_id?, pricing?: CreateProductPricingRequestSchema, product?: CreateProductRequestSchema}] (per-product pricings)}. Each phase must have features OR a non-empty pricings array. Minimal example: [{"name":"Phase 1","schedule":{"duration":"P1Y"},"order":0,"features":{"pricing_data":{"pricing_type":"features","currency":"USD"}}}]. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool hits POST /plans, creates a persistent record, and that plans start as 'draft'. It also notes the nested structure constraint. This covers key traits for a creation 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 a single paragraph, front-loaded with the main purpose, then details. It is somewhat lengthy due to nested complexity, but every sentence adds value. Could be slightly more concise, but it's well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity (nested objects, 6 parameters, no output schema), the description is fairly complete. It explains the endpoint, nested structure, phase requirements, status, and currency placement. It lacks explanation of return values, but that is partially mitigated by the schema 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% (baseline 3), but the description adds significant clarity: it explains the nested structure, that currency is not top-level, the requirement for at least one phase, and provides an example for schedule. This goes well beyond the schema's descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new plan — a reusable contract template with phased pricing', specifying the verb (create) and resource (plan). It also mentions the API endpoint and the UI page, making the tool's 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?
The description provides usage guidance: the nested request body shape, currency location inside phases, the requirement to always include at least one phase, and that the plan starts as 'draft' and must be published. It does not explicitly compare with sibling tools but offers enough context for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createProductcreateProductC
Create a new product in the catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the product. | |
| sku | No | SKU (stock keeping unit) identifier. | |
| description | No | Description of the product. | |
| type | Yes | Product type. Valid values: 'product' (standard product) or 'group' (product group). | |
| is_active | No | Whether the product is active. | |
| tax_codes | No | Tax code mapping object keyed by region/provider (e.g., {"avalara": "PS081282", "stripe": "txcd_99999999"}). | |
| custom_attributes | No | Custom attributes as key-value pairs. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It merely states 'Create a new product' with no disclosure of side effects, authorization requirements, rate limits, or success/failure behavior. This is insufficient for a creation 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 a single sentence, no waste, and front-loaded with key information. However, it is overly terse and could be expanded without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description should provide more context about the tool's behavior and expected results. With 8 parameters including nested objects, the current level of detail is insufficient for the agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all 8 parameters (100% coverage). The description adds no additional meaning beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and the resource 'product in the catalog', which is specific. It distinguishes from siblings like 'updateProduct' and 'createProductPricing', but could be more explicit about catalog context. Overall purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines provided. The description does not indicate when to use this tool versus alternatives, any prerequisites, or scenarios where it should not be used. This is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createProductPricingcreateProductPricingA
Create a new pricing configuration for a product. MANDATORY pre-call checklist — ask the user for ALL of these and do NOT default any silently: (1) currency (ISO 4217), (2) pricing_type (per_unit|flat_fee|tiered|volume|percent|package|step|matrix), (3) unit_amount in MAJOR currency units (float — 3 means $3, NOT 300 cents), (4) quantity object with type (fixed|metered) and unit label (e.g. 'user', 'request') and either quantity (for fixed) or aggregate_id (for metered), (5) billing_period.cadence (ISO 8601 — 'P1M' monthly, 'P3M' quarterly, 'P1Y' yearly) and billing_period.offset. SKIPPING quantity OR billing_period causes the Zenskar UI to render 'Undefined- Every Undefined Undefined' for billing cadence and 0 for billing metric — that is the #1 bug reported on this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| productId | Yes | The unique identifier of the product. | |
| name | No | Name of the pricing (optional). | |
| description | No | Description of this pricing configuration. | |
| pricing_data | Yes | Pricing data object (required). MUST include 'pricing_type' discriminator AND 'currency' (ISO 4217, e.g. 'USD'). 'unit_amount' is in MAJOR currency units (float) — 3 means $3, NOT 300 cents. Do NOT convert to cents. Supported pricing_type values with examples: flat_fee: {pricing_type:'flat_fee', unit_amount:100, currency:'USD'}. per_unit: {pricing_type:'per_unit', unit_amount:3, currency:'USD'}. tiered: {pricing_type:'tiered', unit_amount:[10,5], up_to:[100,null], currency:'USD'}. volume: {pricing_type:'volume', unit_amount:[10,5], up_to:[100,null], currency:'USD'}. percent: {pricing_type:'percent', percentage:5.0, currency:'USD'}. package: {pricing_type:'package', package_size:10, unit_amount:50, currency:'USD'}. step: {pricing_type:'step', unit_amount:[...], up_to:[...], currency:'USD'}. matrix: {pricing_type:'matrix', dimensions:[...], values:[...], currency:'USD'}. Optional inside pricing_data for per_unit: 'proration_type' ('day_based'|'cadence_based'), 'charge_full_amount' (bool). | |
| quantity | Yes | Quantity configuration (REQUIRED — ask the user; do not omit). Top-level object, NOT inside pricing_data. Shape: {type: 'fixed'|'metered', quantity?: number, unit?: string, aggregate_id?: UUID}. 'fixed' = static quantity (e.g. seats); also set 'unit' (label like 'user') and 'quantity' (number). 'metered' = consumption tracked via a billable metric; set aggregate_id to the billable-metric UUID. Omitting this object causes the UI to show 0 for billing metric. | |
| billing_period | Yes | Billing cadence (REQUIRED — ask the user; do not omit). Backend shape: {cadence: ISO-8601 duration ('P1M'=monthly, 'P3M'=quarterly, 'P1Y'=annually), offset: 'prepaid'|'postpaid'}. Both fields needed. Example: {"cadence":"P1M","offset":"prepaid"}. Omitting this causes the UI to render 'Undefined- Every Undefined Undefined'. | |
| is_recurring | No | Whether this pricing is recurring (true) or one-time (false). | |
| return_existing | No | If true, returns existing pricing with matching hash instead of creating a duplicate. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist. The description reveals important behavioral details like unit_amount in major currency units and UI consequences of omission, but lacks side effects, auth requirements, 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?
The description is long but well-structured, front-loading the mandatory checklist. It earns its length by covering critical guidance, though minor trimming could improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (9 params, no output schema, nested objects), the description covers essential quirks (currency units, UI bugs) and provides a comprehensive pre-call checklist. Lacks return value details but acceptable for a create 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%, baseline is 3. The description adds significant value beyond schema by providing a mandatory checklist, examples for pricing_type, and explicit warnings about required fields. This compensates for 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 clearly states the tool creates a new pricing configuration for a product, which is a specific verb and resource. It distinguishes from siblings like createContractPhasePricing by focusing on product-level pricing, though not explicitly 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 description provides a mandatory pre-call checklist and warns about UI bugs if fields are omitted. It does not explicitly compare to alternative tools but gives strong context for 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.
createRawMetriccreateRawMetricA
Create a new Usage Event schema. This defines the schema used for ingesting usage events. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-friendly name for the Usage Event schema (raw metric). | |
| api_slug | Yes | API slug used when ingesting Usage Events (lowercase, underscores). | |
| dataschema | No | Data schema of the Usage Event resource. Structure: {"data": {custom_fields}, "timestamp": "DateTime64", "customer_id": "String"}. The 'timestamp' and 'customer_id' fields are mandatory schema fields for usage ingestion. The 'data' map must include only valid ClickHouse types (String, Int64, Float64, Date32, DateTime64, UUID, Bool); use 'Bool' instead of 'Boolean'. | |
| column_order | No | Optional ordered list of columns for downstream processing. Locked to ['timestamp'] in production; leave as-is unless backend explicitly requests a schema change. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions the approval gate behavior but does not disclose other traits like whether the operation is destructive, idempotent, or requires special permissions. It implies mutation but lacks explicit safety 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?
The description is extremely concise with two sentences, no redundant information, and front-loads the core 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?
Despite short length, the description covers the primary purpose and a critical behavioral note. Given 5 parameters, no output schema, and the complexity of creating a schema, it is adequate but could include more about return values or post-creation steps.
Complex tools with many parameters or behaviors need more documentation. 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 all parameters. The description adds no additional semantics beyond what the schema provides, meeting the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a 'Usage Event schema' and defines it as the schema for ingesting usage events. It is specific about the resource and action, distinguishing it from sibling tools like createAggregate or getRawMetricById.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guideline: 'Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.' This tells the agent when not to ask for confirmation, though it does not exhaustively compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createTaxCategorycreateTaxCategoryC
Create a new tax category.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the tax category. | |
| external_codes | No | Array of external tax code mappings (e.g., [{ "provider": "avalara", "code": "P0000000" }]). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description gives no behavioral details (e.g., side effects, authentication, rate limits, or whether the tool is idempotent). The agent has no information about the implications of calling this 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 a single short sentence, which is concise but lacks sufficient detail. It is appropriately front-loaded but could benefit from additional context without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and the simplicity of the tool, the description is incomplete. It fails to mention required parameters (e.g., 'name') or any constraints, leaving significant gaps for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. 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 are already well-documented. The description adds no additional meaning beyond the schema, meeting the baseline for this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('create') and the resource ('tax category'), distinguishing it from sibling tools like createAccount or createCustomer. However, it lacks specificity about the context or constraints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool versus alternatives (e.g., updating vs. creating). No prerequisites or conditions are mentioned, leaving the agent with minimal context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteAggregatedeleteAggregateA
Permanently delete a Billable Metric. DESTRUCTIVE: cannot be undone. ONLY call when the user explicitly says 'delete' or 'remove' for THIS billable metric. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| aggregateId | Yes | The unique identifier (UUID) of the billable metric (aggregate) to delete. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the action is destructive and irreversible ('Permanently delete', 'cannot be undone') and explains the host's approval gate. However, it does not mention potential side effects on related entities (e.g., invoices using the metric) or the return value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, efficient and front-loaded. Each sentence adds value: purpose, destructiveness warning, and usage guideline. No extraneous 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 delete tool with no output schema and no annotations, the description provides essential information: what it does, when to call, and behavioral notes. It lacks details on error handling or edge cases, but is generally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description does not add meaningful parameter information beyond what the schema already provides. The aggregateId is described as UUID in the schema, and __userContext is internal. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Permanently delete a Billable Metric.' It uses a specific verb ('delete') and resource ('Billable Metric'), and distinguishes from sibling delete tools by specifying 'THIS billable metric'. 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?
Explicitly states when to use: 'ONLY call when the user explicitly says 'delete' or 'remove' for THIS billable metric.' Also instructs not to ask the user to re-confirm because the host enforces approval. This provides clear guidance on tool invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteContactdeleteContactA
Permanently delete a contact by ID. DESTRUCTIVE — only call when the user explicitly says 'delete' for THIS contact; never as automatic recovery from another failed operation. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | The unique identifier (UUID) of the contact to delete. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description labels the tool as 'DESTRUCTIVE' and notes that the host enforces user confirmation via an approval gate. This adds behavioral context beyond the input schema, though it could mention potential side effects like cascading deletions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each with a distinct purpose: stating the action, providing usage guidelines, and noting behavioral context. It is front-loaded and contains 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?
The tool is simple (delete a contact). The description covers the destructive nature, usage conditions, and the host's approval mechanism. It does not specify return values, but given no output schema, this 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%, so the input schema already documents both parameters adequately. The description does not add additional meaning beyond the schema, earning a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Permanently delete a contact by ID', specifying the verb (delete), resource (contact), and method (by ID). This distinguishes it from sibling tools like deleteCustomer or deleteContract.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'only call when the user explicitly says delete for THIS contact; never as automatic recovery from another failed operation'. It also instructs not to ask the user for re-confirmation because the host enforces it. These conditions are clear and guide correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteContractdeleteContractA
Permanently delete a DRAFT contract. ONLY works on contracts with status='draft'. Do NOT call on ACTIVE, EXPIRED, or PAUSED contracts. DESTRUCTIVE: removes all phases, products, and pricing associations. NEVER call as automatic recovery from another failed operation (e.g., do not retry as a fallback after expireContract or voidInvoice fails). ONLY call when the user explicitly says 'delete' or 'remove' for THIS draft contract. If a non-destructive action fails, surface the error verbatim and stop. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| contractId | Yes | The unique identifier (UUID) of the contract to delete. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the action is 'DESTRUCTIVE' and 'removes all phases, products, and pricing associations'. It also mentions that the host enforces user confirmation via an approval gate, clarifying the identity verification process without requiring the agent to ask the user again.
Agents need to know what a tool does to the 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 sized and front-loaded with the primary purpose. Every sentence earns its place: first states purpose, then constraints, then destructive behavior, then usage rules, then error handling, and finally confirmation protocol. No redundant or unclear statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 covers the essential aspects for agent invocation: what the tool does, when to use it, side effects, and error handling. However, it does not specify what the tool returns upon success (e.g., confirmation message or deleted object), leaving a minor gap in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for contractId and __userContext. The description adds meaning beyond the schema by stating the precondition that the contract must have status='draft', which is a critical constraint not found in the schema. However, it does not elaborate further on the 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 clearly states 'Permanently delete a DRAFT contract' and specifies that it only works on contracts with status='draft'. This explicitly defines the action (delete) and the exact resource (draft contracts), distinguishing it from other delete tools like deleteContact or deleteCustomer, and from other contract operations like pauseContract or expireContract.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 extensive usage guidance: 'Do NOT call on ACTIVE, EXPIRED, or PAUSED contracts', 'NEVER call as automatic recovery from another failed operation', and 'ONLY call when the user explicitly says delete or remove for THIS draft contract'. It also instructs to surface error verbatim for non-destructive failures and notes that the host handles confirmation, so no re-confirmation is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteCustomerdeleteCustomerA
Permanently delete a customer by ID. DESTRUCTIVE and cannot be undone. The customer must not have active contracts or unpaid invoices. ONLY call when the user explicitly says 'delete' for THIS customer; never as automatic recovery from another failed operation. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| customerId | Yes | The unique identifier (UUID) of the customer to delete. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It clearly labels the operation as DESTRUCTIVE and irreversible, and adds important context about preconditions and host-enforced confirmation. Missing details on return/errors but sufficient for a destructive action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each earning its place: action nature, preconditions, usage rule. No redundant or irrelevant 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 destructive tool with no output schema, the description provides necessary context: preconditions, usage rules, behavioral nature. Minor omission of success/error response 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%, with clear UUID description for customerId and internal context for __userContext. The description adds no additional semantic value beyond the schema, 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?
The description clearly states the action (permanently delete), resource (customer by ID), and explicitly notes it is destructive and irreversible, distinguishing it from update or create 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?
Explicitly states when to call: only on explicit user 'delete' for this customer, not automatic recovery. Provides preconditions (no active contracts/invoices) and instructs not to ask for re-confirmation due to host approval gate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteEntitlementdeleteEntitlementA
Permanently delete an entitlement. DESTRUCTIVE: cannot be undone. ONLY call when the user explicitly says 'delete' or 'remove' for THIS entitlement. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| entitlementId | Yes | The unique identifier (UUID) of the entitlement to delete. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description warns 'DESTRUCTIVE: cannot be undone' and explains the approval process. It adds context about irreversible effects but could mention potential side effects or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences, each serving a purpose: stating the action, emphasizing destructiveness, and providing usage instructions. No 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 deletion tool with one required parameter, the description covers purpose, destructiveness, and confirmation flow. It lacks return value information but is otherwise sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for entitlementId and __userContext. The description does not add parameter meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Permanently delete an entitlement.' It clearly identifies the verb (delete) and the resource (entitlement), distinguishing it from sibling tools like createEntitlement or updateEntitlement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides specific guidance: 'ONLY call when the user explicitly says delete or remove for THIS entitlement.' It also clarifies that the host enforces confirmation via an approval gate and instructs the agent not to ask for re-confirmation, reducing ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteInvoicedeleteInvoiceA
Permanently delete a draft invoice. ONLY works on status='draft'. For approved invoices, use voidInvoice (with caveats) or createInvoiceCreditNote — do NOT call deleteInvoice on approved invoices. DESTRUCTIVE: record removed permanently. ONLY call when the user explicitly says 'delete' for THIS invoice; never call as automatic recovery from another failed operation. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The unique identifier (UUID) of the draft or upcoming invoice to delete. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses destructive nature, permanent removal, and the host-enforced confirmation via approval gate (so agent shouldn't ask again). This meets the burden for 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?
Highly concise: three clearly structured sentences covering constraint, destructive warning, and procedural caution. No wasted words, all earned their 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 delete tool, this description covers preconditions, status restriction, alternatives, and agent behavior guidance. Complete despite lack of 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%, so baseline 3 applies. Description doesn't add extra details about invoiceId format or __userContext beyond schema, but it doesn't need to.
Input schemas describe structure but not intent. Descriptions should explain 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 permanently deletes only draft invoices, with explicit verb 'delete' and resource 'draft invoice'. It also distinguishes from siblings like voidInvoice and createInvoiceCreditNote.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit when to use (only on user explicit 'delete' for this invoice, draft status) and when not (approved invoices, automatic recovery). Names alternative tools for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteManualPaymentdeleteManualPaymentA
Permanently delete a manual payment record. Only works on payments in an eligible status for deletion. DESTRUCTIVE — only call when the user explicitly says 'delete' for THIS payment; never as automatic recovery from another failed operation. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | The unique identifier (UUID) of the payment to delete. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses destructive nature, permanent deletion, eligibility status requirement, and interaction with approval gate. Lacks details on error handling or return value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise, front-loaded sentences with no wasted words. Key points are immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, usage constraints, and behavioral expectations well given no output schema. Could mention what happens if payment status not eligible.
Complex tools with many parameters or behaviors need more documentation. 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 parameters. Description adds no extra parameter semantics beyond what 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?
Clearly states it deletes a manual payment record with specific verb and resource, distinguishing it from siblings like editManualPayment or deleteInvoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when to call (user says 'delete') and when not (automatic recovery), and clarifies host enforcement of confirmation, eliminating need for re-confirmation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deletePaymentMethoddeletePaymentMethodA
Permanently delete a payment method from a customer. DESTRUCTIVE — saved card/bank details will be removed; recurring auto-charges using this method will fail. Only call when the user explicitly says 'delete' for THIS payment method. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| customerId | Yes | The unique identifier (UUID) of the customer. | |
| paymentMethodId | Yes | The unique identifier (UUID) of the payment method to delete. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden of disclosing behavioral traits. It labels the tool as 'DESTRUCTIVE' and details specific consequences: saved details removed and auto-charges will fail. It also explains the host's confirmation enforcement via the approval gate, covering both safety and workflow 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 exceptionally concise, consisting of two sentences that each add critical value. The first sentence states the primary action and its destructive nature, while the second provides usage guidelines and behavioral context. No unnecessary words 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?
Given the tool's simplicity (a delete operation), the description is complete. It explains the outcome, consequences, and the host's approval workflow. There is no output schema, but the description sufficiently covers what the agent needs to know 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 input schema has 100% description coverage, providing full details for the two required parameters (customerId, paymentMethodId). The description does not add new parameter information beyond what the schema already provides, so it meets the baseline for high schema coverage without exceeding 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 clearly states the tool's action: 'Permanently delete a payment method from a customer.' It specifies the resource (payment method) and the consequence (removal of card/bank details, causing recurring charges to fail). This distinguishes it from sibling tools like attachPaymentMethod or listPaymentMethods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Only call when the user explicitly says delete for THIS payment method.' It also instructs the agent not to ask for re-confirmation because the host already enforces confirmation via the approval gate. This clearly communicates usage constraints and behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
downloadInvoicedownloadInvoiceC
Download an invoice in JSON format.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The ID of the invoice to download. | |
| invoice_json_key | No | Optional key for invoice JSON. | |
| customer_id | No | Optional customer ID associated with the invoice. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits beyond the basic action. Information on authentication, rate limits, side effects (if any) is missing.
Agents need to know what a tool does to the 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 with no redundancy. It is front-loaded but lacks depth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 existence of siblings like getInvoiceById, the description does not clarify the difference. No output schema, and no information on return format or pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds no additional meaning beyond what the schema already provides, meeting 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 clearly states 'Download an invoice in JSON format', identifying the verb, resource, and format. However, it does not distinguish from similar tools like getInvoiceById which may also return JSON.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool versus alternatives like getInvoiceById or getInvoiceSummary. No context on prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editManualPaymenteditManualPaymentB
Edit a manual payment's details (amount, method, etc.). Uses the manual_payment-specific endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | The unique identifier (UUID) of the manual payment to edit. | |
| amount | No | Updated payment amount. | |
| payment_method_details | No | Updated payment method details object. | |
| payment_parts | No | Updated invoice allocations. Array of {invoice_id, amount}. | |
| external_id | No | Updated external reference ID. | |
| timestamp | No | Updated payment timestamp in ISO 8601 format. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It mentions using a specific endpoint but discloses no behavioral traits such as authorization requirements, destructiveness, or side effects. The edit operation implies mutation, but no details on reversibility or impact are given.
Agents need to know what a tool does to the 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 with no redundancy. However, it could benefit from more structure to improve readability and scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, nested objects, no output schema, and no annotations, the description is insufficient. It fails to explain return values, required permissions, or post-edit effects, leaving significant gaps for agent understanding.
Complex tools with many parameters or behaviors need more documentation. 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 adds minimal value by listing example fields (amount, method) but does not clarify complex parameters like payment_method_details or payment_parts. Schema descriptions already cover 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 clearly states it edits a manual payment's details, specifying the verb (edit), resource (manual payment), and scope (details like amount, method). The name reinforces this, distinguishing it from sibling tools like 'updatePayment' which likely handles other payment 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?
No guidance on when to use this tool versus alternatives such as 'updatePayment' or 'deleteManualPayment'. The description does not specify context or exclusions, leaving the agent to infer based on the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editPauseContracteditPauseContractA
Edit an existing pause phase on a contract. Use this when 'resumeContract' returns 'pause phase not found' for a future-dated pause, or when the user wants to set a resume date (pause end_date), shift the pause start, or change the unpause_extension_policy. Hits PATCH /contract_v2/{contractId}/pause.
| Name | Required | Description | Default |
|---|---|---|---|
| contractId | Yes | The unique identifier (UUID) of the contract whose pause phase to edit. | |
| start_date | No | New pause start date (ISO 8601). Optional. | |
| end_date | No | Resume date — when the pause ends (ISO 8601). Set this to schedule a future resume. | |
| pause_phase_id | No | UUID of the specific pause phase to edit. Optional — required only when a contract has multiple pause phases and you need to disambiguate which one to edit. | |
| unpause_extension_policy | No | How to handle the contract end date when unpaused. 'extend' or 'overlap'. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It identifies the action (edit) and lists editable fields, but omits side effects, permissions, idempotency, or whether the operation is destructive. Basic but not comprehensive.
Agents need to know what a tool does to the 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: the first states the purpose, the second gives usage guidance. No wasted words. Front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate tool with 6 parameters and no output schema, the description covers core usage well. However, it lacks return value information (e.g., what the response contains) and doesn't mention the internal __userContext parameter, 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%, baseline 3. The description adds context by tying parameters to user scenarios (e.g., 'end_date' as 'resume date', 'pause_phase_id' for disambiguation). This enhances the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Edit an existing pause phase on a contract' with a specific verb and resource. It distinguishes from siblings like 'pauseContract' and 'resumeContract' by referencing error-driven scenarios.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when-to-use scenarios: 'when resumeContract returns pause phase not found' and enumerates user intents (set resume date, shift start, change policy). Mentions the underlying endpoint (PATCH) for reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expireContractexpireContractA
Expire an ACTIVE or PAUSED contract by adjusting its end_date. Allowed status transitions: ACTIVE→EXPIRED, PAUSED→EXPIRED. EXPIRED is terminal — calling on an already-expired contract returns 400; do NOT retry, do NOT escalate to deleteContract or any other destructive tool as a fallback. Verify contract.status via getContractById before calling. Idempotency: NO. The contract expires at end of day 23:59:59.999999. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| contractId | Yes | The unique identifier (UUID) of the contract to expire. | |
| expiry_date | No | Date to expire the contract (e.g. 2026-12-31). Defaults to today if not provided. Must not be earlier than contract.start_date. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses idempotency is NO, timing (end of day 23:59:59.999999), and host-enforced user confirmation via approval gate. Specifies error behavior for already-expired contracts. No annotations provided, so description fully covers behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is efficiently structured with front-loaded purpose and clear rules. Slightly verbose with 'Idempotency: NO' phrasing, but overall no wasted 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, but description adequately covers all critical context: allowed states, error handling, timing, confirmation flow. Lacks response format, but mutation tools often omit this. Sufficient for agent to use 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 baseline is 3. Description adds context: expiry_date defaults to today and must not be earlier than start_date, and contractId is a UUID. Adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool expires an ACTIVE or PAUSED contract by adjusting its end_date, specifying allowed status transitions (ACTIVE→EXPIRED, PAUSED→EXPIRED). Unambiguously distinguishes from destructive tools like deleteContract.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when to use (contracts with status ACTIVE or PAUSED), when not to use (already-expired returns 400), and provides alternatives (verify via getContractById, do not escalate to deleteContract). Also instructs not to ask user for confirmation due to approval gate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extractContractFromRawextractContractFromRawA
Extract structured contract data from raw text content using AI. This tool analyzes natural language contract descriptions and extracts key fields like dates, products, pricing, and billing terms. The extracted data can then be used to create a customer and contract via createCustomer and createContract tools.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | The raw text content describing the contract (e.g., 'Contract starts on 1st Jan 2025 and ends on 31 Dec 2025 with a single product called chat subscription, cost is $10 per month prepaid.'). | |
| name | Yes | A name for the contract being extracted. | |
| organization_id | No | The organization ID for the contract extraction (will be auto-populated from user context if not provided). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description is the sole source of behavioral information. It mentions AI analysis and extraction of specific fields but does not disclose side effects (e.g., whether data is stored), authentication requirements, error handling, or rate limits. It adequately describes the tool's function but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences that effectively convey the tool's purpose and usage context without 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?
Given the absence of an output schema and annotations, the description should provide more information about the return format or behavior. It mentions extracted fields but does not specify the structure of the output, leaving agents unclear about what to expect.
Complex tools with many parameters or behaviors need more documentation. 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 param descriptions in the schema are already detailed (e.g., content includes an example). The tool description adds contextual value by explaining the purpose of the extracted data but does not significantly enhance understanding of individual parameters 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 verb ('Extract'), resource ('contract data'), and method ('from raw text content using AI'). It distinguishes the tool from siblings like createContract by indicating that it processes unstructured text to produce structured data for subsequent use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explains when to use the tool (when raw text describes a contract) and suggests next steps using createCustomer and createContract tools. It does not explicitly state when not to use it or mention alternatives, but 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.
generateInvoicegenerateInvoiceA
Generate an invoice for a single contract+customer over a billing window.
Granularity is PER PHASE, NOT per product. ONE call generates ONE invoice covering ALL products active in the (contract, customer, from_date, to_date) window — every product becomes a line item on the same invoice. NEVER iterate over products.
MANDATORY PRE-STEP: call getContractBillingCycles first to fetch the list of valid {start_date, end_date, bill_for_date, billing_cycle_start_day} entries for this contract. Pick ONE entry. Copy its start_date → from_date, end_date → to_date, bill_for_date, billing_cycle_start_day verbatim. DO NOT compute these from contract.start_date, pricing.billing_period, or human intuition — the backend matches bill_for_date exactly against the pre-computed list.
Date fields accept ISO-8601 strings (e.g. "2026-04-28T00:00:00Z") or integer UNIX seconds. Prefer pasting ISO strings verbatim from getContractBillingCycles output — the server converts to unix internally before sending to the API.
Known failure modes:
• {invoice_ids: []} → bill_for_date did not match any cycle. Re-fetch billingCycles and copy the exact value.
• $0 invoice → bill_for_date/billing_cycle_start_day omitted entirely.
• InvoiceAlreadyGeneratedForThisBillingPeriod → an approved invoice already exists for this cycle.
| Name | Required | Description | Default |
|---|---|---|---|
| contract_id | Yes | UUID of the contract to generate the invoice for. | |
| customer_id | Yes | UUID of the customer. | |
| from_date | Yes | Start of billing period. Accepts ISO-8601 string (e.g. `2026-04-28T00:00:00Z`) or UNIX seconds integer. PREFER ISO string copied verbatim from getContractBillingCycles.start_date — avoids timezone bugs. | |
| to_date | Yes | End of billing period. Accepts ISO-8601 string or UNIX seconds integer. PREFER ISO string copied verbatim from getContractBillingCycles.end_date. | |
| bill_for_date | Yes | REQUIRED. Anchors which billing cycle this invoice belongs to. Accepts ISO-8601 string or UNIX seconds. MUST match exactly one of the `bill_for_date` values returned by getContractBillingCycles — pasting the ISO string verbatim is the safest path. Arbitrary dates produce `invoice_ids: []`. | |
| billing_cycle_start_day | Yes | REQUIRED. Day of month (1-31) anchoring the recurring billing cycle. Fetch from the contract or plan's billing_period; if unsure, use the day-of-month of contract.start_date. Omitting this causes the API to return a $0 invoice because no billing cycle matches. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the tool's behavior: it handles all products in the window as line items, requires exact date matching, and explains consequences of missing or incorrect parameters. No contradictions.
Agents need to know what a tool does to the 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 well-structured: purpose first, then granularity, mandatory pre-step, parameter details, and failure modes. Each sentence adds value; no fluff. Front-loaded critical 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?
Despite lacking an output schema, the description covers expected return values (invoice_ids, $0 invoice) and edge cases. With 7 parameters and complex date handling, the description provides comprehensive guidance 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 coverage is 100%, but the description adds critical context beyond schema: explains why bill_for_date must match exactly, consequences of omitting billing_cycle_start_day, and date format preferences. This significantly enhances usability.
Input schemas describe structure but not intent. Descriptions should explain 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 an invoice for a single contract+customer over a billing window, with granularity per phase, not per product. It distinguishes from related tools like createInvoiceCharge by explaining its 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?
Explicitly mandates calling getContractBillingCycles as a pre-step, provides detailed instructions on how to copy date fields, and lists known failure modes with actionable fixes. This guides correct usage and avoids common mistakes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generateInvoicePaymentLinkgenerateInvoicePaymentLinkC
Generate a payment link for a specific invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The ID of the invoice. | |
| amount | No | Custom amount to be charged for the invoice (must be less than the amount due). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Only states what it does, not how it behaves (e.g., whether it creates resources, requires authentication, or has 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?
Single sentence is concise, but it lacks structure and could benefit from additional context to justify its conciseness given the parameter complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, no annotations, and a complex __userContext parameter, the description is incomplete. It does not explain return values, authentication requirements, or side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds only the 'custom amount' constraint ('must be less than the amount due'). The complex __userContext parameter is not explained. Baseline is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Generate') and the resource ('payment link') with context ('for a specific invoice'), making it distinct from sibling tools that involve invoices but not payment link generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool over alternatives like payInvoice or generateInvoice. No mention of prerequisites or conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAccountBalancegetAccountBalanceB
Retrieve the balance for a specific accounting account. Supports filtering by customer, contract, currency, and posted-at date range.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | The unique identifier of the account. | |
| as_of | No | Date for the balance snapshot (YYYY-MM-DD). | |
| customer_id | No | Filter the balance to a single customer UUID. | |
| contract_id | No | Filter the balance to a single billing contract UUID (enables per-contract GL balance). | |
| currency | No | Three-letter ISO currency code (e.g. 'USD'). | |
| journal_entry__posted_at__gte | No | Lower bound on parent journal entry posted-at date (inclusive). | |
| journal_entry__posted_at__lte | No | Upper bound on parent journal entry posted-at date (inclusive). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It does not disclose read-only nature, authentication needs, performance implications, or what balance includes (e.g., pending 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 sentences: first conveys purpose, second lists filtering capabilities. No fluff, 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?
No output schema, so description should explain return format but does not. Missing side effects, return value structure, or prerequisites. Moderate complexity with 8 params, yet incomplete.
Complex tools with many parameters or behaviors need more documentation. 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. Description adds some value by summarizing filters, but does not add new syntax or format details beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve' and resource 'account balance', with specific filtering options. It distinguishes from sibling tools like listAccounts 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?
No explicit guidance on when to use this tool vs alternatives like getBalanceSheet or getIncomeStatement. Missing 'when not to use' or specific context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAggregateByIdgetAggregateByIdB
Get the details of a Billable Metric by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| aggregateId | Yes | The ID of the Billable Metric (aggregate). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, yet description lacks disclosure of side effects, authentication needs, rate limits, or return format; minimal 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?
Single sentence is concise and front-loaded, but could include additional context without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations; description fails to explain return values, error conditions, or relationship to other tools, making it incomplete for a detail retrieval 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% with descriptions for both parameters; description does not add meaning beyond schema, so 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?
Description clearly states verb 'Get' and resource 'details of a Billable Metric by its ID', distinguishing it from siblings like getAggregateEstimates, getAggregateLogs, 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?
No guidance on when to use this tool vs alternatives such as getAggregateEstimates or getAggregateLogs, and no prerequisites or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAggregateEstimatesgetAggregateEstimatesC
Get Billable Metric estimates based on the specified criteria.
| Name | Required | Description | Default |
|---|---|---|---|
| aggregate_id | Yes | The ID of the Billable Metric (aggregate). | |
| customer_id | Yes | The ID of the customer. | |
| start_date | Yes | Start date of the estimate window. ISO 8601 date format only — YYYY-MM-DD (e.g., '2025-01-15'). NOT datetime. | |
| end_date | Yes | End date of the estimate window. ISO 8601 date format only — YYYY-MM-DD (e.g., '2025-01-31'). NOT datetime. | |
| get_single | No | Whether to get a single estimate (defaults to true). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as side effects, authentication needs, or data freshness. For a tool that returns estimates, lack of transparency about computation or constraints is a notable 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?
The description is concise and direct, using a single sentence. While it may be too brief, it effectively communicates the core action without 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?
The description lacks completeness given the complexity: no output schema, no annotations, and a nested __userContext parameter. It does not explain return format, constraints, or the nature of estimates.
Complex tools with many parameters or behaviors need more documentation. 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 each parameter well-documented. The description itself adds no additional parameter meaning, so it meets the baseline 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?
The description clearly states the tool retrieves Billable Metric estimates, specifying both the verb and resource. While it does not explicitly distinguish from siblings like getAggregateById, the resource name implies a different purpose, so it is reasonably 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 alternatives, nor any context or preconditions. It simply states the action without any usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAggregateLogsgetAggregateLogsB
Get logs related to a Billable Metric (also called an aggregate) by ID, with optional date and customer filters.
| Name | Required | Description | Default |
|---|---|---|---|
| aggregateId | Yes | The ID of the Billable Metric (aggregate). | |
| start_date | No | Start date for filtering logs (YYYY-MM-DD). | |
| end_date | No | End date for filtering logs (YYYY-MM-DD). | |
| month | No | Filter by month (e.g., 'Apr 2023'). | |
| customer_id | No | Filter by customer ID. | |
| query_limit | No | Limit the number of log entries (defaults to 100). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It does not mention authentication needs, rate limits, side effects, or the nature of the operation (read-only). Only minimal purpose is conveyed.
Agents need to know what a tool does to the 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 19-word sentence that is concise and front-loaded with the main action. It is efficient but could be more structured without harming 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 7 parameters and no output schema, the description lacks detail on return format, pagination, or behavior of the 'month' parameter vs. date range. It is incomplete for a tool with 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 coverage is 100%, with each parameter described in the schema. The description adds a summary of optional filters but does not provide additional meaning beyond what the schema already offers. 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 verb 'get', the resource 'logs related to a Billable Metric (aggregate)', and the identifier 'by ID', with optional date and customer filters. It distinguishes from siblings like getAggregateById and getRawMetricLogs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching logs of a specific aggregate with optional filters, but it does not provide explicit guidance on when to use this tool versus alternatives like getRawMetricLogs, nor does it mention 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.
getAggregateSchemasgetAggregateSchemasA
Show the underlying storage/schema definitions for Billable Metrics. Mainly useful for advanced debugging, SQL/schema inspection, and integration work rather than day-to-day business operations.
| Name | Required | Description | Default |
|---|---|---|---|
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It mentions 'debugging' and 'schema inspection' but does not state whether the tool is read-only, destructive, or requires any specific permissions. Missing critical behavioral traits for a tool with no 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 waste. The purpose is front-loaded, followed by usage context. 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?
Given the tool has only one generic parameter and no output schema, the description adequately covers purpose and usage context. However, behavioral transparency is missing, leaving a gap for a non-annotated 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% due to the `__userContext` parameter being documented, but the parameter is a generic context object with no tool-specific meaning. The description adds no value beyond the schema, meeting the baseline 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?
The description clearly states that the tool 'Show the underlying storage/schema definitions for Billable Metrics', using specific verb+resource. It distinguishes itself from sibling tools like `getAggregateById` by focusing on schema definitions, not aggregate 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 tool is described as 'mainly useful for advanced debugging, SQL/schema inspection, and integration work rather than day-to-day business operations'. This provides clear context on when to use it (advanced scenarios) and when not to (day-to-day). No explicit alternatives are given, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getAllInvoiceTagsgetAllInvoiceTagsB
Get all available tags for invoices.
| Name | Required | Description | Default |
|---|---|---|---|
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. However, it only states the basic function. It does not disclose whether the tool requires authentication (implied by the __userContext parameter but not stated), rate limits, or the nature of 'available tags' (e.g., user-specific, org-wide). No output format is 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, concise sentence that communicates the core purpose without waste. It is appropriately front-loaded. However, for a tool with a parameter that requires explanation, slightly more detail could be warranted without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and annotations, the description should explain what the tool returns and any side effects. It fails to mention the return format, pagination, or whether results are filtered by context. The description is incomplete for safe and 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 has 100% coverage via the description of __userContext. The tool description adds no extra meaning beyond the schema. Baseline is 3, and the description does not improve or degrade 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 'Get all available tags for invoices' clearly states the action (Get) and the resource (all available tags for invoices). The tool name and description uniquely identify it among siblings, which include many invoice-related tools but none specifically for tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, context, or scenarios where other tools like listInvoices might be more appropriate. The description lacks any usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getBalanceSheetgetBalanceSheetB
Retrieve the balance sheet report (assets, liabilities, equity). Supports per-customer / per-contract / per-account scoping via filters and currency / cadence selection.
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Start date for the balance sheet period (YYYY-MM-DD). | |
| end_date | No | End date for the balance sheet period (YYYY-MM-DD). Defaults to today. | |
| cadence | No | Bucket cadence for the report. One of 'month', 'quarter', 'year'. Defaults to 'month'. | |
| currency | No | Three-letter ISO currency code to scope the report (e.g. 'USD'). | |
| customer_id | No | Restrict report to a single customer UUID. | |
| contract_id | No | Restrict report to a single billing contract UUID (enables per-contract balance sheet). | |
| account_id__in | No | Filter to a list of GL account UUIDs. | |
| grouping_keys | No | Optional grouping dimensions, e.g. ['customer_id'] or ['contract_id']. | |
| get_changes | No | If true, return period-over-period changes instead of cumulative values. | |
| cursor | No | Cursor for pagination. | |
| limit | No | Maximum rows per page (default 10). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It does not disclose behavioral traits such as read-only nature, authentication needs, rate limits, pagination details, or output format. Basic retrieval action stated without 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?
Single sentence, front-loaded with main purpose, no unnecessary words. Efficient and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 (12 parameters, no output schema, nested objects), description covers high-level purpose and filter capabilities but lacks details on return format, pagination, and behavioral aspects. Adequate but notable 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 coverage is 100%, providing baseline of 3. Description adds meaning by explaining scoping capabilities (per-customer, per-contract, per-account) and selection of currency/cadence, going beyond schema descriptions. Not exhaustive but adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it retrieves the balance sheet report and identifies key elements (assets, liabilities, equity). It mentions scoping filters, currency, and cadence selection, but does not distinguish from sibling tools like getIncomeStatement. Purpose is specific but lacks 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?
Description implies when to use scoping filters and selection options, but does not guide when to use this tool over alternatives (e.g., getIncomeStatement). No explicit context or exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getBusinessEntityByIdgetBusinessEntityByIdB
Retrieve a business entity by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| entityId | Yes | The unique identifier of the business entity. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry full burden. It only says 'Retrieve', implying safe read, but does not disclose error behavior, authentication needs, rate limits, or what happens if entity not found. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded, no extraneous information. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 and no behavioral context about return values. For a tool with a nested parameter and no annotations, description should provide more completeness, such as response structure or usage with userContext.
Complex tools with many parameters or behaviors need more documentation. 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. Description adds no extra meaning beyond what schema already provides for entityId and __userContext.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb (retrieve), resource (business entity), and method (by ID). It distinguishes from siblings like listBusinessEntities or other getById tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like listBusinessEntities or other getById tools. Missing context on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getChartOfAccountsgetChartOfAccountsA
Retrieve the chart of accounts for the organization, listing all account categories and their hierarchical structure.
| Name | Required | Description | Default |
|---|---|---|---|
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the read-only nature and the type of data returned (account categories and hierarchy). However, it does not mention authentication requirements, rate limits, or any side effects. Since no annotations are provided, the description carries full burden but covers only basic behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence (17 words) that front-loads the action and resource. Every word is necessary and contributes to understanding. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality but lacks detail on output format or structure. Since no output schema exists, the description should ideally clarify the form of the hierarchical structure (e.g., nested JSON or flat list). It is adequate for a simple read tool but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. 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 only parameter __userContext is fully described in the schema). The description adds no additional parameter information beyond what the schema provides. Per guidelines, baseline is 3 when coverage is high.
Input schemas describe structure but not intent. Descriptions should explain 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 'Retrieve' and clearly identifies the resource as 'the chart of accounts for the organization'. It further specifies the output as 'listing all account categories and their hierarchical structure', which differentiates it from sibling tools like getAccountBalance or getBalanceSheet. The purpose is unambiguous and 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 alternatives. With many sibling tools (e.g., getAccountBalance, getBalanceSheet, listAccounts), the agent lacks context on when to pick this one. No usage scenarios, prerequisites, or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getContactByIdgetContactByIdA
Retrieve details for a specific contact by their ID.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | The unique ID of the contact to retrieve. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; the description carries full burden. It only states the read-like purpose but does not disclose potential side effects, authentication needs, or behavior on missing contact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 9 words, concise and front-loaded. No waste, though could be slightly enhanced without losing 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?
For a simple getter with one required parameter, the description is adequate. It does not explain error cases or return format, but the tool is straightforward.
Complex tools with many parameters or behaviors need more documentation. 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 description adds no additional meaning 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 clearly states the verb 'retrieve', the resource 'contact details', and the scope 'by their ID'. It distinguishes from sibling tools like listContacts and updateContact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 have a specific contact ID, but does not explicitly state when to use this tool versus alternatives like listContacts, nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getContractAmendmentsgetContractAmendmentsB
Retrieve all amendments for a contract. Shows history of changes, expansions, upgrades, and modifications made to the contract over time.
| Name | Required | Description | Default |
|---|---|---|---|
| contractId | Yes | The unique identifier (UUID) of the contract. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must cover behavioral traits. It only states it 'shows history' but does not disclose read-only nature, authorization needs, rate limits, or pagination behavior. Users cannot infer side effects or access control.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundant information. Every word serves a purpose, and the description is front-loaded with the key 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 retrieval tool with no output schema, the description is vague about the return format ('history of changes...'). It does not mention sorting, filtering, or any pagination. Adequate but lacks completeness for an agent to fully anticipate the 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 coverage is 100% with descriptions for both parameters, providing baseline value. The description adds no additional meaning beyond the schema, so score is neutral.
Input schemas describe structure but not intent. Descriptions should explain 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 'Retrieve' and resource 'amendments for a contract', and distinguishes it from sibling tools. It adds specific details about what the amendments cover (changes, expansions, upgrades, modifications), making 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?
No guidance on when to use this tool versus alternatives like getContractById or listContracts. The description does not specify prerequisites, context, or 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.
getContractBillingCyclesgetContractBillingCyclesA
Returns the contract's pre-computed billing cycles as a list of {name, start_date, end_date, bill_for_date, billing_cycle_start_day}. REQUIRED before calling generateInvoice. Workflow: (1) call this tool, (2) pick the cycle entry whose date range covers the period you want to invoice, (3) pass that entry's start_date → from_date, end_date → to_date, bill_for_date, billing_cycle_start_day to generateInvoice — copy the values verbatim, no math. The backend matches bill_for_date exactly against this list; arbitrary dates produce empty invoice arrays.
| Name | Required | Description | Default |
|---|---|---|---|
| contractId | Yes | The unique identifier (UUID) of the contract. | |
| limit | No | Maximum number of cycles to return (default 10). Increase if the contract spans many years. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that the tool returns pre-computed cycles and that the backend requires exact match on bill_for_date. Implies read-only behavior, though could mention 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?
Concise yet detailed, front-loading purpose and providing step-by-step workflow. Every sentence serves a purpose with no unnecessary 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?
Fully explains output format, required inputs, and integration with generateInvoice. Despite no output schema, the workflow is clearly documented, making it contextually complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents each parameter. The description adds context for 'limit' but little beyond schema for others. 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 explicitly states it returns billing cycles as a list of specific fields and distinguishes itself from siblings like generateInvoice by being a prerequisite step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides a clear workflow: call before generateInvoice, pick a cycle, and pass values verbatim. It warns against using arbitrary dates, giving explicit guidance on when and how to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getContractByIdgetContractByIdA
Retrieve a contract by its ID, including all phases, pricings, customer details, custom attributes, and renewal policy. Essential for cloning contracts for renewals, reviewing terms before amendments, and validating contract state.
| Name | Required | Description | Default |
|---|---|---|---|
| contractId | Yes | The unique identifier (UUID) of the contract to retrieve. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It implies a read-only operation ('Retrieve') but does not disclose behavioral traits like side effects, authentication needs, rate limits, or error handling. The mention of 'Essential for cloning' adds some context but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. First sentence defines the core functionality, second sentence lists key use cases. It is well-structured and front-loaded with essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two params, no output schema), the description covers the necessary information: what is retrieved and why. It does not mention pagination or error handling, but for a single-resource fetch, this is sufficient. The use cases add completeness.
Complex tools with many parameters or behaviors need more documentation. 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 clear descriptions for both parameters (contractId UUID and __userContext for auth). The tool description adds no additional meaning beyond the schema, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve' and the resource 'a contract by its ID', listing all included data (phases, pricings, customer details, etc.) and specific use cases (cloning, reviewing, validating), effectively distinguishing it from sibling tools like listContracts or getContractAmendments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides use cases: 'cloning contracts for renewals, reviewing terms before amendments, and validating contract state.' This gives clear context on when to use the tool, though it does not explicitly mention when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCreditNoteByIdgetCreditNoteByIdB
Retrieve a credit note by its ID, including amount, status, customer, invoice association, and line items URL.
| Name | Required | Description | Default |
|---|---|---|---|
| creditNoteId | Yes | The unique identifier (UUID) of the credit note. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states what data is retrieved. It does not disclose any behavioral traits such as authentication needs, rate limits, or side effects. The read-only nature is implied but not explicitly confirmed.
Agents need to know what a tool does to the 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 effectively communicates the core purpose. No wasted words, though it could be slightly more structured (e.g., bullet points for included fields).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description provides a basic overview of what is returned but lacks details on format, pagination, or behavior for missing or invalid IDs. It is adequate for a simple retrieval but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for creditNoteId and __userContext. The description adds minimal extra meaning beyond the schema (e.g., listing included fields but not mapping to parameters). The nested __userContext object is not explained in the 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 clearly states the verb 'Retrieve' and the resource 'credit note by its ID', and lists included fields (amount, status, customer, invoice association, line items URL). This distinguishes it from sibling getter tools like getInvoiceById or listCreditNotes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 vs alternatives (e.g., listCreditNotes). The description does not mention prerequisites, contexts, or exclusions, leaving the agent to infer usage from the straightforward retrieval purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCurrentDateTimegetCurrentDateTimeC
Get the current system date and time in multiple formats for temporal context
| Name | Required | Description | Default |
|---|---|---|---|
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions 'multiple formats' but does not specify what formats, nor does it disclose that the operation is safe/read-only. The input schema includes a complex __userContext object for authentication and approval, which is unexplained.
Agents need to know what a tool does to the 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 sentence, which is concise but lacks crucial details. It is not overly long, but it sacrifices informativeness for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and the mention of 'multiple formats', the description should at least list example formats or describe the return structure. It is incomplete and leaves the agent guessing about what exactly the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but the only parameter is __userContext, described as 'Internal user context for multi-tenant authentication and approval workflow'. The description does not explain why a date/time tool requires such a parameter, nor does it add any 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?
The description states the tool provides current date/time in multiple formats, which is clear and specific. However, it does not differentiate from hypothetical similar tools, though it is unique among 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 tool versus alternatives. The description does not mention any prerequisites or contextual triggers for using it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCustomerByIdgetCustomerByIdC
Retrieve details for a specific customer by their ID.
| Name | Required | Description | Default |
|---|---|---|---|
| customerId | Yes | The unique ID of the customer to retrieve. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states 'Retrieve details', implying a read operation, but omits authentication, authorization needs, rate limits, or any 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?
A single concise sentence effectively communicates the core action. However, it could provide more structure or additional context to justify a higher score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 lacks information about return values or response structure, especially given no output schema. For a retrieval tool, details on what is returned would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. 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 description adds no extra meaning beyond the schema definitions for customerId and __userContext. 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 verb 'Retrieve', resource 'details for a specific customer', and identifier 'by their ID'. It accurately reflects the tool's function without 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?
No guidance is given on when to use this tool versus alternatives like listCustomers or getContactById. The description provides no context for selection among many get*ById sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCustomerPortalConfigurationgetCustomerPortalConfigurationC
Retrieve the customer portal configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states it retrieves data, implying read-only behavior. It does not disclose any potential side effects, authentication requirements, or rate limits. The description carries the full burden but adds minimal 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 sentence, which is concise but omits important context. It is front-loaded with the verb and resource, but key information like what the configuration contains is missing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and the single complex parameter, the description should explain what the configuration includes. Without this, the agent cannot assess the tool's output or usefulness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a description for the __userContext parameter. However, the description adds no additional meaning beyond the schema. Since schema coverage is high, 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 action 'Retrieve' and the resource 'customer portal configuration'. It is specific enough to distinguish from general get tools, though it lacks detail about what the configuration entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 sibling tools like getCustomerById or listCustomers. An agent would not know if this is the appropriate tool for portal settings without additional context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getEntitlementByIdgetEntitlementByIdA
Get the details of an entitlement by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| entitlementId | Yes | The unique identifier (UUID) of the entitlement. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description must convey behavior. It states 'Get' (read-only) but lacks details on response shape, error handling, or auth requirements. Adequate for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no fluff. Efficiently communicates the tool's 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 simple get-by-ID tool without output schema, the description combined with parameters provides sufficient context. Could mention result type but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; both parameters have descriptions. The description adds no additional meaning beyond what 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?
Description clearly states the tool gets details of an entitlement by ID, using specific verb and resource. Distinguishes from siblings like listEntitlements 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?
The description implicitly indicates usage when you have an entitlement ID. No explicit alternatives or exclusions, but context is clear for a straightforward retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getIncomeStatementgetIncomeStatementB
Retrieve the income statement (P&L) report. Supports per-customer / per-contract / per-account scoping via filters and currency / cadence selection.
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Start date for the income statement period (YYYY-MM-DD). | |
| end_date | No | End date for the income statement period (YYYY-MM-DD). | |
| cadence | No | Bucket cadence for the report. One of 'month', 'quarter', 'year'. Defaults to 'month'. | |
| currency | No | Three-letter ISO currency code to scope the report (e.g. 'USD'). | |
| customer_id | No | Restrict report to a single customer UUID (enables per-customer P&L). | |
| contract_id | No | Restrict report to a single billing contract UUID (enables per-contract P&L). | |
| account_id__in | No | Filter to a list of GL account UUIDs. | |
| grouping_keys | No | Optional grouping dimensions, e.g. ['customer_id'] or ['contract_id']. | |
| get_changes | No | If true, return period-over-period changes (default true for income statement). | |
| cursor | No | Cursor for pagination. | |
| limit | No | Maximum rows per page (default 10). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only says 'Retrieve' (implying read-only) and lists filter options. It lacks details on authentication, rate limits, pagination, or response format, leaving significant behavioral gaps for a complex tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with clear front-loading of the primary purpose. Every word adds value, and there is no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 12 parameters, no annotations, and no output schema, the description is too brief. It does not explain return format, pagination behavior, filter interactions, or any prerequisites, leaving the agent underinformed for a complex financial 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 description coverage is 100%, so parameters are well-documented in the schema. The tool description adds little beyond the schema (e.g., 'per-customer scoping'), but with full schema coverage, the baseline is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves an income statement (P&L) report and mentions scoping filters (per-customer, per-contract, per-account) and selection options (currency, cadence), distinguishing it from sibling tools like getBalanceSheet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving income statements with various filters but does not explicitly state when to use this tool vs. alternatives (e.g., getBalanceSheet) or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getInvoiceByExternalIdgetInvoiceByExternalIdC
Retrieve details for an invoice using its external ID.
| Name | Required | Description | Default |
|---|---|---|---|
| externalId | Yes | The external ID of the invoice. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It only states 'Retrieve details' without mentioning that it is read-only, what happens if the invoice is not found, authentication requirements, or any side effects. This is insufficient.
Agents need to know what a tool does to the 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 of 11 words, containing no redundant information. It is front-loaded and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 no output schema, yet the description does not explain what 'details' are returned. It also lacks error handling or edge case guidance. Given the complexity of the input schema (with nested user context) and no output specification, the description is incomplete.
Complex tools with many parameters or behaviors need more documentation. 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%: externalId is described as 'The external ID of the invoice.' The description adds no further meaning. Since the schema already documents the parameter, a 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?
Description clearly states the action ('Retrieve details') and the resource ('invoice using its external ID'). The verb and resource are specific. However, it does not explicitly contrast with sibling tools like getInvoiceById that use internal ID, which would make it 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 on when to use this tool versus alternatives such as getInvoiceById or getInvoiceSummary. There is no mention of prerequisites, context, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getInvoiceByIdgetInvoiceByIdC
Retrieve details for a specific invoice by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The unique ID of the invoice to retrieve. | |
| include_line_items | No | Whether to include line items in the response. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Only states 'retrieve', implying read-only, but does not disclose any behavioral traits such as error handling, pagination, or authentication 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?
Single sentence, highly concise. However, it may be too brief given the complexity of the tool and the presence of nested parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 description does not explain the structure of the returned invoice details. With multiple sibling tools for specific invoice details, the description should clarify what 'details' includes to guide 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 coverage is 100% with descriptions for all three parameters. Description adds no additional meaning beyond what is in the schema, meeting the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it retrieves details of an invoice by ID. Distinguishes from getInvoiceByExternalId but does not differentiate from other invoice retrieval tools like getInvoiceLineItems or getInvoicePayments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool vs alternatives. Does not specify prerequisites, such as requiring the invoice to exist, or when to prefer other get* invoice tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getInvoiceContractJsonActualsgetInvoiceContractJsonActualsB
Get contract actuals in JSON format for a specific invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The ID of the invoice. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as authentication requirements, rate limits, or side effects. The description only states the operation without any safety or behavior 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, concise sentence with no fluff. It is front-loaded and communicates the core purpose efficiently, though it lacks any structure beyond that.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 and no annotations, the description does not explain what 'contract actuals' are, what the JSON response contains, or any prerequisites. For a tool with two parameters, this is incomplete.
Complex tools with many parameters or behaviors need more documentation. 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 describes both parameters (invoiceId, __userContext). The description adds no additional meaning beyond the schema, meeting the baseline but not exceeding 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 clearly states the specific action (get contract actuals) and the format (JSON) for a specific invoice. The name and title align, and it distinguishes from siblings like getContractById or getInvoiceById by specifying 'contract actuals' and 'JSON 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 provides no guidance on when to use this tool versus alternatives (e.g., getInvoiceLineItems, getInvoiceById). It does not mention prerequisites, context, or exclusions, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getInvoiceGenerationStatusgetInvoiceGenerationStatusC
Get the generation status of a specific invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The ID of the invoice. | |
| contract_id | Yes | The ID of the contract associated with the invoice. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist. The description implies a read-only operation but does not disclose any behavioral details such as required permissions, rate limits, or side effects. Descriptive burden fully on description, which is uninformative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence that is front-loaded. However, it could be more informative without losing 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?
No output schema, and the description does not mention return format, possible status values, or error conditions. For a status-checking tool, this context is important for an agent to 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?
Schema coverage is 100% (all parameters described). The description adds no extra meaning beyond the schema, so 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 clearly states the action (get) and the resource (generation status of an invoice). It distinguishes from siblings like getInvoiceById and generateInvoice, but doesn't explicitly differentiate from other status-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., getInvoiceById, getInvoicePayments). No when-not-to-use or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getInvoiceLineItemsgetInvoiceLineItemsC
Get details about the invoice line items, features, and pricing models.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The ID of the invoice. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It only says 'Get details' without disclosing read-only nature, authentication requirements (though implied by __userContext), or any other behavioral traits like rate limits or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no waste. However, it could be more structured to highlight key points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description is insufficient. It does not explain the return format, whether it returns a list or single item, or any pagination details, making it incomplete for an agent to fully understand the tool's output.
Complex tools with many parameters or behaviors need more documentation. 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% as both parameters have descriptions. The tool description adds no additional meaning 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?
The description clearly states the tool retrieves details about invoice line items, with additional mention of features and pricing models. However, it could be more precise about the scope, especially given many sibling invoice tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like getInvoiceById, getInvoiceSummary, or getInvoicePayments. The description does not differentiate its use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getInvoicePaymentsgetInvoicePaymentsA
Get successful payments currently associated with a specific invoice. This view may omit refund records and non-success payment states.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The ID of the invoice. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It transparently states that refunds and non-success states may be omitted. However, it does not disclose other behaviors like authentication requirements, rate limits, or the fact that it is a read-only 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 two concise sentences with no redundant information. It front-loads the core purpose and adds a critical qualifier about what is omitted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description should provide more details about the return values (e.g., payment fields, pagination) and any constraints. It only describes what is omitted, leaving gaps in understanding the full 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 coverage is 100%, so the schema already documents both parameters. The description adds value by clarifying that the invoiceId parameter refers to a 'specific invoice' for which successful payments are retrieved. For __userContext, no additional meaning is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'successful payments' for a specific invoice. It distinguishes from sibling tools like 'getInvoicePaymentsWithoutRefunds' by specifying it may omit refunds and non-success states.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 (to retrieve only successful payments) but does not explicitly state when not to use or list alternative tools. The mention of omitted records provides context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getInvoicePaymentsByIdgetInvoicePaymentsByIdA
Get successful payments associated with a specific invoice ID. This endpoint is success-only and may not show refund rows.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The ID of the invoice. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the tool is success-only and may omit refunds. Without annotations, it lacks information on error handling, required permissions, or response structure. The vague 'may not show' reduces certainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The primary purpose is front-loaded 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?
Adequate for a simple retrieval tool with two parameters and no output schema. Could be more complete by mentioning error scenarios or payment ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. The description adds no extra meaning to invoiceId or __userContext 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 it retrieves successful payments for a specific invoice ID. It hints at filtering (success-only, no refund rows) but does not explicitly differentiate from siblings like getInvoicePayments or getInvoicePaymentsWithoutRefunds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: use when you need successful payments for an invoice. However, no explicit guidance on when not to use this tool vs alternatives like getInvoicePayments or listAllPayments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getInvoicePaymentsWithoutRefundsgetInvoicePaymentsWithoutRefundsA
Get original payment records for an invoice, excluding refund payment rows. Refunded or partially refunded original payments may still appear here.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The ID of the invoice. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the key behavior that refunded original payments may still appear, which is a nuanced and important detail. However, it does not mention other traits like read-only nature, pagination, or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, front-loaded sentences with no wasted words. It efficiently conveys purpose and a key caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 simple (one required parameter, no output schema). The description adequately explains what is returned and a potential nuance. However, it does not specify return format or error conditions, which would be helpful for a complete 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?
Schema coverage is 100%, so baseline is 3. The description does not add meaning beyond the schema for the invoiceId parameter. The __userContext parameter is described generically in the schema, and the description does not elaborate.
Input schemas describe structure but not intent. Descriptions should explain 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 retrieves original payment records for an invoice, excluding refund rows, and clarifies that refunded original payments may still appear. This distinguishes it from siblings like getInvoicePayments and getInvoicePaymentsById.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 getting payments without refund rows, but does not explicitly state when to use this tool versus alternatives like getInvoicePayments. No when-not-to-use or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getInvoicePreviewHtmlgetInvoicePreviewHtmlA
Get the rendered HTML preview of an invoice. Returns the invoice as it would appear when sent to the customer. Use this to show the customer-facing invoice layout.
| Name | Required | Description | Default |
|---|---|---|---|
| orgId | No | Organization ID (auto-populated). | |
| invoiceId | Yes | The ID of the invoice to preview. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose all behavioral traits. It states the tool returns a rendered HTML preview, implying read-only behavior, but does not clarify if it requires specific permissions, whether the invoice must be finalized, or if the preview is generated on-the-fly. This lack of detail impairs an agent's ability to assess side effects or preconditions.
Agents need to know what a tool does to the 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 without any fluff. The first sentence clearly states the purpose, and the second provides a usage guideline. Every word earns its place, and the structure 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?
Given the tools complexity (3 params, no output schema, no annotations), the description is minimally adequate. It covers purpose and usage but lacks behavioral context (e.g., idempotency, return format). An agent could use it, but may need to discover behavior empirically.
Complex tools with many parameters or behaviors need more documentation. 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 description adds no additional meaning beyond the schema (e.g., 'auto-populated' is already in the schema for orgId). With full schema coverage, a score of 3 is appropriate as the description does not enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Get' and resource 'rendered HTML preview of an invoice', distinguishing it from siblings like getInvoiceById (JSON) or downloadInvoice (PDF). The description 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?
Provides a clear use case: 'Use this to show the customer-facing invoice layout.' However, it does not mention when not to use it or explicitly list alternatives (e.g., getInvoiceById for raw data, downloadInvoice for PDF). The guidance is minimal but not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getInvoiceSummarygetInvoiceSummaryB
Get a summary of a specific invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The ID of the invoice. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description implies read-only but lacks details on authentication, side effects, or what the summary includes.
Agents need to know what a tool does to the 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 of 6 words is highly concise, but the brevity may sacrifice necessary detail. Still, no redundant 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, no annotations, and many sibling tools, the description fails to explain what the summary contains or how it differs from similar tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have descriptions in the schema (100% coverage), so description adds no extra meaning. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'summary of a specific invoice', distinguishing it from siblings like getInvoiceById or getInvoiceLineItems.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool over alternatives. Among many invoice-related siblings, the description provides no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getJobByIdgetJobByIdB
Retrieve a specific job by its ID to check status and results.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | The unique identifier of the job. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavioral traits. It only states 'retrieve', implying read-only, but does not mention authentication needs, rate limits, or side effects. Minimal 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?
Single sentence is efficient and front-loaded. However, could be slightly expanded to include usage context without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description should clarify return values. It mentions 'status and results' but lacks structure details. Adequate for a simple retrieval but not fully 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% (jobId and __userContext are both described in schema). Description adds no extra meaning beyond what schema already provides, so 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?
Description clearly states 'Retrieve a specific job by its ID to check status and results', providing a specific verb (retrieve) and resource (job), and distinguishes purpose from sibling tools like listJobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool versus alternatives such as listJobs or getAggregateById. The description is purely functional and omits context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getJournalEntrygetJournalEntryA
Retrieve a journal entry by its ID, including all journal lines.
| Name | Required | Description | Default |
|---|---|---|---|
| journalEntryId | Yes | The unique identifier of the journal entry. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only mentions including journal lines but omits details on read-only nature, error handling, or authentication requirements, which are critical for a tool with no 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, straightforward sentence that is front-loaded with the core action and scope, containing no extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with no output schema, the description is largely complete, specifying the input (ID) and output scope (including lines). Minor omission: does not describe the __userContext parameter or return format, but given complexity, 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 coverage is 100%, so the baseline is 3. The description adds no additional parameter details beyond what the schema provides, but the schema descriptions are sufficient.
Input schemas describe structure but not intent. Descriptions should explain 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 'Retrieve' and specifies the resource 'journal entry by its ID', clearly differentiating from siblings like listJournalEntries or createJournalEntry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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, but the name implies usage for retrieving a single entry by ID, leaving implicit comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPaymentByIdgetPaymentByIdB
Retrieve details for a specific payment by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | The unique ID of the payment to retrieve. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only states 'Retrieve details', implying a read operation, but does not mention authentication needs, potential errors (e.g., payment not found), rate limits, or any side effects. The description is insufficient for an unannotated 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 a single concise sentence that front-loads the tool's purpose without any fluff. 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 tool has a complex nested __userContext parameter crucial for multi-tenant authentication and approval workflow, yet the description completely ignores it. No output schema is provided, and the description does not explain return values or behavior. For a tool with such complexity and sensitivity, the description is inadequate.
Complex tools with many parameters or behaviors need more documentation. 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: paymentId is described as 'The unique ID of the payment to retrieve.' and __userContext has a full description. The tool description adds no additional meaning beyond what the schema already provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve details for a specific payment by its ID.' It specifies the verb (retrieve), resource (details of a payment), and method (by ID). This distinguishes it from sibling tools like listAllPayments (list all) and other getters like getInvoicePaymentsById (which gets payments for an 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?
No guidance is provided on when to use this tool versus alternatives such as listAllPayments, getInvoicePaymentsById, or refundPayment. There is no mention of prerequisites or context. The implied usage (when you have a payment ID) is present, but no explicit when-not or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPlanByIdgetPlanByIdA
Retrieve a plan by its ID, including phases, products, and pricing configurations.
| Name | Required | Description | Default |
|---|---|---|---|
| planId | Yes | The unique identifier of the plan. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It correctly implies a read-only, idempotent retrieval operation and adds detail about included sub-objects (phases, products, pricing). Does not contradict any 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?
Single, well-structured sentence that immediately conveys the action and scope. 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 no output schema, the description adequately explains the return includes key sub-objects. It could be more detailed about other potential fields but is sufficient for a straightforward retrieval 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% with clear descriptions for both parameters. The description adds value by indicating the response includes phases, products, and pricing configurations, which is not in the parameter schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Retrieve' and resource 'plan by its ID', clearly stating the action and scope. It distinguishes from siblings like listPlans (list all) and getProductById (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool versus alternatives (e.g., listPlans) or any context about prerequisites, permissions, or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getProductByIdgetProductByIdA
Retrieve a product by its ID, including name, SKU, description, tax codes, pricing, and custom attributes.
| Name | Required | Description | Default |
|---|---|---|---|
| productId | Yes | The unique identifier (UUID) of the product. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It does not disclose behavioral traits such as authentication needs, rate limits, or that it is read-only (though implied by 'retrieve'). Minimal behavioral context beyond the action.
Agents need to know what a tool does to the 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. Efficiently conveys the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, the description is adequate but lacks details on return format, error handling, or any prerequisites. With no output schema, the description could have been more explicit about the response structure.
Complex tools with many parameters or behaviors need more documentation. 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 a good description for productId. The description adds value by listing the returned fields (name, SKU, etc.), which are not in the schema. With schema coverage at 100%, the description enhances understanding of what is retrieved.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Retrieve'), resource ('product by its ID'), and specifies the fields included (name, SKU, description, tax codes, pricing, custom attributes). It distinguishes from siblings that list or get only pricing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 listProducts or getProductPricings. The description lacks any contexts, exclusions, or conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getProductPricingsgetProductPricingsB
Retrieve all pricing configurations for a specific product.
| Name | Required | Description | Default |
|---|---|---|---|
| productId | Yes | The unique identifier of the product. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, placing full burden on the description. However, the description does not disclose any behavioral traits such as authentication requirements, rate limits, pagination behavior, or what is returned. It merely restates the purpose without adding 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, concise sentence that immediately conveys the tool's purpose. There is no extraneous 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?
The tool has 2 parameters (one nested) and no output schema or annotations. The description fails to mention what the return value looks like, whether pagination is supported, or any other contextual details needed for an agent to use it correctly. It is too minimal for a data retrieval 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%, and the description adds no new meaning beyond the schema. The baseline score of 3 is appropriate as the schema already documents both parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Retrieve), the resource (pricing configurations), and the scope (for a specific product). It distinguishes itself from siblings like createProductPricing and listProducts by specifying 'for a specific product'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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. While the purpose is clear, the description lacks information on prerequisites or situations where this tool should be preferred over siblings like getProductById or listProducts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getRawMetricByIdgetRawMetricByIdC
Get Usage Event details by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| rawMetricId | Yes | The ID of the Usage Event resource (raw metric). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but only states 'Get', implying read-only. It does not disclose authentication needs, rate limits, or 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?
Single sentence, concise and front-loaded. It is appropriately short for a simple get-by-ID 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?
Given 2 parameters (one nested) and no output schema, the description is too minimal. It does not mention return value format or differentiate from similar tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no additional meaning beyond what the schema already provides for the 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 clearly states the verb 'Get', resource 'Usage Event details', and key 'by ID'. It distinguishes from sibling tool getRawMetricBySlug, though the term 'Usage Event' may cause slight ambiguity with 'raw metric'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool versus alternatives like getRawMetricBySlug. The description does not provide any context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getRawMetricBySluggetRawMetricBySlugB
Get Usage Event details by API slug.
| Name | Required | Description | Default |
|---|---|---|---|
| rawMetricSlug | Yes | The API slug of the Usage Event resource (raw metric). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not mention read-only nature, authentication, rate limits, or any side effects, relying solely on the short 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?
The description is one sentence, no wasted words. It is concise, though slightly too terse for full clarity, but still efficient for its purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description should indicate what 'details' are returned or the structure of the response. It does not, leaving the agent with incomplete expectations.
Complex tools with many parameters or behaviors need more documentation. 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 no additional meaning beyond the schema; 'by API slug' mirrors the parameter description without enriching 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 clearly states the verb 'Get', the resource 'Usage Event details', and the specific method 'by API slug'. This distinguishes it from sibling tools like getRawMetricById (gets by ID) and listRawMetrics (lists all).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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, no prerequisites, and no scenarios where it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getRawMetricLogsgetRawMetricLogsA
Get recent Usage Event rows for a resource by ID. Returns the most recent event rows; backend does NOT support filters, pagination, ordering, or aggregation on this endpoint. For filtered/aggregated queries use the aggregate endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| rawMetricId | Yes | The ID of the Usage Event resource (raw metric). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Describes endpoint's behavioral constraints (no filters, pagination, ordering, aggregation). Does not mention authorization, rate limits, or maximum return size, but the explicit limitations are valuable.
Agents need to know what a tool does to the 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. First sentence states core purpose. Second sentence adds limitations and alternative. No superfluous 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?
No output schema provided. Description lacks details on return format (fields, row count, ordering). While limitations are covered, the output structure is important for a retrieval tool. Missing this information reduces completeness.
Complex tools with many parameters or behaviors need more documentation. 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 have descriptions. The tool description does not add significant meaning beyond the schema, such as expected format or constraints. Baseline score of 3 is appropriate when schema sufficiently documents 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?
Description clearly states verb 'Get', resource 'Usage Event rows', qualifiers 'recent' and 'by ID'. Distinguishes from siblings like getAggregateLogs and listRawMetrics by specifying resource type 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?
Explicitly states limitations: no filters, pagination, ordering, or aggregation. Directs users to aggregate endpoints for filtered/aggregated queries. Provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingestRawMetricEventingestRawMetricEventA
Ingest a Usage Event for the specified resource slug. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| rawMetricSlug | Yes | Slug of the Usage Event resource (raw metric), e.g. api_usage_events. | |
| event | No | Usage Event payload containing customer_id, timestamp, and a data map with schema-compliant types. customer_id and timestamp are mandatory event fields and must be provided in the payload; MCP does not auto-add them. Before constructing the event, fetch the schema via getRawMetricBySlug (or reuse the response from createRawMetric) so you only include fields that exist in the Usage Event schema (raw metric schema). Use the provided type buckets such as String/Int64 or the exact column names returned by sample logs; do not invent new keys. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that host enforces user confirmation via an approval gate. With no annotations, this is valuable behavioral context. The description does not mention other aspects like side effects or error responses, but the key behavior is covered.
Agents need to know what a tool does to the 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 tool description is two sentences long, front-loading the purpose and key behavioral instruction. Every sentence adds value; 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 mutation tool with no output schema, the description covers the core purpose, a critical behavioral trait (approval gate), and detailed parameter guidance. Missing return value details are a minor gap, but overall it equips an agent 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 coverage is 100%, so baseline is 3. The description of the 'event' parameter adds significant meaning: it explains the mandatory fields and instructs to fetch the schema first. This goes beyond 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?
Description clearly states the tool's verb ('Ingest') and resource ('Usage Event for the specified resource slug'). Among siblings, no other tool has 'ingest' in its name, so purpose is distinct 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?
Description explicitly instructs not to ask the user for confirmation because the host's approval gate handles it. This is a concrete usage guideline. However, it does not discuss when to use this tool versus alternatives or prerequisites beyond the event construction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAccountslistAccountsB
Retrieve a paginated list of accounting accounts (GL accounts) with optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor for pagination. | |
| limit | No | Maximum number of accounts to return per page. | |
| name__ilike | No | Case-insensitive partial match for account name. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It mentions pagination and filtering but does not disclose behavioral traits like authentication needs, rate limits, or effects of missing parameters.
Agents need to know what a tool does to the 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. It is front-loaded with the primary action but lacks structural elements like parameter summaries or examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, no annotations, and only 4 parameters, the description is incomplete. It does not explain pagination behavior, response format, or error handling, leaving the agent uncertain about usage 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 coverage is 100% with basic descriptions for each parameter. The tool description adds no extra meaning beyond the schema, so 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 verb 'Retrieve', the resource 'accounting accounts (GL accounts)', and mentions 'paginated list with optional filtering', distinguishing it from other list tools like listCustomers or listInvoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage guidance is provided. The description does not indicate when to use this tool over siblings, nor does it mention when not to use it or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAggregateslistAggregatesB
List Billable Metrics in paginated form, with filtering by ID, name, and data source.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | The cursor for pagination. | |
| limit | No | Maximum number of records to return per page (defaults to 10). | |
| order | No | Order of results (e.g., '-created_at'). | -created_at |
| sort_key | No | Key to sort the results by (e.g., 'id'). | created_at |
| sort_type | No | Sort order type (e.g., 'asc'). | DESC |
| id | No | Filter by aggregate ID. | |
| name__ilike | No | Case-insensitive partial match for aggregate name. | |
| datasource | No | Filter by data source ID. | |
| created_at__gte | No | Filter by creation date greater than or equal to (ISO 8601). | |
| parent_aggregate_id__isnull | No | Whether to include only top-level aggregates (no parent). Defaults to true. | |
| aggregate_type__isnull | No | Whether to include only aggregates without an explicit type. Defaults to true. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description fully responsible for behavioral disclosure. It only mentions pagination and filtering but omits read-only nature, response format, side effects, auth requirements, or rate limits. This is a significant gap for a retrieval 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?
Single sentence of 10 words, highly concise and front-loaded. No unnecessary 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?
Despite schema having 12 parameters and no output schema, the description is very brief. It does not explain pagination mechanics, default behavior, response structure, or relationships to sibling tools. Leaves significant gaps for a complex list 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 covers all parameters (100% coverage), so baseline is 3. Description adds value by summarizing three key filters (ID, name, datasource) but does not explain cursor, limit, sorting, or other filters. It provides modest additional context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists billable metrics in paginated form with filtering, which distinguishes it from single-item retrieval tools like getAggregateById. However, the term 'billable metrics' is not explicitly linked to 'aggregates' in the tool name, causing slight 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?
Description mentions pagination and filtering but does not specify when to use this tool vs alternatives like getAggregateById or other list tools. No explicit guidance on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAllPaymentslistAllPaymentsC
Retrieve a paginated list of all payments, including refund records, with extensive filtering and sorting options.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | The cursor for pagination. | |
| limit | No | Maximum number of payments to return per page (defaults to 10). | |
| search | No | General search query. | |
| sort_key | No | Key to sort the results by (e.g., 'id'). | |
| sort_type | No | Sort order type (e.g., 'asc'). | |
| order | No | Order of results (e.g., '-created_at'). | -created_at |
| id | No | Filter by payment ID. | |
| customer_id | No | Filter by customer ID. | |
| connector_id | No | Filter by connector ID. | |
| external_id__ilike | No | Case-insensitive partial match for external ID. | |
| payment_method | No | Filter by payment method (e.g., 'card', 'cash', 'bank_transfer'). | |
| type | No | Filter by payment type (e.g., 'payment', 'refund'). | |
| amount__gte | No | Filter by amount greater than or equal to. | |
| amount__lte | No | Filter by amount less than or equal to. | |
| amount_refunded__gte | No | Filter by amount refunded greater than or equal to. | |
| amount_refunded__lte | No | Filter by amount refunded less than or equal to. | |
| currency_code__ilike | No | Case-insensitive partial match for currency code. | |
| receipt_number__ilike | No | Case-insensitive partial match for receipt number. | |
| status | No | Filter by payment status (e.g., 'success', 'failed'). | |
| autocharge | No | Filter by auto-charge status. | |
| parent_id | No | Filter by parent payment ID. | |
| timestamp__gte | No | Filter by timestamp greater than or equal to (Unix time). | |
| timestamp__lte | No | Filter by timestamp less than or equal to (Unix time). | |
| created_at__gte | No | Filter by creation date greater than or equal to (ISO 8601). | |
| created_at__lte | No | Filter by creation date less than or equal to (ISO 8601). | |
| invoice__id | No | Filter by associated invoice ID. | |
| invoice__bill_for_date__gte | No | Filter by invoice billing date greater than or equal to (ISO 8601). | |
| invoice__bill_for_date__lte | No | Filter by invoice billing date less than or equal to (ISO 8601). | |
| invoice__approved_at__gte | No | Filter by invoice approval date greater than or equal to (ISO 8601). | |
| invoice__approved_at__lte | No | Filter by invoice approval date less than or equal to (ISO 8601). | |
| customer__business_entity_id | No | Filter by customer's business entity ID. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions pagination and filtering but lacks details on rate limits, authentication, default behavior, or potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that efficiently communicates the tool's purpose without any 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 has 32 parameters and no output schema, the description is too brief. It does not explain pagination behavior, return structure, default sorting, or how to use the extensive filters effectively.
Complex tools with many parameters or behaviors need more documentation. 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 adds the fact that refund records are included, but otherwise does not enhance 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 it retrieves a paginated list of payments including refunds, with filtering and sorting. It uses a specific verb and resource, but does not explicitly differentiate from sibling list tools like listInvoices or listPaymentMethods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention context, prerequisites, or 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.
listBusinessEntitieslistBusinessEntitiesB
Retrieve a list of business entities configured for the organization.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor for pagination. | |
| limit | No | Maximum number of entities to return. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It only states 'retrieve a list' without mentioning key traits like read-only nature, authentication requirements, pagination details, or implicit organization filtering via __userContext. This is insufficient for safe agent 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?
The description is a single sentence and front-loaded with the purpose, but it is overly terse given the tool's complexity (3 parameters, no annotations). It sacrifices needed detail for brevity, earning an adequate but not excellent score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 annotations, the description must provide comprehensive context. It fails to mention pagination defaults, ordering, scope of entities returned, or any limitations. As a result, the agent lacks sufficient information to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters (cursor, limit, __userContext). However, the description adds no extra meaning beyond the schema, such as how to effectively use cursor for pagination or the role of __userContext. 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?
Description clearly states 'Retrieve a list of business entities configured for the organization,' specifying verb and resource. It distinguishes itself from sibling tools like getBusinessEntityById (single entity) and other list tools (e.g., listAccounts, listCustomers) by naming a distinct resource 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 guidance is provided on when to use this tool versus alternatives, such as when to use listBusinessEntities vs. getBusinessEntityById or listAccounts. The description lacks context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listContactslistContactsC
Retrieve a paginated list of contacts.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | The cursor for pagination. | |
| limit | No | Maximum number of contacts to return per page (defaults to 10). | |
| sort_key | No | Key to sort the results by (e.g., 'id'). | |
| sort_type | No | Sort order type (e.g., 'asc'). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. Only 'paginated list' is disclosed, omitting behavioral traits like authentication required (implied by __userContext parameter), rate limits, or pagination specifics. Does not describe return format 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?
Single sentence, no filler. Efficient but could incorporate more useful detail without significant 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 5 parameters (including nested __userContext), no output schema, and many sibling list tools, the description is too sparse. Missing response structure, pagination mechanics, and usage notes for complex auth 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 covers all 5 parameters with descriptions (100% coverage). The tool description adds no additional meaning 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?
The description clearly states the verb 'Retrieve' and the resource 'a paginated list of contacts', distinguishing it from single-contact tools like getContactById and mutation tools. However, it doesn't differentiate from other list tools (e.g., listAccounts) except by resource name, which is adequate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool versus alternatives (e.g., getContactById for a specific contact, or listCustomers for other entities). No context on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listContractslistContractsB
Retrieve a paginated list of contracts, with extensive options for filtering by ID, customer ID, name, start date, end date, creation date, and status.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | The cursor for pagination to fetch the next or previous set of records. | |
| limit | No | Maximum number of records to return per page (defaults to 10). | |
| order | No | Order of results (e.g., '-created_at' for descending creation date). | -created_at |
| id | No | Filter by Contract ID (exact match). | |
| id__in | No | Filter by a comma-separated list of Contract IDs. | |
| id__isnull | No | Filter by whether Contract ID is null. | |
| customer_id | No | Filter by Customer ID (exact match). | |
| customer_id__in | No | Filter by a comma-separated list of Customer IDs. | |
| customer_id__isnull | No | Filter by whether Customer ID is null. | |
| name | No | Filter by Contract Name (exact match). | |
| name__ilike | No | Contract Name (case-insensitive partial match). | |
| name__like | No | Contract Name (case-sensitive partial match). | |
| name__in | No | Filter by a comma-separated list of Contract Names. | |
| name__isnull | No | Filter by whether Contract Name is null. | |
| start_date | No | Contract Start Date (exact match, ISO 8601). | |
| start_date__neq | No | Contract Start Date (not equal, ISO 8601). | |
| start_date__gt | No | Contract Start Date (greater than, ISO 8601). | |
| start_date__gte | No | Contract Start Date (greater than or equal to, ISO 8601). | |
| start_date__lt | No | Contract Start Date (less than, ISO 8601). | |
| start_date__lte | No | Contract Start Date (less than or equal to, ISO 8601). | |
| start_date__isnull | No | Filter by whether Contract Start Date is null. | |
| start_date__in | No | Filter by a comma-separated list of Contract Start Dates. | |
| created_at | No | Contract Created At (exact match, ISO 8601). | |
| created_at__neq | No | Contract Created At (not equal, ISO 8601). | |
| created_at__gt | No | Contract Created At (greater than, ISO 8601). | |
| created_at__gte | No | Contract Created At (greater than or equal to, ISO 8601). | |
| created_at__lt | No | Contract Created At (less than, ISO 8601). | |
| created_at__lte | No | Contract Created At (less than or equal to, ISO 8601). | |
| created_at__isnull | No | Filter by whether Contract Created At is null. | |
| created_at__in | No | Filter by a comma-separated list of Contract Creation Dates. | |
| end_date | No | Contract End Date (exact match, ISO 8601). | |
| end_date__neq | No | Contract End Date (not equal, ISO 8601). | |
| end_date__gt | No | Contract End Date (greater than, ISO 8601). | |
| end_date__gte | No | Contract End Date (greater than or equal to, ISO 8601). | |
| end_date__lt | No | Contract End Date (less than, ISO 8601). | |
| end_date__lte | No | Contract End Date (less than or equal to, ISO 8601). | |
| end_date__isnull | No | Filter by whether Contract End Date is null. | |
| end_date__in | No | Filter by a comma-separated list of Contract End Dates. | |
| status | No | Filter contracts by their status. | |
| status__in | No | Filter by a comma-separated list of contract statuses. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits like pagination, sort order, or side effects. It only mentions 'paginated' and 'filtering options' but lacks details on rate limits, authentication, or what happens with no results. Being a read operation is implied but not confirmed.
Agents need to know what a tool does to the 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 efficiently states the tool's purpose. It is front-loaded with the main action and avoids unnecessary words. Every piece of information 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 the large number of parameters (41) and no output schema, the description is insufficient. It does not explain pagination mechanics (cursor usage), ordering behavior, or the structure of returned contracts. The tool's complexity demands more 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 schema already documents all 41 parameters. The description adds no additional meaning beyond listing field groups (ID, customer, name, etc.). This meets the baseline for high schema coverage but does not enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a paginated list of contracts and lists common filter fields. This distinguishes it from sibling tools like getContractById (single contract) or createContract. The verb 'retrieve' and resource 'list of contracts' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., getContractById for a single contract, or listInvoices for invoices). The description does not mention when not to use it or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCreditNoteslistCreditNotesB
Retrieve a paginated list of credit notes. Supports cursor-based pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor for pagination. | |
| limit | No | Maximum number of results per page (defaults to 10). | |
| customer_id | No | Filter by customer UUID. | |
| invoice_id | No | Filter by invoice UUID. | |
| status | No | Filter by status: in_progress, issued, void, or paid. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions pagination and cursor support but omits other behavioral details such as default limit, ordering, read-only nature (implied by 'retrieve'), auth requirements, or response format. The description is minimal.
Agents need to know what a tool does to the 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 main purpose. Every word is necessary and no fluff. It is appropriately sized for a straightforward list 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?
Given no output schema and the presence of pagination/filtering, the description could be more complete by specifying default limit, ordering, or typical use cases. However, the schema covers input parameters adequately. It meets the minimum viable 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 coverage is 100%, so baseline is 3. The description does not add new meaning beyond the schema's parameter descriptions. It mentions cursor-based pagination, which correlates to cursor and limit, but does not elaborate on usage or 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?
The description clearly states the tool retrieves a paginated list of credit notes and mentions cursor-based pagination. The resource (credit notes) and verb (retrieve) are specific, distinguishing it from singular getCreditNoteById, but it does not explicitly differentiate from other list tools like listInvoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool vs alternatives (e.g., getCreditNoteById for single credit note, listInvoices for invoices). No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCustomAttributeslistCustomAttributesB
Retrieve a list of custom attribute definitions configured for the organization.
| Name | Required | Description | Default |
|---|---|---|---|
| module | No | Filter by module. Valid values: 'customers', 'contracts', 'invoices', 'payments', 'products', 'plans'. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only operation with 'Retrieve', but it does not disclose any behavioral traits such as authentication requirements, rate limits, or side effects. With no annotations provided, the description carries the burden but only hints at safety.
Agents need to know what a tool does to the 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 with no wasted words. It is front-loaded and efficient, though it could be slightly more informative without sacrificing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 lacks essential context such as return format, pagination, or behavior when no data exists. Additionally, the internal '__userContext' parameter is not explained. Given the absence of an output schema and annotations, the description is incomplete for a fully informed tool usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the two parameters, and the description adds no additional meaning beyond what the schema already provides. The 'module' parameter is described in the schema with valid values, and '__userContext' is internal.
Input schemas describe structure but not intent. Descriptions should explain 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 'Retrieve' and the resource 'list of custom attribute definitions'. It precisely identifies what the tool does and distinguishes it from sibling tools like createCustomAttribute.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage guidelines are provided. The description does not mention when to use this tool versus alternatives, nor does it specify any prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCustomerAddresseslistCustomerAddressesB
Retrieve all addresses for a specific customer.
| Name | Required | Description | Default |
|---|---|---|---|
| customerId | Yes | The unique identifier of the customer. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description leaves out behavioral details such as authentication requirements, pagination, or whether archived addresses are included. Only states a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is efficient, front-loaded, and contains no extraneous 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?
Lacking details on pagination, filtering, or response format; no output schema; incomplete for a list tool with nested objects and no 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% for customerId, but the tool description adds no extra meaning. The nested __userContext is unexplained in the 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 specifies the verb 'retrieve', the resource 'all addresses', and the scope 'for a specific customer', clearly distinguishing from sibling tools like createCustomerAddress and other list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use vs alternatives like createCustomerAddress or other list tools; no context about prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listCustomerslistCustomersB
Retrieve a paginated list of customers, with options for searching, filtering by ID, external ID, email, phone number, communication status, auto-charge status, creation date, customer name, and business entity ID.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | The cursor for pagination to fetch the next or previous set of records. | |
| limit | No | Maximum number of customers to return per page (defaults to 10). | |
| search | No | Advanced key-value search query. Format: 'field=value' or 'field1=value1,field2=value2'. Supports any customer field including nested JSON paths. Examples: 'customer_name=Acme', 'email=john@example.com', 'customer_name=Acme,external_id=EXT-100', 'custom_data.users=abc@dev.in'. String fields use case-insensitive contains matching. Do NOT pass plain text — always use field=value format. | |
| search_name_external_id | No | Quick relevance-ranked search across customer_name and external_id. Accepts plain text (e.g., 'Acme'). Results are ranked: exact match first, then starts-with, then contains. Simpler alternative to the 'search' parameter when you only need to find customers by name or external ID. | |
| order | No | Order of results (e.g., '-created_at' for descending creation date). | -created_at |
| sort_key | No | Key to sort the results by (e.g., 'id'). | |
| sort_type | No | Sort order type (e.g., 'asc' for ascending). | |
| expand | No | Fields to expand in the response (e.g., 'contacts'). | |
| id | No | Filter by customer ID (exact match). | |
| id__in | No | Filter by a comma-separated list of customer IDs. | |
| external_id | No | Filter by external ID (exact match). | |
| external_id__ilike | No | Case-insensitive partial match for external ID. | |
| No | Filter by email (exact match). | ||
| email__ilike | No | Case-insensitive partial match for email. | |
| phone_number__ilike | No | Case-insensitive partial match for phone number. | |
| communications_enabled | No | Filter by communications enabled status. | |
| auto_charge_enabled | No | Filter by auto-charge enabled status. | |
| created_at__gte | No | Filter by creation date greater than or equal to (ISO 8601 format). | |
| created_at__lte | No | Filter by creation date less than or equal to (ISO 8601 format). | |
| customer_name__ilike | No | Case-insensitive partial match for customer name. | |
| business_entity_id | No | Filter by business entity ID (exact match). | |
| invoice__customer_id | No | Filter by invoice customer ID. | |
| invoice__status | No | Filter by invoice status. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'paginated' but does not disclose pagination behavior (e.g., cursor vs offset, default limit), rate limits, auth requirements, or whether it is read-only. Lacks details on potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single long sentence that lists many filter options. It is not front-loaded with the most critical info (e.g., core functionality). Could be more concise by structuring or grouping filters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 (24 parameters, no output schema), the description is adequate but incomplete. It covers filtering capabilities but lacks details on pagination, return format, error conditions, and behavior when no filters are applied.
Complex tools with many parameters or behaviors need more documentation. 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 enumerates many filter fields but does not add meaning beyond the schema. No new semantic context is provided for any 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 the action ('retrieve a paginated list') and the resource ('customers'), and distinguishes it from sibling tools by listing numerous filter options. It is specific and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool vs alternatives (e.g., getCustomerById or other list tools). No mention of prerequisites or when not to use. The description only lists available filters without context for choosing between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listEntitlementslistEntitlementsB
List entitlements in paginated form, with filtering by ID, name, type, product, and active status.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | The cursor for pagination. | |
| limit | No | Maximum number of records to return per page (defaults to 50). | |
| order | No | Order of results (e.g., '-created_at'). | -created_at |
| sort_key | No | Key to sort the results by. | created_at |
| sort_type | No | Sort order type ('ASC' or 'DESC'). | DESC |
| search | No | Text search across entitlement fields. | |
| id | No | Filter by entitlement ID. | |
| name__ilike | No | Case-insensitive partial match for entitlement name. | |
| entitlement_type | No | Filter by entitlement type. | |
| is_active | No | Filter by active status. | |
| product_id | No | Filter by associated product ID. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but only mentions pagination and filters. It fails to disclose behavioral traits like default limit, sort behavior, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that conveys the core functionality without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 12 parameters and no output schema, the description omits important details like return format, pagination cursor usage, and ordering behavior, leaving gaps for the 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 coverage is 100%, so baseline 3 applies. The description simply summarizes the filter fields without adding further meaning or usage notes 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 clearly states the tool lists 'entitlements in paginated form' with specific filtering options, effectively differentiating it from single-entitlement retrieval or mutation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. The context of sibling list tools implies general usage for multiple entitlements, but no alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listInvoiceslistInvoicesB
Retrieve a paginated list of invoices, with options for filtering by customer, status, amounts, due date, creation date, and related customer/contract details.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | No | Filter invoices by a specific customer ID. | |
| customer__external_id | No | Filter invoices by a customer's external ID (nested filter). | |
| status | No | Filter invoices by their status (e.g., 'draft', 'approved', 'paid', 'void', 'partially_paid', 'upcoming'). | |
| status__in | No | Filter invoices by multiple statuses (comma-separated, e.g., 'draft,approved,paid,partially_paid,upcoming,void'). | |
| cursor | No | The cursor for pagination. | |
| limit | No | Maximum number of invoices to return per page (defaults to 10). | |
| contract_id | No | Filter by contract ID. | |
| external_id | No | Filter by invoice external ID. | |
| invoice_total__gte | No | Filter by invoice total greater than or equal to. | |
| invoice_total__lte | No | Filter by invoice total less than or equal to. | |
| amount_due__gte | No | Filter by amount due greater than or equal to. | |
| amount_due__lte | No | Filter by amount due less than or equal to. | |
| due_date__gte | No | Filter by due date greater than or equal to (ISO 8601). | |
| due_date__lte | No | Filter by due date less than or equal to (ISO 8601). | |
| created_at__gte | No | Filter by creation date greater than or equal to (ISO 8601). | |
| created_at__lte | No | Filter by creation date less than or equal to (ISO 8601). | |
| invoice_number__like | No | Partial match for invoice number. | |
| customer__customer_name__ilike | No | Case-insensitive partial match for customer name associated with the invoice. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry full burden. It mentions pagination and filtering, implying read-only behavior. However, it does not disclose details like result format, default sort order, or absence of side effects, which are important for a tool with 19 parameters.
Agents need to know what a tool does to the 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 is front-loaded with the core purpose. It is efficient and free of fluff, but lacks separate sections for usage guidance, which could improve 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?
Despite no output schema, the description minimally states it returns a list of invoices. For a tool with 19 parameters and pagination, more detail on response structure and pagination behavior would be beneficial, but the description is adequate for a basic list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema already documents all parameters. The description adds a high-level summary of filter categories but does not elaborate on parameter semantics 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 clearly states the action ('retrieve a paginated list'), the resource ('invoices'), and highlights filtering options. This distinguishes it from single-invoice retrieval tools like getInvoiceById and generative tools like generateInvoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit guidance on when to use listInvoices versus alternatives (e.g., getInvoiceById for a single invoice, or other list tools). No exclusions or preferred contexts are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listJobslistJobsB
Retrieve a paginated list of async jobs (invoice generation, revenue recognition, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor for pagination. | |
| limit | No | Maximum number of jobs to return per page. | |
| search | No | Search query to filter jobs. Format: 'field=value'. | |
| resource__neq | No | Exclude jobs whose resource type equals this value. Defaults to 'revenue_posting' to hide noisy internal revenue-recognition jobs; pass a different value or empty string to override. | revenue_posting |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It mentions pagination and filtering only implicitly through parameter names, but does not disclose behavioral traits such as whether it's read-only, any rate limits, authentication requirements, or how results are sorted. The default exclusion of 'revenue_posting' is hinted in a parameter but not in 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?
The description is a single sentence that efficiently conveys the core function. 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?
With no output schema, the description should explain the return format (e.g., array of job objects with fields). It does not. For a paginated list with 5 parameters, the description could include common usage context like cursor handling or result ordering. Lacks completeness for a tool with moderate 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 coverage is 100%, so the schema already documents all parameters. The description adds minor context by listing example job types, but does not add significant meaning beyond schema descriptions. 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 specifies the verb 'Retrieve' and the resource 'paginated list of async jobs', with concrete examples like 'invoice generation, revenue recognition'. It distinguishes itself from other list tools by specifying the job focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when wanting to list async jobs, but does not provide explicit guidance on when to use this tool versus alternatives like listInvoices or listRevenuePostings. No when-not-to-use or alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listJournalEntrieslistJournalEntriesA
Retrieve a paginated list of journal entries with optional filtering by date, status, account, or job. Filters use fastapi-filter conventions (e.g. posted_at__gte=YYYY-MM-DD, lines__account_id=).
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor for pagination. | |
| limit | No | Maximum number of journal entries to return per page. | |
| search_query | No | Search query to filter journal entries. | |
| order | No | Sort order. Prefix with '-' for descending. Defaults to '-created_at'. | |
| id | No | Filter by journal entry UUID (exact match). | |
| posted_at__gte | No | Posted-at date lower bound (inclusive). Accepts ISO date YYYY-MM-DD or full datetime. | |
| posted_at__lte | No | Posted-at date upper bound (inclusive). | |
| status_type | No | Filter by status. Common values: 'posted', 'draft'. | |
| description__ilike | No | Case-insensitive partial match on description. | |
| job_id | No | Filter by originating job UUID (e.g. revenue recognition batch). | |
| lines__account_id | No | Filter entries having a line on this account UUID. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states pagination, filtering, and gives filter syntax examples. It does not detail rate limits or auth requirements but covers the main 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 sentences, no wasted words. The first sentence states purpose and filtering, the second gives conventions. Front-loaded 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?
Given no output schema, the description adequately covers pagination and filtering. It could hint at the return fields, but 'paginated list of journal entries' is sufficient for common understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds value by explaining filter conventions (fastapi-filter) and providing example syntax, which goes beyond individual 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 clearly states the action ('retrieve'), the resource ('paginated list of journal entries'), and the filtering options. It distinguishes from sibling tools like listJournalLines and getJournalEntry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage, including optional filtering and filter conventions. It does not explicitly state when not to use or name alternatives, but the purpose is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listJournalLineslistJournalLinesA
Retrieve a paginated list of journal lines (individual debit/credit entries) across all journal entries. Supports filtering by customer, contract, account, currency, and parent journal entry posted date.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor for pagination. | |
| limit | No | Maximum number of journal lines to return per page. | |
| search_query | No | Search query to filter journal lines. | |
| order | No | Sort order. Prefix with '-' for descending. Defaults to '-created_at'. | |
| customer_id | No | Filter by customer UUID. | |
| contract_id | No | Filter by billing contract UUID. | |
| account_id | No | Filter by GL account UUID. | |
| journal_entry_id | No | Filter by parent journal entry UUID. | |
| revenue_contract_id | No | Filter by revenue recognition contract UUID (distinct from billing contract_id). | |
| performance_obligation_id | No | Filter by performance obligation UUID. | |
| invoice_id | No | Filter by invoice UUID. | |
| currency | No | Three-letter ISO currency code (e.g. 'USD'). | |
| journal_entry__posted_at__gte | No | Parent entry posted-at lower bound (inclusive). YYYY-MM-DD or ISO datetime. | |
| journal_entry__posted_at__lte | No | Parent entry posted-at upper bound (inclusive). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral traits. It states the tool returns a paginated list and supports filters, but fails to disclose default behavior, authentication requirements, sort order defaults, or whether it is read-only. Critical gaps remain.
Agents need to know what a tool does to the 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 wasted words. It front-loads the core purpose and then lists filters. 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?
Given the complexity (15 parameters, no output schema, no annotations), the description provides the essential information but omits details on pagination, sort order behavior, and return format. 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%, so baseline is 3. The description adds minimal extra meaning by highlighting specific filter capabilities, but does not elaborate on all parameters (e.g., search_query, order, pagination parameters). The schema already describes each parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Retrieve), resource (journal lines), and scope (across all journal entries). It also mentions supported filters, effectively distinguishing it from sibling tools like listJournalEntries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing individual debit/credit entries with specific filters, but does not explicitly state when to use this tool versus alternatives, nor when not to use it. No comparison with other list tools is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listPaymentMethodslistPaymentMethodsB
Retrieve all payment methods for a specific customer.
| Name | Required | Description | Default |
|---|---|---|---|
| customerId | Yes | The unique identifier of the customer. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must compensate. Only states 'Retrieve', implying read-only, but lacks details on authentication, pagination, return format, or any 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?
Single sentence, front-loaded with action and object. No wasted words, but could benefit from more detail without losing 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?
No output schema, so description should clarify return format. Missing details on pagination, error behavior, or whether it returns all methods without filtering. For a list tool, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with descriptions for both parameters (customerId and __userContext). The tool description adds no additional meaning beyond what the schema provides, achieving 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 uses specific verb 'Retrieve' and resource 'payment methods' with scope 'for a specific customer'. It clearly distinguishes from sibling tools like listAllPayments or attachPaymentMethod.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 vs alternatives (e.g., listAllPayments), no prerequisites or exclusions mentioned. The only hint is 'for a specific customer', implying customerId is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listPlanslistPlansA
Retrieve a paginated list of plans that define reusable contract structures. Hits /plans — the same data the Zenskar app's Plans page reads.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor for pagination. | |
| limit | No | Maximum number of plans to return per page. | |
| name__ilike | No | Case-insensitive partial match for plan name. | |
| status | No | Filter by plan status. Valid values: draft, active, archived. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description bears full burden. Mentions pagination and endpoint, indicating it's a read operation. However, does not describe return structure, authorization requirements, or rate limits. 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 efficient sentences with no wasted words. Front-loaded with action and resource, then context. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 description should compensate. States pagination and endpoint, but lacks details on response structure (fields returned), default limit, or sort order. Adequate for a simple list operation but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. Description adds no extra meaning beyond the schema. Baseline 3 is appropriate since the schema already documents parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'retrieve a paginated list of plans' with a specific verb and resource, and distinguishes from siblings like createPlan and getPlanById by indicating it's a list operation. Also mentions the endpoint and app source, reinforcing 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?
Implied usage for listing plans, but no explicit guidance on when to use vs alternatives (e.g., getPlanById for single plan, createPlan for creation). No exclusions or when-not-to-use provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listProductslistProductsB
Retrieve a paginated list of products. Products define what is being sold and can be associated with pricing and contracts.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor for pagination. | |
| limit | No | Maximum number of results per page (defaults to 10). | |
| name__ilike | No | Case-insensitive partial match for product name. | |
| type | No | Filter by product object type. Defaults to 'product' (excludes plans, addons, etc.). | product |
| product_category__isnull | No | Whether to include only products without a category. Defaults to true. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It implies a read operation but does not explicitly state read-only nature, rate limits, or side effects. Minimal transparency beyond basic purpose.
Agents need to know what a tool does to the 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: one for purpose, one for definition. Concise and direct. Could front-load more but no extraneous 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?
No output schema, so return values are not described. Pagination behavior (cursor usage, ordering) is not explained beyond schema. Adequate for a simple list tool but missing details.
Complex tools with many parameters or behaviors need more documentation. 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 have descriptions. The tool description adds no additional meaning beyond the schema. 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?
Description clearly states 'Retrieve a paginated list of products' with additional context on what products are. However, it does not explicitly differentiate from sibling list tools like listPlans, which might have similar filtering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool versus other list tools (e.g., listPlans) or how to combine with filters. No mention of prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listRawMetricslistRawMetricsC
List Usage Events. Supports filtering by ID, name, and API slug.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | The cursor for pagination. | |
| limit | No | Maximum number of records to return per page (defaults to 10). | |
| order | No | Order of results (e.g., '-created_at'). | -created_at |
| sort_key | No | Key to sort the results by (e.g., 'created_at'). | created_at |
| sort_type | No | Sort order type (e.g., 'asc'). | DESC |
| search | No | General search query. | |
| id | No | Filter by usage event ID. | |
| name__ilike | No | Case-insensitive partial match for usage event name. | |
| api_slug__ilike | No | Case-insensitive partial match for API slug. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It does not disclose pagination behavior (cursor, limit), ordering, or authentication needs. The presence of internal parameter '__userContext' is not explained. The description is too brief to provide adequate behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two short, front-loaded sentences. Every word is necessary; it states the purpose and key capability without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (10 parameters, no output schema, no annotations), the description is insufficient. It does not explain pagination, sorting, or how filtering works. The internal '__userContext' parameter is not acknowledged. The description lacks completeness for a list 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 each parameter has its own description. The tool description adds only a summary statement about filters (ID, name, API slug) which does not significantly enhance understanding beyond the schema. Baseline 3 is appropriate as the description adds marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List Usage Events' which indicates the verb (list) and resource (usage events). The tool name 'listRawMetrics' and sibling tools like 'getRawMetricById' suggest it lists multiple raw metrics, so purpose is clear. However, it does not explicitly differentiate from similar list or get tools, lacking explicit 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?
No guidance on when to use this tool versus alternatives such as 'getRawMetricById' for single retrieval. No mention of prerequisites, pagination, or when not to use. The description only states supported filters but does not provide usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listRevenuePostingslistRevenuePostingsB
Retrieve a paginated list of revenue postings (per-period revenue allocations against revenue contracts and performance obligations). Supports filtering by contract, revenue contract, performance obligation, posting date, and currency.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor for pagination. | |
| limit | No | Maximum number of revenue postings to return per page. | |
| order | No | Sort order. Prefix with '-' for descending. Defaults to '-created_at'. | |
| contract_id | No | Filter by billing contract UUID. | |
| revenue_contract_id | No | Filter by revenue recognition contract UUID. | |
| revenue_contract_item_id | No | Filter by revenue contract item UUID. | |
| performance_obligation_id | No | Filter by performance obligation UUID. | |
| posting_date__gte | No | Posting date lower bound (inclusive, YYYY-MM-DD). | |
| posting_date__lte | No | Posting date upper bound (inclusive, YYYY-MM-DD). | |
| currency | No | Three-letter ISO currency code (e.g. 'USD'). | |
| journal_entry_id__isnull | No | If true, return only postings not yet posted to a journal entry. If false, return only postings already journalised. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full burden. It states pagination and filtering but does not disclose whether the operation is read-only, any authentication requirements, rate limits, or potential side effects. The description is insufficient for a tool with no 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 long, with no superfluous words. The first sentence defines the action and resource, the second lists key filters. Perfectly concise and 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?
With 12 parameters, no output schema, and no annotations, the description is too brief. It fails to explain pagination mechanics, default ordering, maximum limit, or the meaning of the journal_entry_id__isnull parameter. The response format is not described, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. 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 reiterates that filtering is available by contract, revenue contract, etc., but adds no new meaning beyond the schema. The parameters are well-described in the schema, so the description does not improve understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Retrieve a paginated list' and clearly identifies the resource as 'revenue postings', with a parenthetical explanation of what they are. It distinguishes the tool from siblings like listContracts and refreshRevenuePostings by focusing on listing revenue allocations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 filtering capabilities but does not explicitly state when to use this tool versus alternatives or when not to use it. The context is implied by the resource name, but no usage restrictions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listTaxCategorieslistTaxCategoriesB
Retrieve a list of tax categories configured for the organization.
| Name | Required | Description | Default |
|---|---|---|---|
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It only says 'Retrieve a list' without mentioning authentication, pagination, error handling, or whether it's read-only. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence efficiently conveys purpose. Front-loaded and no redundant words. Appropriate for a simple listing 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?
No output schema, but description omits return format, fields, or any filtering options. For a list tool, agent needs to know what to expect in the 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?
The sole parameter '__userContext' is fully described in schema (100% coverage). Tool description adds no additional meaning beyond schema, meeting baseline 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?
Description clearly states verb 'Retrieve' and resource 'list of tax categories configured for the organization'. It distinguishes from sibling 'createTaxCategory' and other list tools by specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by name and description (when you need tax categories), but no explicit guidance on when to use vs alternatives, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pauseContractpauseContractA
Pause an active contract. ALWAYS ask the user explicitly for both 'start_date' and 'unpause_extension_policy' before calling — do NOT silently default. A future-dated start_date will create a scheduled pause that has not yet begun; the contract's top-level status stays 'active' until start_date passes. Use 'editPauseContract' to adjust the pause window or set a resume date afterward.
| Name | Required | Description | Default |
|---|---|---|---|
| contractId | Yes | The unique identifier (UUID) of the contract to pause. | |
| start_date | Yes | Date when the pause begins (ISO 8601 format, e.g. 2026-04-01T00:00:00). REQUIRED — ask the user; never default to today or a future date silently. | |
| unpause_extension_policy | Yes | How to handle the contract end date when unpaused. 'extend' pushes the end_date out by the pause duration; 'overlap' keeps end_date fixed. ASK the user. | |
| end_date | No | Optional date when the pause ends and contract auto-resumes (ISO 8601). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It explains that a future-dated start_date results in a scheduled pause with an 'active' status until that date. However, it does not describe success/return behavior, error conditions, or auth requirements beyond the schema's userContext.
Agents need to know what a tool does to the 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 four sentences long, starting with a clear purpose statement followed by imperative instructions and then behavioral details. Every sentence is necessary and provides distinct value, with no redundant or verbose 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 tool's 5 parameters (including nested userContext) and no output schema, the description explains key parameters (contractId, start_date, unpause_extension_policy, end_date) and the future-dated pause behavior. It references 'editPauseContract' for adjustments but omits details on the optional 'end_date' parameter and the userContext object. Overall, it is fairly complete but could cover the remaining nuance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by mandating user confirmation for 'start_date' and 'unpause_extension_policy' and explaining the future-dated pause behavior. This contextual information enhances understanding beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Pause an active contract,' specifying the verb and resource. It also distinguishes the tool from siblings like 'editPauseContract' and implies a counterpart 'resumeContract.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to ask the user for 'start_date' and 'unpause_extension_policy' and to avoid silent defaults. It mentions 'editPauseContract' as an alternative for adjustments but does not explicitly state when NOT to use this tool (e.g., if contract is already paused).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payInvoicepayInvoiceA
Initiate payment for an invoice using a payload. MONEY-MOVING ACTION — only call when the user explicitly authorizes payment for this specific invoice. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | The payment payload. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that this is a money-moving action and mentions the approval gate, but lacks details on side effects, results, or required permissions. Adequate but not comprehensive.
Agents need to know what a tool does to the 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 that are front-loaded with purpose and immediately followed by critical usage guidance. Every sentence adds 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?
Adequate for a simple payment initiation tool, but lacks explanation of output behavior, error handling, or what constitutes a valid payload. With a complex nested parameter (__userContext) not mentioned, completeness could be improved.
Complex tools with many parameters or behaviors need more documentation. 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 only mentions 'using a payload' without adding meaning beyond the schema. Does not explain payload structure or __userContext which is detailed in 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 'initiate payment' and resource 'invoice' with the method 'using a payload.' It differentiates itself from sibling tools by emphasizing it is a money-moving action, but does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when to call: 'only call when the user explicitly authorizes payment for this specific invoice.' Also provides exclusion guidance: 'do NOT ask the user to re-confirm before calling' due to host enforcement. Does not mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recogniseRevenuerecogniseRevenueA
Recognize revenue for the organization up to a specified end_date. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End date for revenue recognition in YYYY-MM-DD format (required). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses one key behavior: the host handles user confirmation. However, it omits other important traits such as whether the operation is reversible, what data is affected, or any rate limits. The added context is useful but incomplete.
Agents need to know what a tool does to the 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 with two sentences. The first states the purpose, and the second provides a crucial behavioral instruction. Every word earns its place, with 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?
Given the complexity of revenue recognition (no output schema, no annotations), the description is minimal. It covers the core action and the confirmation behavior but lacks details on return values, side effects, or post-conditions. For a potentially destructive financial action, more completeness would be beneficial.
Complex tools with many parameters or behaviors need more documentation. 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 adds no extra meaning beyond the schema: 'up to a specified end_date' simply echoes the parameter description. No additional details about the internal '__userContext' object or its properties are provided.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Recognize revenue') and its scope ('for the organization up to a specified end_date'). It uses a specific verb and resource, distinguishing it from sibling tools like 'refreshRevenuePostings' or 'listRevenuePostings'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 critical guideline: 'do NOT ask the user to re-confirm before calling' because the host enforces confirmation via the approval gate. However, it does not explain when to use this tool versus alternatives like 'refreshRevenuePostings', nor does it state any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refreshRevenuePostingsrefreshRevenuePostingsA
Recalculate and upsert revenue postings for a specific revenue contract item / performance obligation at a given posting date. All five identifiers are required (the backend rejects partial inputs). Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| contract_id | Yes | Billing contract UUID (required). | |
| revenue_contract_id | Yes | Revenue recognition contract UUID (required). | |
| revenue_contract_item_id | Yes | Revenue contract item UUID (required). | |
| performance_obligation_id | Yes | Performance obligation UUID (required). | |
| posting_date | Yes | Posting date in YYYY-MM-DD format (required). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses mutation ('recalculate and upsert') and approval workflow. However, it lacks details on side effects, error behavior, or success/failure outcomes.
Agents need to know what a tool does to the 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, no fluff. Action and key behavioral note are front-loaded. 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?
Given no output schema, description covers core functionality, required parameters, and a key behavioral detail (approval gate). Sufficient for an agent to use correctly, though return values are 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 coverage is 100% with parameter descriptions. Description adds that backend rejects partial inputs, which provides context beyond schema. Baseline 3 is appropriate as description adds marginal value.
Input schemas describe structure but not intent. Descriptions should explain 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 specific verb ('Recalculate and upsert') and resource ('revenue postings'), clearly scoped to a specific revenue contract item/performance obligation at a given date. This distinguishes it from siblings like listRevenuePostings or recogniseRevenue.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 that all five identifiers are required and that partial inputs are rejected. Also instructs not to ask for re-confirmation because host enforces approval gate. Provides clear constraints but does not contrast with alternatives explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refundPaymentrefundPaymentA
Refund a payment (full or partial). Pass refund_amount=0 (or full original amount) for a full refund, or a smaller positive integer for a partial refund. refund_destination + writeoff_invoices control where the refund money goes and whether linked invoices are written off. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | The unique identifier (UUID) of the payment to refund. | |
| refund_amount | Yes | Refund amount in the smallest currency unit (integer cents/paise). Use 0 to refund the full payment, or a positive integer for a partial refund. Must not exceed the payment's remaining refundable amount. | |
| refund_destination | Yes | Where to send the refund. Valid values: 'original_payment_method' (refund back to the source card/bank), 'credits' (issue customer credits instead of returning money). | |
| writeoff_invoices | Yes | If true, the invoice(s) linked to this payment are marked written off (no further collection). Set false to leave invoice balance owing after refund. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that refund_destination and writeoff_invoices control where money goes and invoice write-off, and mentions host enforcement of confirmation. Lacks details on auth requirements or error behavior but sufficient for core 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 sentences, front-loaded with purpose, no redundant information. Each sentence serves a clear role: purpose, refund logic, additional controls and confirmation 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?
Covers core refund logic well but lacks description of return values or output. Since no output schema, description should hint at what the tool returns (e.g., refund confirmation). Missing error conditions or prerequisites like payment capture status.
Complex tools with many parameters or behaviors need more documentation. 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%. Description adds value beyond schema: explains refund_amount=0 for full refund, clarifies refund_destination valid values, and writeoff_invoices effect. Provides useful context not in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool's purpose: 'Refund a payment (full or partial).' It is specific about the resource (payment) and action (refund), and distinguishes from siblings like payInvoice or createPayment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explains when to use full vs partial refund via refund_amount=0 or positive integer. Also instructs not to ask for user re-confirmation because host enforces approval. Does not explicitly contrast with alternative tools but provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resumeContractresumeContractA
Resume a contract that is currently in an actively-running pause. MANDATORY FLOW: (1) ASK the user 'What date should the contract resume from?' — never call without a known resume date even though this endpoint takes no body. (2) Call getContractById and check the pause phase's start_date. (3a) If pause start_date is strictly in the past (pause currently active) AND the user wants to resume immediately/today → call this endpoint. (3b) If pause start_date is today OR in the future, OR the user wants a specific future resume date → call 'editPauseContract' with end_date= instead. The error 'pause phase not found' does NOT mean no pause exists — it means no pause has yet started; on this error, automatically pivot to 'editPauseContract' with the resume date. Never escalate to deleteContract or any destructive fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| contractId | Yes | The unique identifier (UUID) of the contract to resume. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description explains the endpoint takes no body, error behavior ('pause phase not found' means no pause started), and the required pre-checks. Lacks explicit mention of safety or authorization but is otherwise thorough.
Agents need to know what a tool does to the 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 purpose, then provides a step-by-step flow. Every sentence is informative and necessary, with 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 complexity of contract pause/resume logic, the description covers all necessary context: prerequisites, decision branches, error handling, and exclusion of destructive alternatives. No output schema but return values are likely straightforward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining __userContext as internal for multi-tenant auth and approval workflow, which is not in the schema 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 clearly states the tool resumes a contract in an actively-running pause, and distinguishes it from editPauseContract by specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 mandatory pre-steps (ask for date, call getContractById), conditional logic based on pause start date, and explicit error-handling pivot to editPauseContract. Includes a directive not to escalate to deleteContract.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateAggregateupdateAggregateA
Update an existing Billable Metric. All body fields are optional — only send fields you want to change. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| aggregateId | Yes | The unique identifier (UUID) of the billable metric (aggregate) to update. | |
| name | No | Updated name of the billable metric. | |
| dataschema | No | Updated data schema (JSON string). | |
| aggregation_query | No | Updated aggregate query (SQL/Jinja template). | |
| cust_agg_query | No | Updated customer aggregate query (SQL/Jinja template). | |
| visual_query_builder | No | Updated visual query builder configuration. | |
| datasource | No | Updated data source UUID. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It discloses the mutation behavior and the host-enforced approval gate, but does not detail side effects, error handling, 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, each earning its place: first states the purpose, second clarifies optionality and approval workflow. 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 complexity (8 parameters, nested objects) and no output schema, the description explains the core usage but omits return value, error behavior, and concurrency considerations. Adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by emphasizing that only desired fields need to be sent, which is not explicitly clear from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update') and the resource ('existing Billable Metric'). It distinguishes from sibling tools like createAggregate, deleteAggregate, and getAggregateById.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies that all body fields are optional and tells the agent not to ask for re-confirmation because the host enforces approval. However, it lacks explicit guidance on when to use this tool versus alternatives like createAggregate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateBusinessEntityupdateBusinessEntityC
Update an existing business entity's details.
| Name | Required | Description | Default |
|---|---|---|---|
| entityId | Yes | The unique identifier of the business entity to update. | |
| name | No | Updated name of the business entity. | |
| address | No | Updated address object with line1, line2, city, state, zipCode, country, country_code. | |
| tax_config | No | Tax configuration object (e.g., { "tax_id": "...", "tax_provider": "..." }). | |
| No | Updated email address. | ||
| phone_number | No | Updated phone number (max 20 chars). Include country code (e.g., +1-555-0100). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose any behavioral traits beyond the fact it updates. Nothing about side effects, required permissions, error handling, or irreversibility. The description adds zero value beyond the verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: one sentence, seven words. No fluff. However, conciseness comes at the cost of completeness; but for this dimension, it scores high on structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, no output schema, and no annotations, the description is far from complete. It provides no context about return values, error conditions, or usage scenarios. The agent would lack critical information 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 coverage is 100%, so the schema already describes all parameters. The description does not add extra meaning beyond what is in the schema, meeting 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?
Description clearly states 'Update an existing business entity's details' – specific verb (update) and resource (business entity). It distinguishes from sibling tools like createBusinessEntity and getBusinessEntityById. However, it lacks explicit differentiation or scoping beyond the minimal 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?
No guidance on when to use this tool versus alternatives. No prerequisites (e.g., entity must exist), no exclusions, and no mention of when not to use it. The description does not help the agent decide context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateContactupdateContactB
Update an existing contact's details. Supports partial updates.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | The unique identifier of the contact to update. | |
| customer | No | The customer ID (UUID) this contact belongs to. | |
| first_name | No | Updated first name. | |
| last_name | No | Updated last name. | |
| No | Updated email address. | ||
| send_contract | No | Whether to send contracts to this contact. | |
| send_invoice | No | Whether to send invoices to this contact. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavior. It only mentions partial updates, lacking details on idempotency, return values, error handling, or authentication needs. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (one sentence plus fragment), but it is not structured and lacks detail. While efficient, it is too sparse for an 8-parameter tool, missing opportunities for 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?
Given the tool's complexity (8 parameters, nested objects, no output schema), the description is incomplete. It does not explain success behavior, errors, or the mechanics of partial updates, leaving significant 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 each parameter is well-documented. The description adds semantic value by stating 'Supports partial updates', clarifying that only provided fields will change. This goes 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 action ('Update') and the resource ('existing contact'), and adds 'Supports partial updates' which distinguishes it from create/delete tools. This is specific and helpful.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 partial updates but does not explicitly guide when to use this tool versus siblings like createContact or deleteContact. No context on prerequisites or alternatives is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateContractupdateContractA
Update an existing contract. This is a PUT endpoint — you MUST fetch the contract first with getContractById, then send ALL required fields including phases. Without phases the API returns 500. Copy phases from the GET response (each phase needs name, start_date, end_date at minimum). Status: draft, active, paused, expired, disputed. Renewal: renew_with_default_contract, renew_with_existing, do_not_renew.
| Name | Required | Description | Default |
|---|---|---|---|
| contractId | Yes | The unique identifier (UUID) of the contract to update. | |
| name | Yes | Human-readable name for the contract. | |
| status | Yes | Contract status: draft, active, paused, or disputed. Cannot set to 'expired' via update. | |
| currency | Yes | Three-letter ISO 4217 currency code (e.g. USD, EUR, GBP). | |
| start_date | Yes | Contract start date in ISO 8601 format (e.g. 2026-01-01T00:00:00). | |
| customer_id | Yes | UUID of the customer associated with this contract. | |
| description | No | Detailed description of the contract terms. | |
| end_date | No | Contract end date in ISO 8601 format. | |
| anchor_date | No | Reference date for billing cycle calculations. | |
| is_last_day_of_month | No | When true, billing cycles always end on the last day of the month. | |
| custom_attributes | No | Key-value pairs for organization-specific metadata (e.g. automatic_renewal flag). | |
| phases | No | Array of contract phases. Each phase needs at minimum: name, start_date, end_date. Include pricings array if the phase has pricing. Defaults to empty array if omitted. | |
| renewal_policy | No | Contract renewal behavior: renew_with_default_contract, renew_with_existing, or do_not_renew. | |
| contract_link | No | URL to external contract document or signed agreement. | |
| bill_parent_customer | No | When true and customer has a parent relationship, invoices are sent to the parent. | |
| invoice_payer_customer_id | No | Optional customer UUID who will receive and pay invoices for this contract. | |
| include_in_renewal | No | When true, this contract is eligible for renewal processes. | |
| tags | No | List of tags for categorizing and filtering contracts. | |
| source | No | Metadata about the originating system (e.g. {source_type: 'hubspot', source_id: 'deal_123'}). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important behavioral traits: PUT endpoint, mandatory phases despite not being in the required schema, and specific status limitations. Without annotations, this provides necessary transparency, though it could mention idempotency or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that efficiently packs critical warnings and instructions. Each sentence serves a purpose, but it could be slightly more structured with bullet points for 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 complex tool with 20 parameters and nested objects (phases), the description covers the most critical behavioral details. It doesn't describe return values, but no output schema exists. The guidance is sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds value by explaining the phases requirement in detail, the status constraint, and renewal policy options. This goes beyond the schema's min/max descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates an existing contract, distinguishing it from sibling tools like createContract or deleteContract. The verb 'update' plus 'existing contract' 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?
Explicitly instructs to fetch the contract first with getContractById, warns that all fields including phases must be sent, and states that omitting phases causes a 500 error. Provides guidance on status values and renewal policies, and notes that 'expired' cannot be set via update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateCustomerupdateCustomerB
Update an existing customer's details. Supports partial updates — only send fields you want to change. Can update name, email, address, phone, communications_enabled, auto_charge_enabled, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| customerId | Yes | The unique identifier (UUID) of the customer to update. | |
| customer_name | No | Updated customer name. | |
| No | Updated email address. | ||
| phone_number | No | Updated phone number. | |
| external_id | No | Updated external identifier. | |
| address_line1 | No | Address line 1. | |
| address_line2 | No | Address line 2. | |
| address_city | No | City. | |
| address_state | No | State. | |
| address_zipCode | No | ZIP/postal code. | |
| address_country | No | Country. | |
| address_country_code | No | Country code (e.g. US, GB). | |
| communications_enabled | No | Enable/disable invoice email communications. | |
| auto_charge_enabled | No | Enable/disable auto-charge for this customer. | |
| business_entity_id | No | UUID of the business entity to associate with. | |
| address_line3 | No | Address line 3. | |
| ship_to_line1 | No | Shipping address line 1. | |
| ship_to_line2 | No | Shipping address line 2. | |
| ship_to_line3 | No | Shipping address line 3. | |
| ship_to_city | No | Shipping address city. | |
| ship_to_state | No | Shipping address state. | |
| ship_to_zipCode | No | Shipping address ZIP/postal code. | |
| ship_to_country | No | Shipping address country. | |
| ship_to_country_code | No | Shipping address country code (e.g. US, GB). | |
| custom_data | No | Custom key-value pairs for additional customer info (e.g., {"industry": "saas", "account_tier": "enterprise"}). | |
| tax_info | No | List of tax identifiers. Each item: {country_code, tax_code, tax_id}. country_code uses mixed ISO formats (e.g. 'USA', 'IND', 'AUS', 'EU', 'GB'/'UK', 'SG', 'JP', 'BR', 'CA', and 2-letter codes for EU members like 'DE', 'FR', 'IT'). tax_code varies by country — common pairings: VAT (most of EU + UK + CH + most of MENA + IL/PH/ZA/EG/JO etc.), GST (India, Australia, Singapore), GST/HST (Canada), GST/IRD (NZ), TIN (USA, Qatar, Kuwait, Iraq, Libya), JCT (Japan), CNPJ (Brazil), SST (Malaysia), NPWP (Indonesia), MVA (Norway). Pair country_code + tax_code correctly. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states the update capability and partial update support, but omits important behavioral traits like permission requirements, error handling, or response format. For a tool with 27 parameters, this is insufficient.
Agents need to know what a tool does to the 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 main action, no superfluous words. Ideal length and structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 (27 parameters, nested objects like tax_info and custom_data), the description lacks detail on return values, validation rules, and special parameter usage. The 'etc.' is vague, making it incomplete for an agent to reliably use.
Complex tools with many parameters or behaviors need more documentation. 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 marginal value by listing some fields and emphasizing partial updates, but does not provide new meaning beyond the 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?
Description clearly states 'Update an existing customer's details' with specific verb and resource, and lists updatable fields. However, it does not explicitly differentiate from sibling tools like updateCustomerAddress or createCustomer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 mentions 'Supports partial updates — only send fields you want to change', which provides clear context for usage. But lacks guidance on when not to use this tool vs alternatives like updateCustomerAddress.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateCustomerAddressupdateCustomerAddressC
Update an existing customer address.
| Name | Required | Description | Default |
|---|---|---|---|
| customerId | Yes | The unique identifier of the customer. | |
| addressId | Yes | The unique identifier of the address to update. | |
| line1 | No | Updated address line 1. | |
| line2 | No | Updated address line 2. | |
| city | No | Updated city. | |
| state | No | Updated state/province. | |
| zipCode | No | Updated ZIP/postal code. | |
| country | No | Updated country name. | |
| country_code | No | Updated ISO country code. | |
| line3 | No | Updated address line 3. | |
| is_default_billing | No | Set as default billing address. | |
| is_default_shipping | No | Set as default shipping address. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It fails to disclose any behavioral traits (e.g., authorization requirements, idempotency, side effects on default flags). The presence of '__userContext' in schema hints at complex auth, but description omits it.
Agents need to know what a tool does to the 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 single-sentence description is concise but lacks important details, making it under-specified rather than efficiently informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 parameters (including a nested '__userContext'), no output schema, and no annotations, the description is severely incomplete. It does not address return values, error conditions, or the update's impact on related data.
Complex tools with many parameters or behaviors need more documentation. 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 no additional meaning beyond the schema definitions for each 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 the action ('Update') and the resource ('existing customer address'), distinguishing it from sibling tools like 'createCustomerAddress' and 'listCustomerAddresses'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool versus alternatives, no prerequisites or conditions mentioned. The description is purely declarative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateEntitlementupdateEntitlementA
Update an existing entitlement's details. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| entitlementId | Yes | The unique identifier (UUID) of the entitlement to update. | |
| name | Yes | Updated entitlement name. | |
| description | No | Updated entitlement description. | |
| entitlement_type | No | Updated type of entitlement. | |
| units | No | Updated units for the entitlement (e.g., 'units', 'GB', 'users'). | |
| is_active | No | Whether the entitlement is active. | |
| product_id | No | Updated associated product ID (UUID format). | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry behavioral disclosure. It mentions the approval gate and warns against re-confirmation, which adds context. However, it does not detail idempotency, partial update behavior, or failure outcomes.
Agents need to know what a tool does to the 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: first states purpose, second gives behavioral guidance. No fluff, front-loaded, and 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?
No output schema, but the description is minimal. It covers purpose and key behavioral note but omits details like return type or side effects. Given 8 parameters and high schema coverage, it is adequate but could be more informative.
Complex tools with many parameters or behaviors need more documentation. 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 no additional meaning beyond what the 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?
Description clearly states 'Update an existing entitlement's details' with specific verb and resource, and it distinguishes from sibling tools like createEntitlement, deleteEntitlement, and listEntitlements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit guidance: 'Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.' This clarifies when not to ask for confirmation, though it lacks direct comparison to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updatePaymentupdatePaymentB
Update a payment's invoice allocations. The API requires a non-empty request body with payment_parts.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentId | Yes | The unique identifier (UUID) of the payment to update. | |
| payment_parts | Yes | Updated array of invoice allocations. Each element: {invoice_id: 'UUID', amount: 10000}. This field is required by the API. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully communicate behavioral traits. It only mentions the API requirement for a non-empty body, omitting authorization needs, side effects (e.g., whether existing allocations are replaced or merged), rate limits, or return value.
Agents need to know what a tool does to the 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 purpose. Concise with 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?
The description is minimal but covers the essential action. However, it lacks details about return values, error scenarios, or any prerequisite conditions beyond the request body requirement, which is expected for a mutation 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 baseline is 3. The description adds no new meaning beyond the schema; it reiterates that payment_parts must be provided but does not elaborate on format or constraints already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('update') and the resource ('a payment's invoice allocations'). It is specific and distinguishes this tool from other payment-related siblings like createPayment or refundPayment, though it could explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tool versus alternatives (e.g., editManualPayment). The only hint is the requirement for a non-empty request body, which is not a usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateProductupdateProductC
Update an existing product's details.
| Name | Required | Description | Default |
|---|---|---|---|
| productId | Yes | The unique identifier of the product to update. | |
| name | No | Updated name of the product. | |
| sku | No | Updated SKU. | |
| description | No | Updated description. | |
| is_active | No | Whether the product is active. | |
| tax_codes | No | Updated tax codes array. | |
| custom_attributes | No | Updated custom attributes. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only says 'Update an existing product's details.' It fails to disclose side effects (e.g., whether old values are overwritten, if it's destructive, authentication requirements, or approval workflow hints from the __userContext 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?
The description is extremely concise at one sentence, with no wasted words. However, it could be slightly expanded to add context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters including nested objects and no output schema, the description is too minimal. It does not mention return values, validation constraints, or how the __userContext approval workflow affects operation, which is critical for a mutation tool in this 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 baseline is 3. The main description adds no additional meaning beyond the schema's parameter descriptions, which are clear but not enriched by the tool's description itself.
Input schemas describe structure but not intent. Descriptions should explain 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 'Update an existing product's details' clearly states the verb 'update' and the resource 'product'. However, it does not distinguish this tool from siblings like updateCustomer or updateContact, which have similar update patterns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., createProduct for new products), prerequisites, or when not to use it. The agent is left without context for appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voidInvoicevoidInvoiceA
Void an invoice. ONLY works on approved or paid invoices with invoice_total == 0 (zero-balance, typically after a full credit-note offset). For non-zero approved invoices, issue a credit note via createInvoiceCreditNote first to bring the balance to zero, then void. If the call returns INVOICE_CANNOT_BE_VOIDED, surface that error verbatim — do NOT retry, do NOT escalate to deleteInvoice. Host enforces user confirmation via the approval gate; do NOT ask the user to re-confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | The unique identifier (UUID) of the invoice to void. | |
| __userContext | No | Internal user context for multi-tenant authentication and approval workflow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses preconditions (invoice state, zero balance), error handling (surface INVOICE_CANNOT_BE_VOIDED), and host-enforced confirmation.
Agents need to know what a tool does to the 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 action and conditions, no fluff, 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?
For a mutation tool with complex conditions and no output schema, the description covers all needed context: preconditions, alternatives, error handling, and user confirmation.
Complex tools with many parameters or behaviors need more documentation. 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%; description adds no new parameter details beyond the schema, but the context is sufficient.
Input schemas describe structure but not intent. Descriptions should explain 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 'void' and resource 'invoice', and distinguishes from siblings like createInvoiceCreditNote and deleteInvoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 specifies when to use (approved/paid invoices with zero balance) and when not (non-zero balance, use credit note first). Provides error handling instructions.
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. Dates show when Glama detected each change.
114 tool updates
v2.2.4- First observed
approveInvoice - First observed
attachPaymentMethod - First observed
createAccount - First observed
createAggregate - First observed
createBusinessEntity - First observed
createContact - First observed
createContract - First observed
createContractPhase - First observed
createContractPhasePricing - First observed
createContractPrompt - First observed
createCustomAttribute - First observed
createCustomer - First observed
createCustomerAddress - First observed
createEntitlement - First observed
createInvoiceCharge - First observed
createInvoiceCreditNote - First observed
createJournalEntry - First observed
createPayment - First observed
createPlan - First observed
createProduct - First observed
createProductPricing - First observed
createRawMetric - First observed
createTaxCategory - First observed
deleteAggregate - First observed
deleteContact - First observed
deleteContract - First observed
deleteCustomer - First observed
deleteEntitlement - First observed
deleteInvoice - First observed
deleteManualPayment - First observed
deletePaymentMethod - First observed
downloadInvoice - First observed
editManualPayment - First observed
editPauseContract - First observed
expireContract - First observed
extractContractFromRaw - First observed
generateInvoice - First observed
generateInvoicePaymentLink - First observed
getAccountBalance - First observed
getAggregateById - First observed
getAggregateEstimates - First observed
getAggregateLogs - First observed
getAggregateSchemas - First observed
getAllInvoiceTags - First observed
getBalanceSheet - First observed
getBusinessEntityById - First observed
getChartOfAccounts - First observed
getContactById - First observed
getContractAmendments - First observed
getContractBillingCycles - First observed
getContractById - First observed
getCreditNoteById - First observed
getCurrentDateTime - First observed
getCustomerById - First observed
getCustomerPortalConfiguration - First observed
getEntitlementById - First observed
getIncomeStatement - First observed
getInvoiceByExternalId - First observed
getInvoiceById - First observed
getInvoiceContractJsonActuals - First observed
getInvoiceGenerationStatus - First observed
getInvoiceLineItems - First observed
getInvoicePayments - First observed
getInvoicePaymentsById - First observed
getInvoicePaymentsWithoutRefunds - First observed
getInvoicePreviewHtml - First observed
getInvoiceSummary - First observed
getJobById - First observed
getJournalEntry - First observed
getPaymentById - First observed
getPlanById - First observed
getProductById - First observed
getProductPricings - First observed
getRawMetricById - First observed
getRawMetricBySlug - First observed
getRawMetricLogs - First observed
ingestRawMetricEvent - First observed
listAccounts - First observed
listAggregates - First observed
listAllPayments - First observed
listBusinessEntities - First observed
listContacts - First observed
listContracts - First observed
listCreditNotes - First observed
listCustomAttributes - First observed
listCustomerAddresses - First observed
listCustomers - First observed
listEntitlements - First observed
listInvoices - First observed
listJobs - First observed
listJournalEntries - First observed
listJournalLines - First observed
listPaymentMethods - First observed
listPlans - First observed
listProducts - First observed
listRawMetrics - First observed
listRevenuePostings - First observed
listTaxCategories - First observed
pauseContract - First observed
payInvoice - First observed
recogniseRevenue - First observed
refreshRevenuePostings - First observed
refundPayment - First observed
resumeContract - First observed
updateAggregate - First observed
updateBusinessEntity - First observed
updateContact - First observed
updateContract - First observed
updateCustomer - First observed
updateCustomerAddress - First observed
updateEntitlement - First observed
updatePayment - First observed
updateProduct - First observed
voidInvoice
TDQS
Most tools have clearly distinct targets (e.g., createAccount vs createContract), but there are some confusing pairs like getInvoicePayments, getInvoicePaymentsById, and getInvoicePaymentsWithoutRefunds, which could cause misselection.
Tools predominantly follow a verb_noun pattern in snake_case (e.g., listCustomers, createInvoice). However, there are minor inconsistencies such as editManualPayment vs updatePayment, and expireContract vs updateContract.
114 tools is excessive for an MCP server, far beyond the typical well-scoped range. While the billing domain is broad, many tools could be consolidated or omitted, causing cognitive overload for agents.
Core CRUD operations exist for most entities, but gaps are notable: no delete for products, plans, or accounts. The set covers billing, contracts, payments, and accounting but lacks complete lifecycle coverage.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Query and manage Amberflo metering & billing: customers, meters, usage, plans, invoices, prepaid.
Ask your accounts-receivable portfolio anything. Read-only, scoped to your account.
1Query and manage Mercoa AP/AR bill-pay: entities, invoices, transactions and payment methods.
Connect your AI to your Well financial data - invoices, companies, contacts.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Zuora's billing and subscription management platform through their REST API. Provides access to billing operations, subscription management, and financial data through natural language queries.-
- AlicenseAqualityDmaintenanceEnables AI assistants to query and manage QuickBooks Online data through natural language, including customers, invoices, bills, vendors, accounts, and financial reports.7MIT
- -licenseNot gradedqualityDmaintenanceEnables interaction with Xero accounting API for financial reporting, sales analysis, grant tracking, and bill management using natural language.1-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Zoho Books accounting tasks such as invoices, contacts, expenses, and sales orders through natural language.39MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/zenskar/mcp-zenskar'
If you have feedback or need assistance with the MCP directory API, please join our Discord server