Skip to main content
Glama
zenskar

Zenskar MCP Server

Official
by zenskar

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:

  1. Node.js 20.10 or newer on your machine

  2. 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 --version

This 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-zenskar

Or run directly:

npx mcp-zenskar

Authentication

Every request needs:

  1. Organization ID — set via ZENSKAR_ORGANIZATION

  2. API 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

listCustomers

List customers with search, filtering, and pagination

getCustomerById

Get a customer by ID

createCustomer

Create a customer with address and tax info

updateCustomer

Update customer details (partial update)

deleteCustomer

Permanently delete a customer by ID (only allowed when they have no active contracts or unpaid invoices)

Contacts

Tool

Description

listContacts

List contacts with pagination

getContactById

Get a contact by ID

createContact

Create a contact for a customer

updateContact

Update a contact's details

deleteContact

Delete a contact by ID

Contracts

Tool

Description

listContracts

List contracts with filtering by status, customer, dates

getContractById

Get a contract with phases, pricings, and customer details

createContract

Create a contract with phases and pricing

updateContract

Update contract terms, status, pricing, or renewal policy

deleteContract

Delete a draft contract

getContractAmendments

Get amendment history for a contract

createContractPhase

Add a phase to a contract (add-ons, expansions)

createContractPhasePricing

Add pricing to a contract phase

expireContract

Expire an active contract

pauseContract

Pause an active contract from a given start date, with an unpause-extension policy (extend or overlap) and optional end date for auto-resume

editPauseContract

Edit an existing pause phase — set or change the resume date, shift the start, or change the unpause policy

resumeContract

Resume a paused contract

createContractPrompt

Create a contract prompt

extractContractFromRaw

Extract contract data from raw text using AI

Invoices

Tool

Description

listInvoices

List invoices with filtering by customer, status, dates

getInvoiceById

Get an invoice by ID

getInvoiceByExternalId

Get an invoice by external ID

getInvoiceGenerationStatus

Check invoice generation status

downloadInvoice

Download invoice in JSON format

getInvoiceContractJsonActuals

Get contract actuals for an invoice

getInvoicePayments

Get successful payments currently mapped to an invoice

getInvoicePaymentsById

Get successful payments for a specific invoice ID

getInvoicePaymentsWithoutRefunds

Get original payment records for an invoice, excluding refund payment rows

getInvoiceLineItems

Get invoice line items and pricing details

getInvoiceSummary

Get invoice summary

getAllInvoiceTags

Get all available invoice tags

generateInvoicePaymentLink

Generate a payment link for an invoice

payInvoice

Initiate payment for an invoice

approveInvoice

Approve an invoice for billing

voidInvoice

Void an invoice

deleteInvoice

Delete a draft invoice

generateInvoice

Generate an invoice for a contract and date range

createInvoiceCreditNote

Create a credit note against an invoice

createInvoiceCharge

Auto-charge an invoice via payment gateway

Payments

Tool

Description

listAllPayments

List all payments with filtering and sorting, including refund records

getPaymentById

Get a payment by ID

createPayment

Record a successful manual/offline payment or tax withheld amount

updatePayment

Update a payment's invoice allocations (payment_parts)

deleteManualPayment

Delete a manual payment

editManualPayment

Edit a manual payment's amount or method

refundPayment

Refund a payment (full or partial)

Credit Notes

Tool

Description

listCreditNotes

List credit notes with pagination

getCreditNoteById

Get a credit note by ID

Products and Pricing

Tool

Description

listProducts

List products in the catalog

getProductById

Get a product by ID

createProduct

Create a product

updateProduct

Update a product's details

getProductPricings

Get pricing configs for a product

createProductPricing

Create a pricing config for a product

Plans (Templates)

Tool

Description

listPlans

List plan templates

getPlanById

Get a plan by ID with phases and pricing

createPlan

Create a plan template

Accounting

Tool

Description

getChartOfAccounts

Get the full chart of accounts

listAccounts

List GL accounts with filtering

createAccount

Create a GL account

listJournalEntries

List journal entries with filtering

createJournalEntry

Create a manual journal entry

getJournalEntry

Get a journal entry by ID with all lines

listJournalLines

List journal lines across all entries

getBalanceSheet

Get the balance sheet report

getIncomeStatement

Get the income statement (P&L)

getAccountBalance

Get balance for a specific GL account

recogniseRevenue

Trigger revenue recognition up to a date

Custom Attributes and Tax

Tool

Description

listCustomAttributes

List custom attribute definitions

createCustomAttribute

Create a custom attribute definition

listTaxCategories

List tax categories

createTaxCategory

Create a tax category

Jobs

Tool

Description

listJobs

List async jobs (invoice gen, rev rec, etc.)

getJobById

Get a job by ID to check status

Business Entities

Tool

Description

listBusinessEntities

List business entities

getBusinessEntityById

Get a business entity by ID

createBusinessEntity

Create a business entity

updateBusinessEntity

Update a business entity

Customer Addresses and Payment Methods

Tool

Description

listCustomerAddresses

List addresses for a customer

createCustomerAddress

Add an address to a customer

updateCustomerAddress

Update a customer address

listPaymentMethods

List payment methods for a customer

attachPaymentMethod

Attach a payment method to a customer

deletePaymentMethod

Delete a payment method from a customer

Metrics and Usage Events

Tool

Description

listAggregates

List Billable Metrics with filtering; backend/API may also call these aggregates

getAggregateSchemas

Show the underlying schemas for Billable Metrics (Aggregates); mainly useful for debugging or integration work

getAggregateEstimates

Get Billable Metric estimates; backend/API may also call these aggregates

getAggregateById

Get a Billable Metric by ID; backend/API may also call it an aggregate

getAggregateLogs

Get logs for a Billable Metric (Aggregate)

createAggregate

Create a Billable Metric (Aggregate)

updateAggregate

Update a Billable Metric (Aggregate)

deleteAggregate

Delete a Billable Metric (Aggregate)

listRawMetrics

List Usage Events with filtering; backend/API may also call these raw metrics

createRawMetric

Create a Usage Event schema; backend/API calls this a raw metric

getRawMetricById

Get a Usage Event by ID; backend/API may also call it a raw metric

getRawMetricLogs

Get recent event rows for a Usage Event using the same preview-query path as the frontend

getRawMetricBySlug

Get a Usage Event by API slug; backend/API may also call it a raw metric

ingestRawMetricEvent

Ingest a usage event

Entitlements

Tool

Description

listEntitlements

List entitlements with filtering

getEntitlementById

Get an entitlement by ID

createEntitlement

Create an entitlement

updateEntitlement

Update an entitlement

deleteEntitlement

Delete an entitlement

Other

Tool

Description

getCustomerPortalConfiguration

Get customer portal config

getCurrentDateTime

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 start

Developing 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:

Available Tools

114 tools
approveInvoiceapproveInvoiceA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe unique ID of the invoice to approve (required).
send_emailNoWhether to send email notification (defaults to false).
check_duplicate_invoiceNoWhether to check for duplicate invoices (defaults to true).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses that 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe unique identifier of the customer.
payment_method_idYesThe payment method ID (from payment gateway) to attach.
connectorNoPayment 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_defaultNoWhether to set as the default payment method.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the account.
account_categoryYesCategory of account. Valid values: 'Assets', 'Liabilities', 'Equity', 'Income', 'Expenses'.
descriptionNoDescription of the account.
custom_dataNoCustom data object for the account.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as '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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the billable metric (required).
dataschemaYesData schema of the aggregate (JSON string, required).
aggregation_queryYesAggregate query — SQL/Jinja template for computing the metric (required).
cust_agg_queryYesCustomer aggregate query — SQL/Jinja template for customer-level computation (required).
visual_query_builderYesVisual query builder configuration object (required).
datasourceYesData source UUID (required).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must fully 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesBusiness Entity Name (required).
emailNoBusiness Entity email address (optional).
phone_numberNoBusiness Entity phone number with country code (optional).+911234567890
is_defaultNoWhether this is the default business entity (defaults to false).
logo_urlNoBusiness Entity logo URL (optional).
tax_configNoBusiness Entity tax configuration as JSON object (optional).
address_line1NoAddress line 1 (optional).
address_line2NoAddress line 2 (optional).
address_line3NoAddress line 3 (optional).
address_cityNoAddress city (optional).
address_stateNoAddress state (optional).
address_zipCodeNoAddress zip code (optional).
address_countryNoAddress country (optional).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerYesThe customer ID (UUID) to associate this contact with.
first_nameNoFirst name of the contact.
last_nameNoLast name of the contact.
emailYesEmail address of the contact.
send_contractNoWhether to send contracts to this contact.
send_invoiceNoWhether to send invoices to this contact.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesContract name (required).
descriptionNoContract description (optional).
statusNoContract status (required, typically 'draft' for new contracts).draft
currencyNoCurrency code for the contract (e.g., 'USD', 'EUR').USD
start_dateYesContract start date in ISO 8601 format (e.g., '2025-01-01T00:00:00.000000').
end_dateNoContract end date in ISO 8601 format (e.g., '2025-12-31T23:59:59.999999'). Optional — omit for open-ended contracts.
anchor_dateNoAnchor date for billing cycles in ISO 8601 format (defaults to start_date).
customer_idYesThe ID of the customer for this contract (required, UUID format).
renewal_policyNoContract renewal policy. Currently only 'do_not_renew' is supported at runtime.do_not_renew
bill_parent_customerNoWhether to bill the parent customer (defaults to false).
phasesNoArray 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.
sourceNoSource information for the contract (e.g., {source_type: 'ai', source_id: 'uuid'}).
custom_attributesNoCustom attributes for the contract as key-value pairs.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe unique identifier (UUID) of the contract to add a phase to.
nameYesName for this contract phase (e.g. 'Add-On Phase', 'Expansion Phase').
start_dateNoPhase start date in ISO 8601 format.
end_dateNoPhase end date in ISO 8601 format.
phase_typeNoType of phase: active, pause, or trial.
descriptionNoDescription of this phase.
pricingsNoArray of pricing configurations for this phase.
source_plan_phase_idNoUUID of the plan phase template this was derived from.
phase_metadataNoAdditional metadata for this phase as key-value pairs.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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

Given the tool's complexity (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.

Parameters3/5

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

Schema description coverage is 100%, so the schema 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe unique identifier (UUID) of the contract.
phaseIdYesThe unique identifier (UUID) of the phase to add pricing to.
pricing_idNoUUID of an existing product pricing to reference. Either this or inline pricing must be provided.
product_idNoUUID of the product this pricing is for.
pricingNoInline pricing configuration object. Either this or pricing_id must be provided.
productNoInline product definition object (name, description, sku, tax_codes, etc.).
start_dateNoPricing start date in ISO 8601 format.
end_dateNoPricing end date in ISO 8601 format.
anchor_dateNoBilling anchor date for this pricing.
external_idNoExternal identifier for this pricing entry.
custom_dataNoCustom metadata for this pricing.
descriptionNoDescription for this pricing entry.
plan_idNoUUID of the plan template this pricing derives from.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
prompt_nameYesIdentifier for this prompt template (e.g., 'Standard Contract Extraction', 'SaaS Subscription v2'). Used to look up / version-track the prompt.
prompt_textYesAI 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_schemaNoOptional schema name pinning the expected output shape (e.g., 'billing_schema', 'subscription_schema'). Null lets the AI infer.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
attribute_key_nameYesKey name of the custom attribute (used as the field key).
display_nameYesDisplay name for the custom attribute.
moduleYesModule/entity type this attribute applies to. Allowed values: 'customers', 'contracts', 'invoices', 'payments', 'products', 'plans'.
data_typeYesData type of the attribute. Valid values: 'STRING', 'INTEGER', 'FLOAT', 'BOOLEAN', 'LIST_STRING', 'ENUM', 'JSON', 'DATE'.
default_valueNoDefault value for the attribute.
enum_choicesNoArray of allowed values for enum-type attributes.
is_requiredNoWhether the attribute is required.
descriptionNoDescription of the custom attribute.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.8/5.0
Behavior1/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
external_idNoExternal customer ID (optional).
customer_nameYesCustomer name (required).
emailNoCustomer primary email address (optional).
phone_numberNoCustomer phone number (optional).
address_line1NoAddress line 1 (optional).
address_line2NoAddress line 2 (optional).
address_line3NoAddress line 3 (optional).
address_cityNoAddress city (optional).
address_stateNoAddress state (optional).
address_zipCodeNoAddress zip code (optional).
address_countryNoAddress country (optional).
address_country_codeNoAddress country code (optional).
ship_to_line1NoShipping address line 1 (optional).
ship_to_line2NoShipping address line 2 (optional).
ship_to_line3NoShipping address line 3 (optional).
ship_to_cityNoShipping address city (optional).
ship_to_stateNoShipping address state (optional).
ship_to_zipCodeNoShipping address zip code (optional).
ship_to_countryNoShipping address country (optional).
ship_to_country_codeNoShipping address country code (optional).
communications_enabledNoEnable/disable communications (defaults to true).
auto_charge_enabledNoEnable/disable auto-charge (defaults to true).
business_entity_idNoBusiness entity ID (UUID format, optional).
custom_dataNoCustom key-value pairs for additional customer info (e.g., {"industry": "saas", "account_tier": "enterprise", "sales_rep": "jane"}). Optional.
tax_infoNoList 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.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness1/5

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.

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe unique identifier of the customer.
line1YesAddress line 1.
line2NoAddress line 2.
cityNoCity.
stateNoState/province.
zipCodeNoZIP/postal code.
countryNoCountry name.
country_codeNoISO country code (e.g., 'US', 'GB').
line3NoAddress line 3.
is_default_billingNoSet as default billing address. Default: false.
is_default_shippingNoSet as default shipping address. Default: false.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds 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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesEntitlement name (required).
descriptionNoEntitlement description (optional).
entitlement_typeNoType of entitlement (e.g., 'Quantity', 'Feature', 'Access').
unitsNoUnits for the entitlement (e.g., 'units', 'GB', 'users').
is_activeNoWhether the entitlement is active (defaults to true).
product_idNoAssociated product ID (UUID format, optional).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description 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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's complexity (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.

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe unique identifier (UUID) of the invoice to charge.
connectorNoOptional payment provider connector config object (e.g., {"name": "stripe", "reference_id": "cus_xxx"}). Backend auto-detects if omitted.
sourceNoOptional source identifier for the charge.
payment_method_typesNoOptional list of allowed payment method types (e.g., ["card", "ach"]).
skip_invoice_due_date_checkNoIf true, charge proceeds even if the invoice is not yet due. Defaults to false.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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

Given no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe unique identifier (UUID) of the invoice to create a credit note against.
credit_note_amountYesAmount for the credit note in the invoice's currency (e.g. 25 for $25.00).
reasonYesReason for creating this credit note.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
posted_atNoPosting date of the journal entry in ISO 8601 format (e.g., '2026-01-15T00:00:00').
descriptionYesDescription/memo for the journal entry.
currencyYesThree-letter ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP').
journal_linesYesArray 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_dataNoAdditional metadata as key-value pairs.
status_typeNoJournal entry status (default: 'posted').posted
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool creates a 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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
customer_idNoUUID of the customer making the payment.
amountYesTotal payment amount in the smallest currency unit (e.g. cents).
currency_codeYesThree-letter ISO 4217 currency code (e.g. USD).
payment_partsNoArray of invoice allocations. Each element: {invoice_id: 'UUID', amount: 10000}. Links the payment to one or more invoices.
payment_methodNoManual payment method. Required when type='payment'; omit for type='tax_withheld'. Supported values match the frontend Add Payment flow.
typeNoFrontend 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
statusNoPayment 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_idNoExternal reference ID for this payment.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the plan (required).
statusYesPlan status (required). Valid values: 'draft', 'active', 'archived'. New plans almost always start as 'draft' — the user publishes via the UI to activate.
scheduleYesPlan-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"}.
descriptionNoOptional plan description.
phasesYesArray 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"}}}].
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the product.
skuNoSKU (stock keeping unit) identifier.
descriptionNoDescription of the product.
typeYesProduct type. Valid values: 'product' (standard product) or 'group' (product group).
is_activeNoWhether the product is active.
tax_codesNoTax code mapping object keyed by region/provider (e.g., {"avalara": "PS081282", "stripe": "txcd_99999999"}).
custom_attributesNoCustom attributes as key-value pairs.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must carry 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.

Conciseness4/5

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.

Completeness2/5

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

Given no output schema and no 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdYesThe unique identifier of the product.
nameNoName of the pricing (optional).
descriptionNoDescription of this pricing configuration.
pricing_dataYesPricing 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).
quantityYesQuantity 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_periodYesBilling 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_recurringNoWhether this pricing is recurring (true) or one-time (false).
return_existingNoIf true, returns existing pricing with matching hash instead of creating a duplicate.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the tool creates a 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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-friendly name for the Usage Event schema (raw metric).
api_slugYesAPI slug used when ingesting Usage Events (lowercase, underscores).
dataschemaNoData 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_orderNoOptional ordered list of columns for downstream processing. Locked to ['timestamp'] in production; leave as-is unless backend explicitly requests a schema change.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool creates a '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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the tax category.
external_codesNoArray of external tax code mappings (e.g., [{ "provider": "avalara", "code": "P0000000" }]).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.6/5.0
Behavior1/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
aggregateIdYesThe unique identifier (UUID) of the billable metric (aggregate) to delete.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's 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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesThe unique identifier (UUID) of the contact to delete.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe unique identifier (UUID) of the contract to delete.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries full burden. It 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe unique identifier (UUID) of the customer to delete.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
entitlementIdYesThe unique identifier (UUID) of the entitlement to delete.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe unique identifier (UUID) of the draft or upcoming invoice to delete.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
paymentIdYesThe unique identifier (UUID) of the payment to delete.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe unique identifier (UUID) of the customer.
paymentMethodIdYesThe unique identifier (UUID) of the payment method to delete.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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

Given the tool's simplicity (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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's action: '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.

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: '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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe ID of the invoice to download.
invoice_json_keyNoOptional key for invoice JSON.
customer_idNoOptional customer ID associated with the invoice.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema coverage is 100% with descriptions for all parameters. 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
paymentIdYesThe unique identifier (UUID) of the manual payment to edit.
amountNoUpdated payment amount.
payment_method_detailsNoUpdated payment method details object.
payment_partsNoUpdated invoice allocations. Array of {invoice_id, amount}.
external_idNoUpdated external reference ID.
timestampNoUpdated payment timestamp in ISO 8601 format.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe unique identifier (UUID) of the contract whose pause phase to edit.
start_dateNoNew pause start date (ISO 8601). Optional.
end_dateNoResume date — when the pause ends (ISO 8601). Set this to schedule a future resume.
pause_phase_idNoUUID 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_policyNoHow to handle the contract end date when unpaused. 'extend' or 'overlap'.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe unique identifier (UUID) of the contract to expire.
expiry_dateNoDate to expire the contract (e.g. 2026-12-31). Defaults to today if not provided. Must not be earlier than contract.start_date.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesThe 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.').
nameYesA name for the contract being extracted.
organization_idNoThe organization ID for the contract extraction (will be auto-populated from user context if not provided).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_datefrom_date, end_dateto_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contract_idYesUUID of the contract to generate the invoice for.
customer_idYesUUID of the customer.
from_dateYesStart 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_dateYesEnd of billing period. Accepts ISO-8601 string or UNIX seconds integer. PREFER ISO string copied verbatim from getContractBillingCycles.end_date.
bill_for_dateYesREQUIRED. 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_dayYesREQUIRED. 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.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description fully discloses the 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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

Schema coverage is 100%, but the description adds critical 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

getAccountBalancegetAccountBalanceB

Retrieve the balance for a specific accounting account. Supports filtering by customer, contract, currency, and posted-at date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYesThe unique identifier of the account.
as_ofNoDate for the balance snapshot (YYYY-MM-DD).
customer_idNoFilter the balance to a single customer UUID.
contract_idNoFilter the balance to a single billing contract UUID (enables per-contract GL balance).
currencyNoThree-letter ISO currency code (e.g. 'USD').
journal_entry__posted_at__gteNoLower bound on parent journal entry posted-at date (inclusive).
journal_entry__posted_at__lteNoUpper bound on parent journal entry posted-at date (inclusive).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. 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.

Purpose5/5

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.

Usage Guidelines2/5

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

No explicit guidance on when to use this tool 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
aggregateIdYesThe ID of the Billable Metric (aggregate).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
aggregate_idYesThe ID of the Billable Metric (aggregate).
customer_idYesThe ID of the customer.
start_dateYesStart date of the estimate window. ISO 8601 date format only — YYYY-MM-DD (e.g., '2025-01-15'). NOT datetime.
end_dateYesEnd date of the estimate window. ISO 8601 date format only — YYYY-MM-DD (e.g., '2025-01-31'). NOT datetime.
get_singleNoWhether to get a single estimate (defaults to true).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
aggregateIdYesThe ID of the Billable Metric (aggregate).
start_dateNoStart date for filtering logs (YYYY-MM-DD).
end_dateNoEnd date for filtering logs (YYYY-MM-DD).
monthNoFilter by month (e.g., 'Apr 2023').
customer_idNoFilter by customer ID.
query_limitNoLimit the number of log entries (defaults to 100).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the verb 'get', 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.

Usage Guidelines3/5

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

The description implies usage for fetching 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must fully 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNoStart date for the balance sheet period (YYYY-MM-DD).
end_dateNoEnd date for the balance sheet period (YYYY-MM-DD). Defaults to today.
cadenceNoBucket cadence for the report. One of 'month', 'quarter', 'year'. Defaults to 'month'.
currencyNoThree-letter ISO currency code to scope the report (e.g. 'USD').
customer_idNoRestrict report to a single customer UUID.
contract_idNoRestrict report to a single billing contract UUID (enables per-contract balance sheet).
account_id__inNoFilter to a list of GL account UUIDs.
grouping_keysNoOptional grouping dimensions, e.g. ['customer_id'] or ['contract_id'].
get_changesNoIf true, return period-over-period changes instead of cumulative values.
cursorNoCursor for pagination.
limitNoMaximum rows per page (default 10).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityIdYesThe unique identifier of the business entity.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. 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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesThe unique ID of the contact to retrieve.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe unique identifier (UUID) of the contract.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_datefrom_date, end_dateto_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe unique identifier (UUID) of the contract.
limitNoMaximum number of cycles to return (default 10). Increase if the contract spans many years.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe unique identifier (UUID) of the contract to retrieve.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
creditNoteIdYesThe unique identifier (UUID) of the credit note.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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

Given no output schema and no 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No explicit guidance on when to use this tool 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

ParametersJSON Schema
NameRequiredDescriptionDefault
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe unique ID of the customer to retrieve.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
entitlementIdYesThe unique identifier (UUID) of the entitlement.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a simple get-by-ID tool 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNoStart date for the income statement period (YYYY-MM-DD).
end_dateNoEnd date for the income statement period (YYYY-MM-DD).
cadenceNoBucket cadence for the report. One of 'month', 'quarter', 'year'. Defaults to 'month'.
currencyNoThree-letter ISO currency code to scope the report (e.g. 'USD').
customer_idNoRestrict report to a single customer UUID (enables per-customer P&L).
contract_idNoRestrict report to a single billing contract UUID (enables per-contract P&L).
account_id__inNoFilter to a list of GL account UUIDs.
grouping_keysNoOptional grouping dimensions, e.g. ['customer_id'] or ['contract_id'].
get_changesNoIf true, return period-over-period changes (default true for income statement).
cursorNoCursor for pagination.
limitNoMaximum rows per page (default 10).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

The description implies usage for retrieving 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
externalIdYesThe external ID of the invoice.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe unique ID of the invoice to retrieve.
include_line_itemsNoWhether to include line items in the response.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema coverage is 100% with descriptions for all 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe ID of the invoice.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe ID of the invoice.
contract_idYesThe ID of the contract associated with the invoice.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe ID of the invoice.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must carry 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe ID of the invoice.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the verb 'Get' and the resource '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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe ID of the invoice.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema covers 100% of parameters with descriptions. The description adds 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe ID of the invoice.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description 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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdNoOrganization ID (auto-populated).
invoiceIdYesThe ID of the invoice to preview.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe ID of the invoice.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the verb 'Get' and the resource '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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesThe unique identifier of the job.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
journalEntryIdYesThe unique identifier of the journal entry.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must fully 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds 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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
paymentIdYesThe unique ID of the payment to retrieve.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description must fully 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
planIdYesThe unique identifier of the plan.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It 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.

Conciseness5/5

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.

Completeness4/5

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

Given no output schema, the description adequately explains 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdYesThe unique identifier (UUID) of the product.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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

For a simple get-by-ID tool, 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdYesThe unique identifier of the product.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawMetricIdYesThe ID of the Usage Event resource (raw metric).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawMetricSlugYesThe API slug of the Usage Event resource (raw metric).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds 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.

Purpose5/5

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

The description clearly states the verb 'Get', 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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawMetricIdYesThe ID of the Usage Event resource (raw metric).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawMetricSlugYesSlug of the Usage Event resource (raw metric), e.g. api_usage_events.
eventNoUsage 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.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a mutation tool with 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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoCursor for pagination.
limitNoMaximum number of accounts to return per page.
name__ilikeNoCase-insensitive partial match for account name.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoThe cursor for pagination.
limitNoMaximum number of records to return per page (defaults to 10).
orderNoOrder of results (e.g., '-created_at').-created_at
sort_keyNoKey to sort the results by (e.g., 'id').created_at
sort_typeNoSort order type (e.g., 'asc').DESC
idNoFilter by aggregate ID.
name__ilikeNoCase-insensitive partial match for aggregate name.
datasourceNoFilter by data source ID.
created_at__gteNoFilter by creation date greater than or equal to (ISO 8601).
parent_aggregate_id__isnullNoWhether to include only top-level aggregates (no parent). Defaults to true.
aggregate_type__isnullNoWhether to include only aggregates without an explicit type. Defaults to true.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoThe cursor for pagination.
limitNoMaximum number of payments to return per page (defaults to 10).
searchNoGeneral search query.
sort_keyNoKey to sort the results by (e.g., 'id').
sort_typeNoSort order type (e.g., 'asc').
orderNoOrder of results (e.g., '-created_at').-created_at
idNoFilter by payment ID.
customer_idNoFilter by customer ID.
connector_idNoFilter by connector ID.
external_id__ilikeNoCase-insensitive partial match for external ID.
payment_methodNoFilter by payment method (e.g., 'card', 'cash', 'bank_transfer').
typeNoFilter by payment type (e.g., 'payment', 'refund').
amount__gteNoFilter by amount greater than or equal to.
amount__lteNoFilter by amount less than or equal to.
amount_refunded__gteNoFilter by amount refunded greater than or equal to.
amount_refunded__lteNoFilter by amount refunded less than or equal to.
currency_code__ilikeNoCase-insensitive partial match for currency code.
receipt_number__ilikeNoCase-insensitive partial match for receipt number.
statusNoFilter by payment status (e.g., 'success', 'failed').
autochargeNoFilter by auto-charge status.
parent_idNoFilter by parent payment ID.
timestamp__gteNoFilter by timestamp greater than or equal to (Unix time).
timestamp__lteNoFilter by timestamp less than or equal to (Unix time).
created_at__gteNoFilter by creation date greater than or equal to (ISO 8601).
created_at__lteNoFilter by creation date less than or equal to (ISO 8601).
invoice__idNoFilter by associated invoice ID.
invoice__bill_for_date__gteNoFilter by invoice billing date greater than or equal to (ISO 8601).
invoice__bill_for_date__lteNoFilter by invoice billing date less than or equal to (ISO 8601).
invoice__approved_at__gteNoFilter by invoice approval date greater than or equal to (ISO 8601).
invoice__approved_at__lteNoFilter by invoice approval date less than or equal to (ISO 8601).
customer__business_entity_idNoFilter by customer's business entity ID.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoCursor for pagination.
limitNoMaximum number of entities to return.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema coverage is 100% with descriptions for all 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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, such as 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoThe cursor for pagination.
limitNoMaximum number of contacts to return per page (defaults to 10).
sort_keyNoKey to sort the results by (e.g., 'id').
sort_typeNoSort order type (e.g., 'asc').
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoThe cursor for pagination to fetch the next or previous set of records.
limitNoMaximum number of records to return per page (defaults to 10).
orderNoOrder of results (e.g., '-created_at' for descending creation date).-created_at
idNoFilter by Contract ID (exact match).
id__inNoFilter by a comma-separated list of Contract IDs.
id__isnullNoFilter by whether Contract ID is null.
customer_idNoFilter by Customer ID (exact match).
customer_id__inNoFilter by a comma-separated list of Customer IDs.
customer_id__isnullNoFilter by whether Customer ID is null.
nameNoFilter by Contract Name (exact match).
name__ilikeNoContract Name (case-insensitive partial match).
name__likeNoContract Name (case-sensitive partial match).
name__inNoFilter by a comma-separated list of Contract Names.
name__isnullNoFilter by whether Contract Name is null.
start_dateNoContract Start Date (exact match, ISO 8601).
start_date__neqNoContract Start Date (not equal, ISO 8601).
start_date__gtNoContract Start Date (greater than, ISO 8601).
start_date__gteNoContract Start Date (greater than or equal to, ISO 8601).
start_date__ltNoContract Start Date (less than, ISO 8601).
start_date__lteNoContract Start Date (less than or equal to, ISO 8601).
start_date__isnullNoFilter by whether Contract Start Date is null.
start_date__inNoFilter by a comma-separated list of Contract Start Dates.
created_atNoContract Created At (exact match, ISO 8601).
created_at__neqNoContract Created At (not equal, ISO 8601).
created_at__gtNoContract Created At (greater than, ISO 8601).
created_at__gteNoContract Created At (greater than or equal to, ISO 8601).
created_at__ltNoContract Created At (less than, ISO 8601).
created_at__lteNoContract Created At (less than or equal to, ISO 8601).
created_at__isnullNoFilter by whether Contract Created At is null.
created_at__inNoFilter by a comma-separated list of Contract Creation Dates.
end_dateNoContract End Date (exact match, ISO 8601).
end_date__neqNoContract End Date (not equal, ISO 8601).
end_date__gtNoContract End Date (greater than, ISO 8601).
end_date__gteNoContract End Date (greater than or equal to, ISO 8601).
end_date__ltNoContract End Date (less than, ISO 8601).
end_date__lteNoContract End Date (less than or equal to, ISO 8601).
end_date__isnullNoFilter by whether Contract End Date is null.
end_date__inNoFilter by a comma-separated list of Contract End Dates.
statusNoFilter contracts by their status.
status__inNoFilter by a comma-separated list of contract statuses.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema 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.

Purpose5/5

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.

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives (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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoCursor for pagination.
limitNoMaximum number of results per page (defaults to 10).
customer_idNoFilter by customer UUID.
invoice_idNoFilter by invoice UUID.
statusNoFilter by status: in_progress, issued, void, or paid.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries 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.

Conciseness5/5

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.

Completeness3/5

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

Given no output schema and 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.

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
moduleNoFilter by module. Valid values: 'customers', 'contracts', 'invoices', 'payments', 'products', 'plans'.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe unique identifier of the customer.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoThe cursor for pagination to fetch the next or previous set of records.
limitNoMaximum number of customers to return per page (defaults to 10).
searchNoAdvanced 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_idNoQuick 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.
orderNoOrder of results (e.g., '-created_at' for descending creation date).-created_at
sort_keyNoKey to sort the results by (e.g., 'id').
sort_typeNoSort order type (e.g., 'asc' for ascending).
expandNoFields to expand in the response (e.g., 'contacts').
idNoFilter by customer ID (exact match).
id__inNoFilter by a comma-separated list of customer IDs.
external_idNoFilter by external ID (exact match).
external_id__ilikeNoCase-insensitive partial match for external ID.
emailNoFilter by email (exact match).
email__ilikeNoCase-insensitive partial match for email.
phone_number__ilikeNoCase-insensitive partial match for phone number.
communications_enabledNoFilter by communications enabled status.
auto_charge_enabledNoFilter by auto-charge enabled status.
created_at__gteNoFilter by creation date greater than or equal to (ISO 8601 format).
created_at__lteNoFilter by creation date less than or equal to (ISO 8601 format).
customer_name__ilikeNoCase-insensitive partial match for customer name.
business_entity_idNoFilter by business entity ID (exact match).
invoice__customer_idNoFilter by invoice customer ID.
invoice__statusNoFilter by invoice status.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It 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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description 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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoThe cursor for pagination.
limitNoMaximum number of records to return per page (defaults to 50).
orderNoOrder of results (e.g., '-created_at').-created_at
sort_keyNoKey to sort the results by.created_at
sort_typeNoSort order type ('ASC' or 'DESC').DESC
searchNoText search across entitlement fields.
idNoFilter by entitlement ID.
name__ilikeNoCase-insensitive partial match for entitlement name.
entitlement_typeNoFilter by entitlement type.
is_activeNoFilter by active status.
product_idNoFilter by associated product ID.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries the full burden 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

No explicit when-to-use or 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
customer_idNoFilter invoices by a specific customer ID.
customer__external_idNoFilter invoices by a customer's external ID (nested filter).
statusNoFilter invoices by their status (e.g., 'draft', 'approved', 'paid', 'void', 'partially_paid', 'upcoming').
status__inNoFilter invoices by multiple statuses (comma-separated, e.g., 'draft,approved,paid,partially_paid,upcoming,void').
cursorNoThe cursor for pagination.
limitNoMaximum number of invoices to return per page (defaults to 10).
contract_idNoFilter by contract ID.
external_idNoFilter by invoice external ID.
invoice_total__gteNoFilter by invoice total greater than or equal to.
invoice_total__lteNoFilter by invoice total less than or equal to.
amount_due__gteNoFilter by amount due greater than or equal to.
amount_due__lteNoFilter by amount due less than or equal to.
due_date__gteNoFilter by due date greater than or equal to (ISO 8601).
due_date__lteNoFilter by due date less than or equal to (ISO 8601).
created_at__gteNoFilter by creation date greater than or equal to (ISO 8601).
created_at__lteNoFilter by creation date less than or equal to (ISO 8601).
invoice_number__likeNoPartial match for invoice number.
customer__customer_name__ilikeNoCase-insensitive partial match for customer name associated with the invoice.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.).

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoCursor for pagination.
limitNoMaximum number of jobs to return per page.
searchNoSearch query to filter jobs. Format: 'field=value'.
resource__neqNoExclude 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
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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=).

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoCursor for pagination.
limitNoMaximum number of journal entries to return per page.
search_queryNoSearch query to filter journal entries.
orderNoSort order. Prefix with '-' for descending. Defaults to '-created_at'.
idNoFilter by journal entry UUID (exact match).
posted_at__gteNoPosted-at date lower bound (inclusive). Accepts ISO date YYYY-MM-DD or full datetime.
posted_at__lteNoPosted-at date upper bound (inclusive).
status_typeNoFilter by status. Common values: 'posted', 'draft'.
description__ilikeNoCase-insensitive partial match on description.
job_idNoFilter by originating job UUID (e.g. revenue recognition batch).
lines__account_idNoFilter entries having a line on this account UUID.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It 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.

Conciseness5/5

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.

Completeness4/5

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

Given no output schema, the description adequately 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoCursor for pagination.
limitNoMaximum number of journal lines to return per page.
search_queryNoSearch query to filter journal lines.
orderNoSort order. Prefix with '-' for descending. Defaults to '-created_at'.
customer_idNoFilter by customer UUID.
contract_idNoFilter by billing contract UUID.
account_idNoFilter by GL account UUID.
journal_entry_idNoFilter by parent journal entry UUID.
revenue_contract_idNoFilter by revenue recognition contract UUID (distinct from billing contract_id).
performance_obligation_idNoFilter by performance obligation UUID.
invoice_idNoFilter by invoice UUID.
currencyNoThree-letter ISO currency code (e.g. 'USD').
journal_entry__posted_at__gteNoParent entry posted-at lower bound (inclusive). YYYY-MM-DD or ISO datetime.
journal_entry__posted_at__lteNoParent entry posted-at upper bound (inclusive).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full burden 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds 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.

Purpose5/5

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.

Usage Guidelines3/5

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

The description implies usage when needing 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe unique identifier of the customer.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoCursor for pagination.
limitNoMaximum number of plans to return per page.
name__ilikeNoCase-insensitive partial match for plan name.
statusNoFilter by plan status. Valid values: draft, active, archived.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema coverage is 100% with descriptions for all parameters. Description adds 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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoCursor for pagination.
limitNoMaximum number of results per page (defaults to 10).
name__ilikeNoCase-insensitive partial match for product name.
typeNoFilter by product object type. Defaults to 'product' (excludes plans, addons, etc.).product
product_category__isnullNoWhether to include only products without a category. Defaults to true.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoThe cursor for pagination.
limitNoMaximum number of records to return per page (defaults to 10).
orderNoOrder of results (e.g., '-created_at').-created_at
sort_keyNoKey to sort the results by (e.g., 'created_at').created_at
sort_typeNoSort order type (e.g., 'asc').DESC
searchNoGeneral search query.
idNoFilter by usage event ID.
name__ilikeNoCase-insensitive partial match for usage event name.
api_slug__ilikeNoCase-insensitive partial match for API slug.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility. It 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.

Conciseness5/5

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.

Completeness2/5

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

Given the complexity (10 parameters, no output schema, no annotations), the description 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoCursor for pagination.
limitNoMaximum number of revenue postings to return per page.
orderNoSort order. Prefix with '-' for descending. Defaults to '-created_at'.
contract_idNoFilter by billing contract UUID.
revenue_contract_idNoFilter by revenue recognition contract UUID.
revenue_contract_item_idNoFilter by revenue contract item UUID.
performance_obligation_idNoFilter by performance obligation UUID.
posting_date__gteNoPosting date lower bound (inclusive, YYYY-MM-DD).
posting_date__lteNoPosting date upper bound (inclusive, YYYY-MM-DD).
currencyNoThree-letter ISO currency code (e.g. 'USD').
journal_entry_id__isnullNoIf true, return only postings not yet posted to a journal entry. If false, return only postings already journalised.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe unique identifier (UUID) of the contract to pause.
start_dateYesDate 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_policyYesHow 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_dateNoOptional date when the pause ends and contract auto-resumes (ISO 8601).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadYesThe payment payload.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.7/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description 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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYesEnd date for revenue recognition in YYYY-MM-DD format (required).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's action ('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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contract_idYesBilling contract UUID (required).
revenue_contract_idYesRevenue recognition contract UUID (required).
revenue_contract_item_idYesRevenue contract item UUID (required).
performance_obligation_idYesPerformance obligation UUID (required).
posting_dateYesPosting date in YYYY-MM-DD format (required).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

Given no output schema, description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
paymentIdYesThe unique identifier (UUID) of the payment to refund.
refund_amountYesRefund 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_destinationYesWhere 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_invoicesYesIf true, the invoice(s) linked to this payment are marked written off (no further collection). Set false to leave invoice balance owing after refund.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe unique identifier (UUID) of the contract to resume.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
aggregateIdYesThe unique identifier (UUID) of the billable metric (aggregate) to update.
nameNoUpdated name of the billable metric.
dataschemaNoUpdated data schema (JSON string).
aggregation_queryNoUpdated aggregate query (SQL/Jinja template).
cust_agg_queryNoUpdated customer aggregate query (SQL/Jinja template).
visual_query_builderNoUpdated visual query builder configuration.
datasourceNoUpdated data source UUID.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityIdYesThe unique identifier of the business entity to update.
nameNoUpdated name of the business entity.
addressNoUpdated address object with line1, line2, city, state, zipCode, country, country_code.
tax_configNoTax configuration object (e.g., { "tax_id": "...", "tax_provider": "..." }).
emailNoUpdated email address.
phone_numberNoUpdated phone number (max 20 chars). Include country code (e.g., +1-555-0100).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.7/5.0
Behavior1/5

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.

Conciseness5/5

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.

Completeness1/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesThe unique identifier of the contact to update.
customerNoThe customer ID (UUID) this contact belongs to.
first_nameNoUpdated first name.
last_nameNoUpdated last name.
emailNoUpdated email address.
send_contractNoWhether to send contracts to this contact.
send_invoiceNoWhether to send invoices to this contact.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe unique identifier (UUID) of the contract to update.
nameYesHuman-readable name for the contract.
statusYesContract status: draft, active, paused, or disputed. Cannot set to 'expired' via update.
currencyYesThree-letter ISO 4217 currency code (e.g. USD, EUR, GBP).
start_dateYesContract start date in ISO 8601 format (e.g. 2026-01-01T00:00:00).
customer_idYesUUID of the customer associated with this contract.
descriptionNoDetailed description of the contract terms.
end_dateNoContract end date in ISO 8601 format.
anchor_dateNoReference date for billing cycle calculations.
is_last_day_of_monthNoWhen true, billing cycles always end on the last day of the month.
custom_attributesNoKey-value pairs for organization-specific metadata (e.g. automatic_renewal flag).
phasesNoArray 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_policyNoContract renewal behavior: renew_with_default_contract, renew_with_existing, or do_not_renew.
contract_linkNoURL to external contract document or signed agreement.
bill_parent_customerNoWhen true and customer has a parent relationship, invoices are sent to the parent.
invoice_payer_customer_idNoOptional customer UUID who will receive and pay invoices for this contract.
include_in_renewalNoWhen true, this contract is eligible for renewal processes.
tagsNoList of tags for categorizing and filtering contracts.
sourceNoMetadata about the originating system (e.g. {source_type: 'hubspot', source_id: 'deal_123'}).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema coverage is 100%, baseline 3. Description adds 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe unique identifier (UUID) of the customer to update.
customer_nameNoUpdated customer name.
emailNoUpdated email address.
phone_numberNoUpdated phone number.
external_idNoUpdated external identifier.
address_line1NoAddress line 1.
address_line2NoAddress line 2.
address_cityNoCity.
address_stateNoState.
address_zipCodeNoZIP/postal code.
address_countryNoCountry.
address_country_codeNoCountry code (e.g. US, GB).
communications_enabledNoEnable/disable invoice email communications.
auto_charge_enabledNoEnable/disable auto-charge for this customer.
business_entity_idNoUUID of the business entity to associate with.
address_line3NoAddress line 3.
ship_to_line1NoShipping address line 1.
ship_to_line2NoShipping address line 2.
ship_to_line3NoShipping address line 3.
ship_to_cityNoShipping address city.
ship_to_stateNoShipping address state.
ship_to_zipCodeNoShipping address ZIP/postal code.
ship_to_countryNoShipping address country.
ship_to_country_codeNoShipping address country code (e.g. US, GB).
custom_dataNoCustom key-value pairs for additional customer info (e.g., {"industry": "saas", "account_tier": "enterprise"}).
tax_infoNoList 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.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe unique identifier of the customer.
addressIdYesThe unique identifier of the address to update.
line1NoUpdated address line 1.
line2NoUpdated address line 2.
cityNoUpdated city.
stateNoUpdated state/province.
zipCodeNoUpdated ZIP/postal code.
countryNoUpdated country name.
country_codeNoUpdated ISO country code.
line3NoUpdated address line 3.
is_default_billingNoSet as default billing address.
is_default_shippingNoSet as default shipping address.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.7/5.0
Behavior1/5

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.

Conciseness3/5

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.

Completeness1/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds 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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
entitlementIdYesThe unique identifier (UUID) of the entitlement to update.
nameYesUpdated entitlement name.
descriptionNoUpdated entitlement description.
entitlement_typeNoUpdated type of entitlement.
unitsNoUpdated units for the entitlement (e.g., 'units', 'GB', 'users').
is_activeNoWhether the entitlement is active.
product_idNoUpdated associated product ID (UUID format).
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
paymentIdYesThe unique identifier (UUID) of the payment to update.
payment_partsYesUpdated array of invoice allocations. Each element: {invoice_id: 'UUID', amount: 10000}. This field is required by the API.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdYesThe unique identifier of the product to update.
nameNoUpdated name of the product.
skuNoUpdated SKU.
descriptionNoUpdated description.
is_activeNoWhether the product is active.
tax_codesNoUpdated tax codes array.
custom_attributesNoUpdated custom attributes.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

C2.7/5.0
Behavior1/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (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.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYesThe unique identifier (UUID) of the invoice to void.
__userContextNoInternal user context for multi-tenant authentication and approval workflow

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 114 tool updatesv2.2.4
    • First observedapproveInvoice
    • First observedattachPaymentMethod
    • First observedcreateAccount
    • First observedcreateAggregate
    • First observedcreateBusinessEntity
    • First observedcreateContact
    • First observedcreateContract
    • First observedcreateContractPhase
    • First observedcreateContractPhasePricing
    • First observedcreateContractPrompt
    • First observedcreateCustomAttribute
    • First observedcreateCustomer
    • First observedcreateCustomerAddress
    • First observedcreateEntitlement
    • First observedcreateInvoiceCharge
    • First observedcreateInvoiceCreditNote
    • First observedcreateJournalEntry
    • First observedcreatePayment
    • First observedcreatePlan
    • First observedcreateProduct
    • First observedcreateProductPricing
    • First observedcreateRawMetric
    • First observedcreateTaxCategory
    • First observeddeleteAggregate
    • First observeddeleteContact
    • First observeddeleteContract
    • First observeddeleteCustomer
    • First observeddeleteEntitlement
    • First observeddeleteInvoice
    • First observeddeleteManualPayment
    • First observeddeletePaymentMethod
    • First observeddownloadInvoice
    • First observededitManualPayment
    • First observededitPauseContract
    • First observedexpireContract
    • First observedextractContractFromRaw
    • First observedgenerateInvoice
    • First observedgenerateInvoicePaymentLink
    • First observedgetAccountBalance
    • First observedgetAggregateById
    • First observedgetAggregateEstimates
    • First observedgetAggregateLogs
    • First observedgetAggregateSchemas
    • First observedgetAllInvoiceTags
    • First observedgetBalanceSheet
    • First observedgetBusinessEntityById
    • First observedgetChartOfAccounts
    • First observedgetContactById
    • First observedgetContractAmendments
    • First observedgetContractBillingCycles
    • First observedgetContractById
    • First observedgetCreditNoteById
    • First observedgetCurrentDateTime
    • First observedgetCustomerById
    • First observedgetCustomerPortalConfiguration
    • First observedgetEntitlementById
    • First observedgetIncomeStatement
    • First observedgetInvoiceByExternalId
    • First observedgetInvoiceById
    • First observedgetInvoiceContractJsonActuals
    • First observedgetInvoiceGenerationStatus
    • First observedgetInvoiceLineItems
    • First observedgetInvoicePayments
    • First observedgetInvoicePaymentsById
    • First observedgetInvoicePaymentsWithoutRefunds
    • First observedgetInvoicePreviewHtml
    • First observedgetInvoiceSummary
    • First observedgetJobById
    • First observedgetJournalEntry
    • First observedgetPaymentById
    • First observedgetPlanById
    • First observedgetProductById
    • First observedgetProductPricings
    • First observedgetRawMetricById
    • First observedgetRawMetricBySlug
    • First observedgetRawMetricLogs
    • First observedingestRawMetricEvent
    • First observedlistAccounts
    • First observedlistAggregates
    • First observedlistAllPayments
    • First observedlistBusinessEntities
    • First observedlistContacts
    • First observedlistContracts
    • First observedlistCreditNotes
    • First observedlistCustomAttributes
    • First observedlistCustomerAddresses
    • First observedlistCustomers
    • First observedlistEntitlements
    • First observedlistInvoices
    • First observedlistJobs
    • First observedlistJournalEntries
    • First observedlistJournalLines
    • First observedlistPaymentMethods
    • First observedlistPlans
    • First observedlistProducts
    • First observedlistRawMetrics
    • First observedlistRevenuePostings
    • First observedlistTaxCategories
    • First observedpauseContract
    • First observedpayInvoice
    • First observedrecogniseRevenue
    • First observedrefreshRevenuePostings
    • First observedrefundPayment
    • First observedresumeContract
    • First observedupdateAggregate
    • First observedupdateBusinessEntity
    • First observedupdateContact
    • First observedupdateContract
    • First observedupdateCustomer
    • First observedupdateCustomerAddress
    • First observedupdateEntitlement
    • First observedupdatePayment
    • First observedupdateProduct
    • First observedvoidInvoice

TDQS

B3.2/5.0
Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count2/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessUnresponsive

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to query and manage QuickBooks Online data through natural language, including customers, invoices, bills, vendors, accounts, and financial reports.
    7
    MIT
  • -
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Xero accounting API for financial reporting, sales analysis, grant tracking, and bill management using natural language.
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Zoho Books accounting tasks such as invoices, contacts, expenses, and sales orders through natural language.
    39
    MIT

Latest Blog Posts

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