ServiceTitan MCP
This server acts as a comprehensive Model Context Protocol (MCP) interface for the ServiceTitan API, providing 483 tools across 15 domains plus 10 intelligence tools for managing field service business operations and gaining deep operational insights.
Core Domains:
CRM – Create, update, list, and delete customers, contacts, locations, leads, bookings, notes, tags, and contact relationships
Dispatch (79 tools) – Manage jobs, appointments, and job types
Accounting (49 tools) – Handle invoices, payments, GL accounts, journal entries, AP credits, tax zones, and payment terms
Export (49 tools) – Bulk export of invoices, customers, and jobs
Inventory (37 tools) – Manage purchase orders, vendors, and warehouses
Marketing (35 tools) – Work with campaigns, calls, and reviews
Pricebook (31 tools) – List services, materials, and equipment
Payroll (27 tools) – Access payrolls, timesheets, and gross pay items
Settings (23 tools) – Retrieve business units, tag types, and user roles
People (22 tools) – Manage technicians, employees, and trucks
Estimates (22 tools) – List, get, and manage estimate items
Memberships (21 tools) – Handle memberships, types, and recurring services
Scheduling (17 tools) – Manage teams, zones, and capacity
Reporting (5 tools) – List report categories and execute reports
Intelligence Tools (10):
Dashboard-matched revenue summaries, same-day operational snapshots, technician scorecards, membership health reports, estimate pipeline metrics, campaign performance, CSR performance, labor cost analysis, invoice tracking, and reference data lookups
Safety & Configuration:
Read-only mode by default — write/delete tools blocked unless explicitly enabled
Confirmation workflow — delete operations require
confirm: trueAudit logging — all write/delete actions logged with sanitized parameters
Name-based filtering — human-readable names (e.g.,
businessUnitName) auto-resolved to IDsDomain filtering — expose only specific tool groups via
ST_DOMAINSSystem health check (
st_health_check) — validate API authentication and tenant accessRemote deployment — supports Streamable HTTP and SSE transports; integrates with Claude Desktop and other MCP-compatible hosts
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ServiceTitan MCPShow me a summary of revenue intelligence for this month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ServiceTitan MCP Server
A ServiceTitan MCP package for independently configured companies. V3 uses pinned official API contracts, readonly discovery, configurable report bindings, and explicit data-completeness checks.
Built by Rowvyn. Version 3.0.1 provides stable read-only support under the readonly-v1 policy: one separately configured runtime per company, followed by that company's readiness and report-definition validation. Read the v3 migration guide before upgrading.
Start with a focused profile
Choose the workflow your agent needs before connecting. These counts include the three system tools for health, readiness, and stored-result retrieval:
Workflow |
| Read tools |
Customer and location work |
| 33 |
Revenue and operational analytics |
| 34 |
Dispatch, scheduling, people, and settings |
| 75 |
Full API coverage |
| 264 |
Use Node 22 or 24. The following complete stdio configurations install the versioned npm package. Replace all four credential placeholders with credentials for your company. They explicitly select production for a live company; use integration with matching integration credentials when validating there. Set ST_TIMEZONE to your company's IANA timezone. Each server process serves one independently configured company.
For analytics:
{
"mcpServers": {
"servicetitan": {
"command": "npx",
"args": ["-y", "@rowvyn/servicetitan-mcp@3.0.1"],
"env": {
"ST_CLIENT_ID": "your-client-id",
"ST_CLIENT_SECRET": "your-client-secret",
"ST_APP_KEY": "your-app-key",
"ST_TENANT_ID": "your-tenant-id",
"ST_ENVIRONMENT": "production",
"ST_TIMEZONE": "America/New_York",
"ST_READONLY": "true",
"ST_TOOL_PROFILE": "analytics"
}
}
}
}For CRM:
{
"mcpServers": {
"servicetitan": {
"command": "npx",
"args": ["-y", "@rowvyn/servicetitan-mcp@3.0.1"],
"env": {
"ST_CLIENT_ID": "your-client-id",
"ST_CLIENT_SECRET": "your-client-secret",
"ST_APP_KEY": "your-app-key",
"ST_TENANT_ID": "your-tenant-id",
"ST_ENVIRONMENT": "production",
"ST_TIMEZONE": "America/New_York",
"ST_READONLY": "true",
"ST_TOOL_PROFILE": "crm"
}
}
}
}For dispatch, change only ST_TOOL_PROFILE in either configuration to dispatch. Choose full for all 264 read tools. The profile, ST_DOMAINS, and ST_TOOLS filters intersect; a tool must satisfy each configured filter. For example, adding ST_TOOLS=crm_customers_get to the CRM configuration exposes that customer lookup plus the three system tools. Profiles select tools and do not grant ServiceTitan scopes. Start with st_health_check for authentication/read access and st_readiness_check for module and report compatibility.
The tool catalog explains selection among list, get, and export operations. Four export feeds retain equivalent generic and domain-specific names for compatibility; use one available name per feed. Focused profiles naturally exclude the generic export domain. Every existing v3.0.0 name remains available under its original configuration in v3.0.1.
Related MCP server: servicetitan-mcp
Run from source
Use Node 22 or 24. Install the locked dependencies, build, and put credentials in an ignored .env copied from .env.example:
npm ci
npm run build
node --env-file=.env build/readiness-cli.js
node --env-file=.env build/index.jsRequired values are ST_CLIENT_ID, ST_CLIENT_SECRET, ST_APP_KEY, and ST_TENANT_ID. Select ST_ENVIRONMENT=production for a live company; the default is integration. Set the company's IANA timezone explicitly, such as America/New_York.
Keep the credential file outside source control, restrict it to the account running the server, and never paste credentials or access tokens into logs, issues, pull requests, benchmark output, or MCP prompts. Integration and production credentials are environment-specific; keep each set with its matching auth/API environment. Grant only the ServiceTitan scopes needed by the selected tools, and replace credentials through the ServiceTitan Developer Portal if exposure is suspected. ServiceTitan recommends developing in integration before production and requires the client secret for OAuth plus the app key on resource calls. See Make Your First API Call, ServiceTitan's customer credential guidance, and the API Terms.
Configure an MCP host to run node with --env-file=/absolute/path/.env and /absolute/path/build/index.js. Stdio reserves stdout for MCP protocol traffic. Logs and mutation audits go to stderr.
The package also provides servicetitan-mcp, servicetitan-mcp-http, servicetitan-mcp-sse, and servicetitan-mcp-check command entrypoints.
Choose the tool surface
The generated catalog lists 458 tools: 261 ServiceTitan-facing read tools backed by pinned API contracts, three built-in system tools, and 194 experimental mutations. The 264-tool readonly discovery surface is eligible for stable support subject to each company's scopes/modules and readiness/report validation. Live verification sampled representative reads rather than every tool. Discovery is filtered by configuration:
Setting | Behavior |
| Default; mutating tools are absent from discovery and cannot execute. |
| Default; setting |
| All supported domains, still subject to readonly and other filters. |
| CRM tools. |
| Dispatch, scheduling, people, settings. |
| Intelligence, reporting, settings. |
| Intersects the profile with selected domains. |
| Exact tool-name allowlist; unknown or unavailable selections fail startup. |
System health, readiness, and result-retrieval tools remain accessible through the same authorization checks. Profiles do not grant upstream ServiceTitan scopes. Undocumented operations removed in v3 remain unavailable even in the full profile.
Writes are outside the stable v3 support commitment. To expose these experimental adapters, set both ST_READONLY=false and ST_EXPERIMENTAL_WRITES=true. ST_CONFIRM_WRITES=true then requires _confirmed:true for writes; deletes separately require confirm:true. These are safeguards against accidental changes, not independent human authorization. Uncertain write outcomes explicitly instruct checking ServiceTitan before retrying; the client does not blindly retry timeouts or 5xx writes.
Readiness and report compatibility
st_readiness_check and the check CLI validate authentication, representative enabled-module reads, and configured report definitions. They return field/parameter metadata and definition fingerprints, not customer records. Missing scopes, missing reports, and incompatible fields are actionable failures. Representative read access does not certify every operation, write scope, or KPI amount.
Bind a company's reports with JSON in ST_REPORT_BINDINGS:
ST_REPORT_BINDINGS={"166":{"category":"accounting","reportId":900166}}The keys are the logical report IDs used by analytics; the values select this company's category and actual report ID. Required fields are validated by name and reordered before calculations. Default Report 166 provides hours but no gross pay; labor costs and hourly rates are null with explicit availability metadata. A compatible configured report that includes GrossPay can supply those metrics.
Analytics follows pagination and rejects missing/inconsistent required data. Optional feed failures remain in _warnings. Review warnings and completeness metadata before treating an answer as a complete business result. Report execution is scheduled per report and API client, with a 65-second interval between starts; expensive multi-page reports can take minutes. Set an appropriate host request timeout and use cancellation when abandoning a query. Separate server processes still share ServiceTitan's upstream report limit.
Metrics have explicit meanings. Period revenue minus payments is no longer labeled outstanding A/R; membership period counts are not labeled cohort retention; independent booked-call and booking counts are not treated as one conversion cohort. Representative readonly behavior has been exercised with one production company. V3 does not certify dashboard parity or independent-company compatibility; Scheduling Pro access returned 403 in that validation and remains unverified.
Structured and bounded results
Successful tools provide the same JSON in structuredContent and the text content. Arrays/scalars are wrapped as {data:...}. Semantic fields, warnings, continuations, names, and precision are preserved. Timestamps may be rendered in the configured timezone without changing the instant; keys explicitly labeled UTC remain UTC.
ST_MAX_RESPONSE_CHARS defaults to 100,000 and covers the final serialized tool envelope, including both representations. Large results can return an opaque handle for st_result_read: start at offset 0, concatenate each text chunk in nextOffset order, and parse the assembled JSON. Stored results belong to one server/session, expire after five minutes, and are bounded to four entries and 4 MB total. Restarting or closing the session removes them. A full store may evict older entries.
Stored chunks and normal tool responses can contain customer content. Protect the MCP channel and any client-side transcripts or exports, retrieve only what the workflow needs, and delete locally retained validation output when it is no longer needed. Do not publish raw live responses as test evidence.
If the result or retrieval metadata cannot fit configured storage/budget limits, the tool returns an explicit delivery error with source-pagination guidance. It never passes a cut JSON preview off as complete data. The minimum accepted response budget is 256 characters; useful result handles require a larger budget such as 1,024 or more. A delivery failure after a successful mutation is recorded separately in its audit and does not imply that the mutation should be retried.
Remote transports
node --env-file=.env build/streamable-http.jsSet a strong ST_MCP_API_KEY; send it in x-api-key or a Bearer Authorization header. The server binds to loopback by default. Set ST_MCP_HOST=0.0.0.0 only when needed, such as a container behind an HTTPS proxy. Streamable HTTP uses /mcp; /health is an unauthenticated liveness endpoint.
Requests with a browser Origin require an exact ST_CORS_ORIGIN match. Without a configured origin, native clients without Origin are allowed and browser origins are rejected. Wildcards are not accepted.
ST_ALLOWED_CALLERS uses authenticated SDK identity. Request _meta and arbitrary forwarded identity headers are ignored. With the built-in shared API key, the authenticated principal is ST_MCP_CLIENT_ID (default api-key); this is one credential identity, not per-user identity. Embedders needing user identities must provide validated SDK authInfo through an authenticated transport.
HTTP sessions are bounded by ST_MAX_SESSIONS (32 default). Registry tool concurrency defaults to 16; ordinary API requests have a bounded queue and concurrency. Idle sessions are reaped after 30 minutes; active requests/streams are tracked. Session state and result handles are process-local, so multi-instance deployments need sticky routing. Legacy SSE is a single-client compatibility entrypoint: a new SSE connection replaces the prior one. Prefer Streamable HTTP.
Mutation audit events are emitted even when diagnostic log level is error; contact values, credentials, and free text are redacted. Configure durable stderr collection if durable audit retention is required.
Embed one company or separate company runtimes
The import entrypoint has no transport startup side effects:
import { createMcpServer, loadConfig } from '@rowvyn/servicetitan-mcp';
const { server } = await createMcpServer(loadConfig(companyEnvironment));
await server.connect(yourTransport);Create a separate client/runtime for each company. Caches and report queues use client identity; request timezone/budget/cancellation are scoped to the call. Sharing a ServiceTitan client across companies is unsupported. The package includes TypeScript declarations.
Development and release gates
Run these commands from a repository checkout; the npm package contains the runtime and maintained documentation.
npm run contracts:check
npm run typecheck
npm run lint
npm run test:coverage
npm run test:wire
npm run test:packaging
npm run docs:tools
npm run discovery:check
npm pack --dry-run
npm run release:checkThe contract generator uses the pinned official September 4, 2026 snapshot; upstream changes require a reviewed manifest regeneration. Contract tests cover resolved paths and request payloads. The normal suite includes auth/retry, paging, cancellation, DST, schema/metric, configuration isolation, transport and response-budget regressions. Built-process tests use dummy credentials and do not execute ServiceTitan business reads or writes.
Packaging tests use synthetic credential files to verify npm and Docker exclusions. The Docker check captures the installed CLI's context against a local mock engine, requires no running daemon, and skips explicitly when the CLI is unavailable. It never sends the repository or live credentials to a builder.
CI tests Node 22 and 24. The required aggregate ci check passes only when both runtime jobs succeed. The readonly-v1 release policy requires maintenance, contracts, analytics, interface, runtime-matrix, package-smoke, bounded readonly production, and latency/load gates plus a current source fingerprint. Unavailable integration-environment and independent-company gates are recorded as scoped out, never as passed. Releases keep npm Trusted Publishing and publish prereleases to next, stable versions to latest.
See the validation summary for coverage and remaining acceptance gates, and the benchmark results and reproduction instructions for latency, load, caching, and memory measurements.
Official sources: ServiceTitan API catalog, Reporting API, and API rate limits.
Available Tools
264 toolsaccounting_ap_credits_listARead-onlyIdempotent
List one requested page of vendor AP credits, filterable by credit IDs and created or modified timestamps. Use this for credits on vendor accounts; use accounting_ap_payments_list for AP disbursements and accounting_payments_list for customer receipts.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited AP credit IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, ModifiedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, openWorld, and non-destructive behavior. The description adds the useful behavioral detail that the tool returns 'one requested page' rather than all records, and that it supports filtering by IDs and timestamps. This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence states the core behavior and filters; the second sentence handles sibling differentiation. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, annotations cover safety traits, and the description supplies pagination and sibling routing. The remaining gaps are minor: exact timestamp filter semantics and default/combination behaviors are left to the schema or the agent to infer, but the tool is still actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes five of nine parameters in detail, and the description only groups filters generically as 'credit IDs and created or modified timestamps.' It adds some high-level meaning for the timestamp parameters, which lack schema descriptions, but does not clarify range semantics, exclusivity, or combination behavior. With 56% schema coverage, the description only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('vendor AP credits'), and immediately states pagination and filtering capabilities. It clearly differentiates itself from the two most similar siblings by naming accounting_ap_payments_list and accounting_payments_list and specifying what they handle instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Use this for credits on vendor accounts.' It also names the alternatives for AP disbursements and customer receipts, giving the agent clear routing logic with no need to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_ap_payments_listARead-onlyIdempotent
List one requested page of vendor AP payments, filterable by payment IDs and created or modified timestamps. Use this for accounts-payable disbursements; use accounting_ap_credits_list for vendor credits and accounting_payments_list for customer receipts.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited AP payment IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, ModifiedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds behavioral context beyond the annotations by noting pagination ('one requested page') and the available filter dimensions (payment IDs, timestamps). This is useful and consistent, though it does not detail default page size or response shape—but those are partially covered by the schema and output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The core purpose is front-loaded, and the alternative tool routing is efficiently packed into the second sentence. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, paginated list tool with an output schema and detailed annotations, this description is complete enough. It states the resource type, pagination model, filterable fields, and sibling routing. An agent has everything needed to select and invoke the tool correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 56%, with five parameter descriptions present but four timestamp parameters undocumented. The description adds high-level meaning by saying the list is 'filterable by payment IDs and created or modified timestamps,' which partially compensates for the undocumented timestamp parameters. However, it does not explain the semantics of the four timestamp fields in detail or clarify sorting/pagination behavior beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'List one requested page of vendor AP payments.' It also names the exact filtering dimensions (payment IDs, created/modified timestamps), making the tool's purpose unambiguous. It even distinguishes the tool from sibling tools by explicitly contrasting accounting_ap_credits_list and accounting_payments_list, so an agent can discriminate purely from the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage guidance: use this for accounts-payable disbursements, and explicitly says to use accounting_ap_credits_list for vendor credits and accounting_payments_list for customer receipts. This is a clear when-to-use and when-not-to-use statement with named alternatives, which is exactly what an agent needs for routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_gl_accounts_getARead-onlyIdempotent
Retrieve a GL account by its ServiceTitan ID. Returns the single upstream record without pagination; use accounting_gl_accounts_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | GL account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the tool read-only and idempotent, so the description does not need to repeat those safe behaviors. The added note that it returns a single upstream record without pagination is genuine behavioral context that helps the agent understand response scope and avoid expecting pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary behavior is front-loaded, and the alternative-tool guidance is compactly appended. Every sentence carries meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-parameter get-by-ID operation with a full output schema and safety annotations. The description covers the core behavior, absence of pagination, and the relevant alternative for unknown IDs, leaving no material gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents accountId as a required integer 'GL account ID', and coverage is 100%. The description adds value by clarifying that this is the ServiceTitan ID, which reinforces the external identifier semantics and connects the parameter to the tool's stated purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') with a clear resource ('a GL account by its ServiceTitan ID') and explicitly contrasts this tool with accounting_gl_accounts_list. The distinction between a direct fetch by ID and a search list is unambiguous, so an agent can tell them apart immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states exactly when to use this tool—when the ServiceTitan ID is known—and explicitly names accounting_gl_accounts_list as the alternative when the ID is unknown. This gives the agent a clear decision rule with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_gl_accounts_listARead-onlyIdempotent
List one requested page of general-ledger accounts, with filters for IDs, names, numbers, types, subtypes, source, description, and Intacct flags. Use accounting_gl_accounts_get for one known account and accounting_gl_account_types_list to resolve account-type metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited account IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name, Number, ModifiedOn, CreatedOn | |
| names | No | Comma-delimited account names (max 50) | |
| types | No | Comma-delimited account types (max 50) | |
| active | No | Filter by active status | True |
| source | No | Account source | |
| numbers | No | Comma-delimited account numbers (max 50) | |
| pageSize | No | Records per page (default 50) | |
| subtypes | No | Comma-delimited account subtypes (max 50) | |
| description | No | Description contains value | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| isIntacctGroup | No | Only Intacct group accounts | |
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| isIntacctBankAccount | No | Only Intacct bank accounts |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description adds that results are paged ('one requested page') and lists available filter dimensions, which is useful but doesn't disclose pagination behavior, defaults, or response envelope—though the output schema helps fill that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and filter summary, followed by sibling routing. No filler, and each phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a rich 18-parameter schema, output schema, and safety annotations, the description covers the essential context: what it lists, its filter scope, and the relevant sibling tools. It doesn't explain sort/includeTotal/date-filter details, but those are documented in the schema, so the description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 78%, close to high, and most parameters carry detailed descriptions and enums. The description adds a helpful summary of the filter categories (IDs, names, numbers, types, subtypes, source, description, Intacct flags) but doesn't elaborate on page, pageSize, sort, or date-window semantics. The schema remains the primary source of parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('List one requested page of general-ledger accounts') and explicitly names sibling tools with different purposes: accounting_gl_accounts_get for a single known account and accounting_gl_account_types_list for account-type metadata. An agent can distinguish this tool from nearby siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use alternatives: use accounting_gl_accounts_get for one known account and accounting_gl_account_types_list to resolve account-type metadata. This gives an agent clear routing logic: for paged/filtered listing use this tool, for single-record lookup use the get variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_gl_account_types_listARead-onlyIdempotent
List one requested page of GL account-type definitions, filterable by type IDs, names, and active state. Use this catalog to resolve types for GL accounts; use accounting_gl_accounts_list for the actual ledger accounts.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited account type IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name, ModifiedOn, CreatedOn | |
| names | No | Comma-delimited account type names (max 50) | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is established. The description adds value beyond annotations by clarifying pagination behavior ('one requested page') and the catalog-like nature of the response, which helps set expectations for how to use the returned definitions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core purpose and pagination behavior are front-loaded, and the sibling differentiation is placed second. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, output schema, and mostly documented input schema, the description is sufficient for an agent to select and invoke the tool. It clearly states what the tool returns and when to use the sibling. It does not enumerate all optional date/sort filters, but those are already expressed in the input schema, so the omission is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 64%, so the schema documents most parameters but not all. The description reinforces the main filter dimensions (IDs, names, active) but does not add meaning for the undocumented parameters like createdBefore, modifiedBefore, createdOnOrAfter, and modifiedOnOrAfter. The parameter names are fairly conventional, but the description does not fully compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('GL account-type definitions'), the operation ('List one requested page'), and the primary filters ('type IDs, names, and active state'). It also explicitly distinguishes itself from accounting_gl_accounts_list, so an agent can tell the difference between account types and actual ledger accounts without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives direct usage guidance: use this tool as a catalog to resolve GL account types, and use accounting_gl_accounts_list for the actual ledger accounts. This explicitly routes the agent to the correct sibling based on intent, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_invoices_custom_field_types_listARead-onlyIdempotent
List one requested page of invoice custom-field definitions, with paging and total-count controls. Use this to resolve the metadata for invoice custom fields; use accounting_invoices_list to retrieve invoice records and their values.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name, CreatedOn, ModifiedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnly, idempotent, and non-destructive. The description adds useful behavioral context beyond annotations by clarifying that only 'one requested page' is returned and that paging/total-count controls are available, preventing assumptions about automatic pagination or a full dump.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no padding. The primary action and key behavior are front-loaded in the first sentence, and the sibling distinction is given concisely in the second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with an output schema, the description gives the core purpose, the paging behavior, and a clear sibling alternative. It does not explicitly explain the date-filter semantics, but the schema field names and formats cover the essentials, making the description sufficient for correct tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, with paging-related parameters described in the schema. The description reinforces the paging/total-count semantics but does not elaborate on the four date filter parameters (createdBefore, modifiedBefore, createdOnOrAfter, modifiedOnOrAfter). The parameter names and date-time format are reasonably self-explanatory, so the description provides modest added value without fully compensating for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List one requested page of invoice custom-field definitions') and a clear resource (custom-field definitions for invoices). It also distinguishes itself from accounting_invoices_list, which retrieves invoice records and their values, so an agent can tell them apart immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool to resolve invoice custom-field metadata and points to accounting_invoices_list as the alternative for invoice records. This gives the agent a clear when-to-use and when-not-to-use decision without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_invoices_listARead-onlyIdempotent
List one requested page of customer invoice headers using customer, job, business-unit, invoice, date, amount, balance, review, and assignment filters. Use this for filtered invoice search; use estimates or invoice-item tools when the required grain is an estimate or individual line item.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited invoice IDs | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn, Number, InvoicedOn, DueDate, Total, Balance | |
| jobId | No | Job ID | |
| number | No | Invoice number | |
| batchId | No | Batch ID | |
| orderBy | No | Order by field | |
| pageSize | No | Records per page (default 50) | |
| statuses | No | Invoice statuses | |
| jobNumber | No | Job number | |
| totalLess | No | Maximum invoice total | |
| customerId | No | Customer ID | |
| batchNumber | No | Batch number | |
| includeTotal | No | Include total count in response | |
| totalGreater | No | Minimum invoice total | |
| assignedToIds | No | Assignee user IDs | |
| createdBefore | No | ||
| dueDateBefore | No | Due date before RFC3339 date-time | |
| adjustmentToId | No | Adjusted invoice ID | |
| businessUnitId | No | Business unit ID | |
| modifiedBefore | No | ||
| reviewStatuses | No | Review statuses | |
| createdOnOrAfter | No | ||
| dueDateOnOrAfter | No | Due date on or after RFC3339 date-time | |
| invoicedOnBefore | No | Invoiced on or before RFC3339 date-time | |
| orderByDirection | No | Order direction: asc|desc | |
| customFieldFields | No | Custom field name/value filters | |
| invoicedOnOrAfter | No | Invoiced on or after RFC3339 date-time | |
| modifiedOnOrAfter | No | ||
| customFieldOperator | No | Operator for custom field filters | |
| balanceFilterBalance | No | Balance filter value | |
| balanceFilterComparer | No | Balance comparison operator |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive profile, so the description only needs to add behavioral context beyond that. It does so by clarifying the response grain (invoice headers), the one-page nature of the call, and the range of filtering dimensions. It does not discuss pagination defaults or sorting behavior, but the schema and output schema cover those.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences contain the essential purpose, scope, and routing guidance with no fluff. The key verb and resource are front-loaded, and the usage caveat is placed immediately after the main definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and annotations, this description provides enough context for an agent to select and invoke the tool correctly. It states what the tool returns at a high level, the main usage scenario, and the main alternative paths, while the schema handles the 32-parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 88% and each parameter already has a meaningful description, so the baseline is 3. The description adds only a high-level grouping of filter categories without explaining any individual parameter format or relationship beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('customer invoice headers'), and a concrete scope ('one requested page'), then enumerates the filter dimensions. It also differentiates this tool from estimates and invoice-item tools, making its purpose distinguishable from a large sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this tool for filtered invoice search and tells the agent to use estimates or invoice-item tools when the required grain differs. This gives clear when-to-use and when-not-to-use guidance, effectively routing the agent among alternatives without requiring it to inspect many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_journal_entries_get_detailsARead-onlyIdempotent
Retrieve journal-entry detail rows for the requested journal-entry IDs. Use this for line-level account and amount detail; use accounting_journal_entries_get_summary for header-level totals.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Journal entry UUID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context that the result contains detail rows with line-level account and amount information, but it does not disclose operational caveats such as pagination behavior or response shape, which are partly covered by the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The primary purpose is front-loaded, and the differentiation from the summary tool is stated efficiently in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full parameter schema coverage, an output schema, and strong annotations, the description is complete enough for an agent to select and invoke the tool correctly. It identifies the line-level scope and names the relevant sibling, so no critical contextual information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: id, page, pageSize, and includeTotal each have descriptive text. The tool description does not add parameter-level semantics beyond indicating line-level detail, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves journal-entry detail rows, which is a specific verb plus resource. It also explicitly contrasts itself with accounting_journal_entries_get_summary, making the distinction between line-level detail and header-level totals unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: use this tool for line-level account and amount detail, and use accounting_journal_entries_get_summary for header-level totals. This directly tells an agent when this tool is appropriate versus the closest sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_journal_entries_get_summaryARead-onlyIdempotent
Retrieve journal-entry summary rows for the requested journal-entry IDs. Use this for header-level accounting totals; use accounting_journal_entries_get_details for the corresponding line-level detail rows.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Journal entry UUID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the summary-vs-detail output distinction, but does not disclose additional behavioral context such as pagination behavior, rate limits, or response envelope details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with the core retrieve action and scope stated first and the sibling alternative stated second. Every sentence earns its place and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, annotations are rich, and the parameter schema is fully documented, the description is complete enough for an agent to select and call the tool correctly. It clearly scopes the result level and points to the details sibling for the alternative use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the schema fully documents id, page, pageSize, and includeTotal. The description does not add much parameter-level detail; 'requested journal-entry IDs' pluralizes the singular id field but does not conflict with it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and resource ('journal-entry summary rows'), and states it operates on journal-entry IDs. It also distinguishes this tool from accounting_journal_entries_get_details by framing it as the header-level summary counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: use this for header-level accounting totals, and use accounting_journal_entries_get_details for line-level detail rows. This directly names the alternative and the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_journal_entries_listARead-onlyIdempotent
List one requested page of journal-entry headers using IDs, numbers, sync status, posted dates, and created or modified timestamps. Use this to discover entry IDs, then choose accounting_journal_entries_get_summary for summary rows or accounting_journal_entries_get_details for line-level rows.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited journal entry IDs (max 50) | |
| name | No | Journal entry name contains | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Number, Name, Status, CreatedOn, ExportedOn, ExportedBy, PostDate | |
| numberTo | No | Entry number upper bound | |
| pageSize | No | Records per page (default 50) | |
| postedTo | No | Posted on or before UTC timestamp | |
| statuses | No | Entry statuses | |
| refNumber | No | Transaction reference number contains | |
| exportedBy | No | Comma-delimited user IDs who exported entries | |
| exportedTo | No | Exported on or before UTC timestamp | |
| numberFrom | No | Entry number lower bound | |
| postedFrom | No | Posted on or after UTC timestamp | |
| vendorName | No | Vendor name contains | |
| customField | No | Custom field name/value filters | |
| customerName | No | Customer name contains | |
| exportedFrom | No | Exported on or after UTC timestamp | |
| includeTotal | No | Include total count in response | |
| locationName | No | Location name contains | |
| syncStatuses | No | Sync statuses | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| businessUnitIds | No | Comma-delimited business unit IDs (max 50) | |
| createdOnOrAfter | No | ||
| transactionTypes | No | Transaction types | |
| modifiedOnOrAfter | No | ||
| serviceAgreementIds | No | Comma-delimited service agreement IDs (max 50) | |
| transactionPostedTo | No | Contains transaction posted on or before UTC timestamp | |
| inventoryLocationName | No | Inventory location name contains | |
| transactionPostedFrom | No | Contains transaction posted on or after UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds useful behavioral context beyond annotations: results are paginated ('one requested page') and header-level rather than full entries. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences of roughly 50 words, with the core action front-loaded and the usage routing in the second sentence. Every clause earns its place — there is no fluff, tautology, or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 30-parameter, zero-required listing tool with an output schema and safety annotations, the description covers purpose, pagination behavior, and the follow-up workflow. Return values are covered by the output schema and parameters by the schema (87% coverage), so the only minor gap is the absence of guidance on typical filter combinations — not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 87%, so the 30 parameters are already well documented in the schema. The description adds a high-level grouping of filter categories (IDs, numbers, sync status, posted dates, created/modified timestamps) that maps to schema fields, but it does not add syntax, constraints, or meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List one requested page of journal-entry headers'), names the filter dimensions (IDs, numbers, sync status, posted dates, created/modified timestamps), and explicitly notes it returns headers only. This differentiates it from the get_summary and get_details siblings without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('Use this to discover entry IDs') and routes to the two relevant alternatives with their selection conditions — accounting_journal_entries_get_summary for summary rows and accounting_journal_entries_get_details for line-level rows. An agent gets a clear decision path with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_payments_custom_field_types_listARead-onlyIdempotent
List one requested page of payment custom-field definitions, with paging and total-count controls. Use this to resolve payment field metadata; use accounting_payments_list for customer payment transactions and their field values.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name, CreatedOn, ModifiedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the description doesn't need to restate that. It adds a little behavioral context by emphasizing paging and total-count controls, but it does not disclose anything beyond the schema and annotations, such as rate limits or response pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, purposeful sentences. The core behavior and scope are front-loaded, and the alternative-tool routing is stated without any filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the return shape doesn't need to be explained. The description covers what the tool lists, its use case, its pagination/total-count aspect, and the correct sibling for transactions. It is complete enough, though it leaves sort and date-filter semantics entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, covering page, sort, pageSize, and includeTotal; the description adds only a high-level nod to 'paging and total-count controls.' It does not compensate for the undocumented date-filter parameters or elaborate on how sort/filter options work, so the benefit beyond the schema is modest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resource: 'List one requested page of payment custom-field definitions.' It also clearly differentiates itself from its closest sibling by pointing to accounting_payments_list for payment transactions and field values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool: 'Use this to resolve payment field metadata.' It also names the alternative and the condition that selects it: 'use accounting_payments_list for customer payment transactions and their field values.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_payments_listARead-onlyIdempotent
List one requested page of customer payment transactions using payment or applied-invoice identifiers, customer, business-unit, batch, status, date, and total-amount filters. Use accounting_payment_types_list for payment-method definitions; use accounting_ap_payments_list for vendor disbursements.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited payment IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, ModifiedOn, PaidOn, Total | |
| batchId | No | Batch ID | |
| pageSize | No | Records per page (default 50) | |
| statuses | No | Payment statuses | |
| totalLess | No | Maximum total amount | |
| customerId | No | Customer ID | |
| batchNumber | No | Batch number | |
| paidOnAfter | No | Paid date on or after RFC3339 date-time | |
| includeTotal | No | Include total count in response | |
| paidOnBefore | No | Paid date on or before RFC3339 date-time | |
| totalGreater | No | Minimum total amount | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| businessUnitIds | No | Comma-delimited business unit IDs | |
| transactionType | No | Transaction type | |
| createdOnOrAfter | No | ||
| customFieldFields | No | Custom field name/value filters | |
| modifiedOnOrAfter | No | ||
| appliedToInvoiceIds | No | Comma-delimited invoice IDs applied to | |
| customFieldOperator | No | Operator for custom field filters | |
| appliedToReferenceNumber | No | Applied reference number |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly, idempotent, openWorld, and non-destructive hints, so the bar is lower. The description adds the 'one requested page' pagination behavior and the customer-payment scope, but it does not disclose any additional behavioral details such as defaults, limits, or response semantics. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core action is front-loaded, and the second sentence adds valuable sibling differentiation. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 23-parameter list tool, the description gives enough orientation through pagination, filter categories, and sibling routing, while the output schema and annotations cover return values and safety. It does not explicitly mention bulk-export alternatives like export_payments, but 'one requested page' already signals this is a paginated list rather than an export.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the input schema already documents most parameters well. The description lists filter categories but does not add meaning beyond what the schema provides. The date-only parameters without descriptions, such as createdBefore and modifiedBefore, are not clarified further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('customer payment transactions'), and a scope ('one requested page'). It also explicitly distinguishes this tool from accounting_ap_payments_list by clarifying that AP list handles vendor disbursements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names two sibling tools and tells the agent exactly when to use them instead: accounting_payment_types_list for payment-method definitions and accounting_ap_payments_list for vendor disbursements. This provides clear routing guidance beyond simple naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_payment_terms_getARead-onlyIdempotent
Retrieve a payment term by its ServiceTitan ID. Returns the single upstream record without pagination; use accounting_payment_terms_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| paymentTermId | Yes | Payment term ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint. The description adds useful behavioral detail beyond that: the return is a single upstream record with no pagination, which is not captured in the annotations or input schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler: the first states the core action and scope, the second adds behavioral context and alternative routing. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-ID lookup, the description, combined with the output schema and annotations, provides everything an agent needs to select and invoke the tool correctly. The no-pagination and single-record notes prevent false expectations about response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents paymentTermId with 100% coverage. The description adds meaning by identifying it as the ServiceTitan ID and makes the lookup key explicit, which helps the agent understand the identifier's origin and role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve') and resource ('payment term by its ServiceTitan ID'). It clearly distinguishes itself from accounting_payment_terms_list by noting it returns the single upstream record without pagination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes agents to accounting_payment_terms_list when the ID is unknown. This establishes a clear when-to-use versus when-to-use-alternative boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_payment_terms_listARead-onlyIdempotent
List one requested page of invoice payment-term definitions, filterable by IDs and created or modified timestamps. Use accounting_payment_terms_get for one known term; use accounting_invoices_list for invoice transactions.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited payment term IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name, CreatedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context about pagination ('one requested page') and filtering by IDs and timestamps, which goes beyond the raw schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core purpose and paging behavior are front-loaded, and the alternative-tool guidance is packed into a single clear sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with nine optional parameters and an output schema, the description covers the main decisions: what is returned, how paging works, and which sibling to use instead. It does not mention sort or includeTotal, but those are documented in the schema, so nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 56%, and the description only mentions 'IDs and created or modified timestamps' at a group level. It does not explain the semantics of the individual timestamp filters or the constraints like max 50 IDs. The description adds some orientation, but most parameter meaning still comes from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the resource ('invoice payment-term definitions'), and the key scoping behavior ('one requested page'). It also heads off confusion with siblings by naming accounting_payment_terms_get and accounting_invoices_list as distinct alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: use accounting_payment_terms_get for a single known term and accounting_invoices_list for invoice transactions. This tells an agent exactly when to choose this tool versus its closest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_payment_types_getARead-onlyIdempotent
Retrieve a payment type by its ServiceTitan ID. Returns the single upstream record without pagination; use accounting_payment_types_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Payment type ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the tool read-only, idempotent, and non-destructive, so the bar for behavioral disclosure is lower. The description adds meaningful context by stating it returns a single upstream record and has no pagination, which helps the agent understand the response shape without invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly constructed sentence with no filler. It front-loads the core behavior, then gives the pagination note and the alternative routing in an efficient second clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-ID get tool, the description covers the essential behavior, the absence of pagination, and the routing to the list sibling when appropriate. An output schema exists, so return value details are already available, and the annotations cover the safety and idempotency profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the id parameter at 100% coverage. The description adds a small but useful clarification that this is the ServiceTitan ID, tying the parameter to the upstream system context. This goes slightly beyond the schema's 'Payment type ID'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Retrieve'), the resource ('a payment type'), and the required identifier ('by its ServiceTitan ID'). It also distinguishes itself from the sibling accounting_payment_types_list by explicitly noting this returns a single record without pagination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative tool (accounting_payment_types_list) and tells the agent when to use it: when the ID is unknown. This provides a clear decision rule for choosing between the get and list variants.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_payment_types_listARead-onlyIdempotent
List one requested page of customer payment-type definitions, filterable by IDs, active state, and creation timestamps. Use this catalog to interpret or select payment methods; use accounting_payments_list for actual customer payment transactions.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited payment type IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return records created before this timestamp | |
| createdOnOrAfter | No | Return records created on or after this timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate the read-only, idempotent, non-destructive nature of the operation. The description adds some context by framing it as a paginated catalog of definitions rather than transactions, but it does not add substantial behavioral details beyond what annotations and the output schema already provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary purpose is stated first, and the crucial sibling distinction is delivered efficiently in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The combination of complete schema documentation, annotations, and output schema covers what an agent needs to call the tool correctly. The description's catalog/transactions distinction completes the contextual picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all seven parameters. The description only lists the filter dimensions ('IDs, active state, and creation timestamps') without adding format, default, or constraint details, so it adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb and resource: 'List one requested page of customer payment-type definitions.' It explicitly contrasts with accounting_payments_list, which covers actual transactions, so an agent can distinguish this catalog tool from the closely named sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says when to use this tool ('Use this catalog to interpret or select payment methods') and explicitly directs the agent to accounting_payments_list when actual customer payment transactions are needed. This provides clear routing guidance among related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accounting_tax_zones_listARead-onlyIdempotent
List one requested page of tax-zone definitions, filterable by IDs, active state, and created or modified timestamps. Use this catalog to resolve tax treatment identifiers; it does not return invoice transactions or calculated tax totals.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited tax zone IDs | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds meaningful behavioral context: results are paginated by page, the data is definitional/catalog-like, and invoice transactions and tax totals are outside its scope. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The main action is front-loaded, filter capabilities are summarized in one clause, and the essential scope exclusion is stated at the end. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, annotations, and a 10-parameter input schema, the description provides adequate context: it states the resource type, pagination model, filter dimensions, and what the tool is not for. It could be slightly more complete by naming an alternative source for invoice transactions or tax totals, but nothing critical is missing for invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover six parameters, but the four timestamp parameters lack descriptions, leaving 60% coverage. The description partially compensates by grouping them as 'created or modified timestamps' and clarifying they are filters. It does not describe every parameter, but the schema already handles the pagination and sorting details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List one requested page of tax-zone definitions.' It further clarifies the tool's role as a catalog for resolving tax treatment identifiers and explicitly distinguishes it from invoice transactions or calculated tax totals, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear positive use case ('Use this catalog to resolve tax treatment identifiers') and an explicit negative boundary ('does not return invoice transactions or calculated tax totals'). It does not name a specific sibling tool for those alternatives, but the exclusions still guide selection well.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_booking_provider_tags_getARead-onlyIdempotent
Retrieve one booking-provider tag record by ID, including its name and description. Use crm_booking_provider_tags_list to search by name, multiple IDs, or change dates.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Booking provider tag ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds minimal behavioral context beyond the core retrieval action and the included fields, but does not disclose additional traits such as error behavior or response edge cases. With annotations covering the main behavioral concerns, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The main retrieval behavior is front-loaded, and the alternative usage guidance is placed in the second sentence without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-ID GET-style tool. The output schema is present, the annotations cover safety and idempotency, and the description explains what the tool returns and how to choose between this tool and the sibling list tool. Nothing important is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the only parameter ('id' as Booking provider tag ID) with 100% coverage, so the description does not need to add much. It reinforces that the ID identifies a single record to retrieve, but offers no new format, constraints, or usage details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a specific resource ('one booking-provider tag record by ID'), and the relevant fields (name and description). It also differentiates from the sibling list tool by explicitly naming crm_booking_provider_tags_list as the alternative for broader searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use the alternative: use crm_booking_provider_tags_list to search by name, multiple IDs, or change dates. This makes the decision boundary between the get and list tools clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_booking_provider_tags_listARead-onlyIdempotent
Search booking-provider tag definitions by name, IDs, or created and modified ranges. Returns one page; use crm_booking_provider_tags_get when the tag ID is already known.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited booking provider tag IDs | |
| name | No | Booking provider tag name | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context beyond the annotations: it returns one page and supports searching by several filter dimensions. No contradiction exists between description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences contain no filler and front-load the key search behavior and pagination note. The alternative tool is explicitly named rather than described vaguely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, annotations, and self-descriptive parameter names, the description is largely complete for selecting and invoking the tool. It covers primary search modes, pagination, and the main alternative. A minor gap is not stating whether filters can be combined or that no filters are required, but this is inferable from the optional schema parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, with four date-range parameters lacking descriptions. The description helps by grouping filters into 'name, IDs, or created and modified ranges,' but it does not clarify the boundary semantics of createdBefore/createdOnOrAfter/modifiedBefore/modifiedOnOrAfter. Overall the parameter names and schema descriptions carry most of the meaning, with only moderate added value from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search booking-provider tag definitions' by name, IDs, or created/modified ranges. It also clearly differentiates the tool from crm_booking_provider_tags_get by noting that the get variant should be used when the tag ID is already known.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative tool and the condition for choosing it: use crm_booking_provider_tags_get when the tag ID is already known. The 'Returns one page' note also signals that pagination is needed for larger result sets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_bookings_contacts_listARead-onlyIdempotent
List one page of contacts attached to a tenant booking. Supply the booking ID; use page and pageSize to continue through results.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Booking ID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint, covering the safety profile. The description adds pagination semantics ('one page', 'continue through results'), but it does not disclose other behavioral details such as default paging behavior or the effect of includeTotal beyond what the schema already states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the action and scope, the second gives the two essential pieces of invocation guidance. Information is front-loaded and every clause contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only paginated list with a rich output schema and strong annotations, the description is nearly complete. The main gap is the lack of explicit distinction from the similar crm_bookings_provider_contacts_list sibling, which an agent might confuse without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters. The description adds value by explaining that the booking ID is the required anchor and that page/pageSize drive result continuation, which clarifies their role beyond the raw schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'contacts attached to a tenant booking', making the core purpose plain. It does not explicitly contrast with the closely named sibling crm_bookings_provider_contacts_list, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent to supply the booking ID and to use page/pageSize for pagination, which is actionable context. It does not explicitly discuss when to choose this tool over sibling contact-list tools, so exclusion guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_bookings_getARead-onlyIdempotent
Retrieve one tenant booking record by booking ID. Use crm_bookings_list to search when the ID is unknown, or the provider-scoped get when the booking provider must be part of the route.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Booking ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered by structured data. The description adds tenant-scoping context but discloses no additional behavioral traits such as error behavior, pagination, or special return conditions. With annotations present, this is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words: the primary action and lookup key are front-loaded, followed by clear routing to alternatives. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool, the definition is complete: it states what the tool retrieves, by which key, when to use alternatives, and the annotations plus output schema handle safety and return structure. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the single parameter completely: 'id' is documented as an integer Booking ID, and schema description coverage is 100%. The description does not add further parameter-level detail, but none is necessary given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') with a specific resource ('one tenant booking record') and the lookup key ('by booking ID'). It clearly differentiates from sibling tools by naming crm_bookings_list for search and the provider-scoped get for route-level access.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance is provided: use this tool when the booking ID is known, use crm_bookings_list when the ID is unknown, and use the provider-scoped get when provider must be part of the route. This removes ambiguity for an agent choosing among similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_bookings_listARead-onlyIdempotent
Search tenant bookings by IDs, external ID, or created and modified ranges. Returns one page; use crm_bookings_get for a known booking ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited booking IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| pageSize | No | Records per page (default 50) | |
| externalId | No | External booking ID | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds the real behavioral detail 'Returns one page', which is not visible in annotations and alerts the agent that results are paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states what the tool searches, the second states the pagination behavior and the key alternative. Every clause adds information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated search/list tool with rich annotations and an output schema, the description covers the core behavior and the main sibling decision (get vs list). It does not mention other potentially relevant alternatives such as export_bookings, but the schema and annotations fill enough context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, with the four date-time parameters lacking descriptions; the description's 'created and modified ranges' fills in that gap by grouping them into meaningful filter dimensions. The schema already documents page/pageSize/sort/externalId/includeTotal, and the description's enumeration of search keys adds semantic grouping without repeating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search tenant bookings'. It then enumerates the precise search dimensions (IDs, external ID, created/modified ranges), and explicitly distinguishes itself from crm_bookings_get, so an agent can tell when to use which without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing guidance: 'use crm_bookings_get for a known booking ID', which is a clear when-not condition. The phrase 'Returns one page' also signals this is a paginated list operation rather than a bulk export, and the filter list defines the primary use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_bookings_provider_contacts_listARead-onlyIdempotent
List one page of contacts for a booking within a specified booking provider. Requires both provider and booking IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Booking ID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| bookingProvider | Yes | Booking provider ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, non-destructive behavior. The description adds the key behavioral detail that it lists only one page at a time, and it emphasizes that both provider and booking IDs are required, which is important for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first states the action and resource, the second states the prerequisite. No filler or repetition of schema details; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated list with full schema coverage, a read-only annotation set, and an output schema, the description is complete. An agent has enough information to select and invoke the tool correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters including page, pageSize, and includeTotal. The description reinforces the two required identifiers but does not add new meaning beyond the schema, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), a precise resource ('contacts for a booking within a specified booking provider'), and states the required scope. This clearly distinguishes it from the sibling crm_bookings_contacts_list, which lacks the provider qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this when you need a page of contacts for a booking and you have both the booking provider and booking IDs. It does not explicitly name alternatives or state when not to use it, but the provider-scoped wording makes the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_bookings_provider_getARead-onlyIdempotent
Retrieve one booking record from a specified booking provider using both provider and booking IDs. Use crm_bookings_get for the tenant-wide ID route, or the provider list when the booking ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Booking ID | |
| bookingProvider | Yes | Booking provider ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the scoping behavior of requiring both provider and booking IDs, but does not disclose not-found behavior or any other runtime details. This is adequate for a simple read-only getter, but not especially rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action and required identifiers come first, and the routing alternatives follow in a compact second sentence. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, read-only getter with a rich annotation set and an output schema, the description is complete. It provides the key operation, identifies the required inputs, and points to the correct alternatives, so nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'id' and 'bookingProvider' already described as Booking ID and Booking provider ID. The description reinforces that both are needed ('using both provider and booking IDs') but does not add meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve'), names the exact resource ('one booking record from a specified booking provider'), and specifies the required identifiers (provider ID and booking ID). It clearly distinguishes itself from crm_bookings_get and the provider list route, so an agent can identify the intended operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool versus alternatives: use crm_bookings_get for the tenant-wide ID route, and use the provider list when the booking ID is unknown. This gives clear routing guidance and removes ambiguity about which sibling to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_bookings_provider_listARead-onlyIdempotent
Search one booking provider's bookings by IDs, external ID, or created and modified ranges. Returns one page and requires the provider ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited booking IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| pageSize | No | Records per page (default 50) | |
| externalId | No | External booking ID | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| bookingProvider | Yes | Booking provider ID | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context beyond that: it returns only one page and is scoped to a single booking provider. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence with no filler. It front-loads the core action and resource, then immediately states the key constraint ('requires the provider ID') and the pagination behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, annotations, and schema descriptions for most parameters, the description is adequately complete. It covers the essential provider scoping, filter categories, and one-page return behavior. It could have explicitly pointed to related booking-list tools, but this is a minor gap rather than a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 64%, so the description adds value by grouping parameters into meaningful filter categories: IDs, external ID, and created/modified date ranges. It also clarifies the role of the required bookingProvider parameter. Some parameters like page, sort, pageSize, and includeTotal are not explained in the description, but they already have schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search'), identifies the resource ('one booking provider's bookings'), and lists search dimensions (IDs, external ID, created/modified ranges). This clearly distinguishes it from siblings like crm_bookings_list, which is not provider-scoped, and crm_bookings_provider_get, which fetches provider details rather than bookings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the key precondition: 'requires the provider ID.' It also communicates the intended filtering use cases. It does not explicitly name alternatives or say when not to use this tool, but the provider-scoped context is clear enough for an agent to choose it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_contact_methods_getARead-onlyIdempotent
Retrieve one contact-method record using its parent contact UUID and contact-method UUID. Use crm_contact_methods_list to search that contact's methods when the method ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | Contact ID | |
| contactMethodId | Yes | Contact method ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds the parent-child relationship context and fallback routing, but it does not disclose additional behavioral traits such as error handling, 404 behavior, or permission requirements. This is adequate but not more than the annotations plus minimal description require.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both purposeful and front-loaded. The core operation is stated first, and the alternative routing is provided second without any filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with full parameter documentation, annotations covering safety, and an output schema present, the description is complete. An agent has everything needed to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented as 'Contact ID' and 'Contact method ID'. The description reinforces that contactId is the parent and contactMethodId is the specific method, but adds no new format, constraint, or semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a specific resource ('one contact-method record'), and the two identifying keys required (parent contact UUID and contact-method UUID). It clearly distinguishes this getter from the sibling list tool by emphasizing single-record retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool versus the alternative: use crm_contact_methods_list when the method ID is unknown. This is direct routing guidance that prevents incorrect tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_contact_methods_listARead-onlyIdempotent
Search one contact's phone, email, or other contact methods by reference, type, value, or date filters. Returns one page and requires contactId.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| type | No | Contact method type filter | |
| value | No | Contact method value filter | |
| pageSize | No | Records per page (default 50) | |
| contactId | Yes | Contact ID | |
| referenceId | No | Reference ID filter | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is established. The description adds useful behavioral detail beyond annotations: the operation returns one page and requires a contactId, and it enumerates the filter categories. This goes beyond purely restating schema or annotation data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The purpose is front-loaded, followed by the key invocation constraint (requires contactId) and the pagination behavior. Every clause carries operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter filtered list tool with an output schema and read-only annotations, the description covers the core decision factors: resource scope, filter types, required parameter, and return pagination. It does not detail sort behavior or named alternatives, but those gaps are relatively minor given the schema and sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so the schema covers most parameters, but the description adds meaning by grouping the filter parameters into 'reference, type, value, or date filters' and explicitly clarifies that contactId is required and scopes the search to one contact. It also gives semantic context to otherwise bare date-time parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Search') and a clear resource boundary: one contact's phone, email, or other contact methods. It also lists the filter dimensions (reference, type, value, date) and explicitly notes the one-page return and required contactId, which distinguishes it from broader contact list and single-contact-get siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'one contact's' combined with 'requires contactId' gives clear context for when to use this tool: when contact methods for a specific contact are needed. It does not explicitly name alternatives or exclusion criteria, but it provides enough directional context to avoid confusion with contact list/get siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_contact_relationships_listARead-onlyIdempotent
List one page of contact-to-entity relationship records for a known contact UUID, optionally filtered by related entity, type slug, type name, or creation time. Use crm_contacts_by_relationship_list for contacts associated with a known relationship ID.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| pageSize | No | Records per page (default 50) | |
| typeName | No | Relationship type name filter | |
| typeSlug | No | Relationship type slug filter | |
| contactId | Yes | Contact ID | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | List relationships created before this timestamp | |
| relatedEntityId | No | Related entity ID filter | |
| createdOnOrAfter | No | List relationships created on/after this timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavior beyond those flags by clarifying the result is a single page and that filtering by related entity, type slug, type name, or creation time is supported. This helps the agent set expectations about pagination and scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with no filler; the core action and filters are front-loaded, and the alternative tool is mentioned at the end. Every sentence carries useful routing or scoping information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, page semantics, optional filters, required contact context, and the inverse sibling tool. With output schema and full parameter descriptions available, nothing essential to correctly invoke this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents all 10 parameters. The description adds only a high-level grouping of filters (related entity, type slug, type name, creation time) rather than new format or syntax details, matching the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific action ('List one page...') and names the exact resource ('contact-to-entity relationship records') plus the required context ('known contact UUID'). It also differentiates from the inverse sibling crm_contacts_by_relationship_list, so an agent can distinguish the tool without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the primary use case: listing relationship records for a known contact UUID, with optional filters. It also names the alternative crm_contacts_by_relationship_list for the reverse lookup, giving 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.
crm_contacts_by_relationship_listARead-onlyIdempotent
Search contact records associated with a known relationship ID, with optional identity, archive, and date filters. Returns one page; use crm_contact_relationships_list to inspect the links owned by one known contact.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by contact name | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| title | No | Filter by contact title | |
| pageSize | No | Records per page (default 50) | |
| isArchived | No | Filter by archive status | |
| referenceId | No | Filter by external reference ID | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| relationshipId | Yes | Contact relationship ID | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations by stating that the tool 'returns one page' and by framing the search as scoped to a relationship ID, reinforcing the openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The main operation and scoping are front-loaded, and the sibling alternative is placed second, giving the agent the core decision information immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 13 parameters, an output schema, and strong annotations, so the description does not need to explain return values or safety. It covers the essential usage context and points to the relevant sibling for relationship-link inspection, leaving only minor gaps such as how to obtain a valid relationshipId in the first place.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 69%, so most parameters are already documented. The description groups filters into 'identity, archive, and date filters,' which adds some conceptual structure but no new per-parameter meaning beyond what the schema provides, especially for the undocumented date-time parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search'), resource ('contact records'), and required context ('known relationship ID'), and lists filter categories. It also explicitly distinguishes itself from crm_contact_relationships_list, so an agent can tell the two sibling tools apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly says to use this tool when searching contacts by relationship ID, and explicitly directs agents to crm_contact_relationships_list when the goal is to inspect links owned by one known contact. This is an explicit when/alternative distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_contacts_getARead-onlyIdempotent
Retrieve one CRM contact record by UUID, including its stored identity fields. Use crm_contacts_list to search by name, title, reference ID, archive status, or change dates.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds minimal behavioral context beyond 'Retrieve' and the mention of stored identity fields, but it does not contradict or meaningfully extend the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The primary action is stated first, and the sibling differentiation is included in the second sentence without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-parameter read tool with full schema coverage, a robust annotation set, and an output schema. The description covers the essential usage distinction, and nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single 'id' parameter clearly documented as a UUID. The description reinforces 'by UUID' but adds no new meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Retrieve'), a specific resource ('one CRM contact record by UUID'), and explicitly distinguishes itself from crm_contacts_list. This makes the tool's purpose unmistakable and clearly differentiated from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative tool, crm_contacts_list, and specifies the search criteria that should trigger using it instead. This gives an agent 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.
crm_contacts_listARead-onlyIdempotent
Search CRM contacts by name, title, reference ID, archive status, or date ranges. Returns one page; use crm_contacts_get for a known UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by contact name | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| title | No | Filter by contact title | |
| pageSize | No | Records per page (default 50) | |
| isArchived | No | Filter by archive status | |
| referenceId | No | Filter by external reference ID | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, non-destructive, idempotent, and open-world behavior, lowering the burden on the description. The description adds useful pagination behavior ('Returns one page') but does not disclose additional behaviors like default page size or how filters combine; these are partially covered by the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first sentence lists searchable dimensions, the second gives the one-page behavior and the UUID routing hint. Every clause earns its place and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, annotations, and self-describing parameter names, the description is nearly sufficient. It clearly communicates scope and the main alternative, though it does not differentiate among the many other CRM contact/list siblings like crm_contacts_by_relationship_list or crm_customers_contacts_list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, so the description is not the primary source for parameter meaning. It helps by grouping filters into categories (name, title, reference ID, archive status, date ranges) and gives semantic context to the undocumented date-time parameters, but it does not map them to specific parameter names or describe pagination/sorting controls beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Search CRM contacts') and enumerates the available filters: name, title, reference ID, archive status, and date ranges. The second sentence distinguishes it from crm_contacts_get, so an agent can immediately tell list/search behavior from single-record retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to use crm_contacts_get when a known UUID is available, which is a clear routing rule. 'Returns one page' also implies this is not a bulk-export tool, though other sibling contacts-list variants are not explicitly contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_customers_contacts_listARead-onlyIdempotent
List one page of contacts attached to a known customer. Use crm_customers_contacts_modified_list for cross-customer incremental contact queries.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Customer ID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds meaningful behavioral context by specifying that only one page is returned and that results are scoped to a single customer, which is beyond what annotations or schema alone communicate. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The primary purpose is front-loaded, and the alternative tool reference is included succinctly in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated list endpoint, the description fully covers what an agent needs to know: the resource scope, pagination behavior, and the routing decision between this and the sibling tool. With an output schema present and annotations covering safety traits, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all four parameters having clear descriptions (id, page, pageSize, includeTotal). The description's 'one page' phrase lightly reinforces pagination but adds no significant meaning beyond the schema. Per the baseline rule, a 3 is appropriate when the schema already documents parameters thoroughly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('contacts attached to a known customer'), and explicitly differentiates from the sibling tool 'crm_customers_contacts_modified_list'. It clearly indicates pagination with 'one page', making the tool's scope immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent when to use this tool: to list a page of contacts for a known customer. It also explicitly names the alternative for cross-customer incremental queries, giving a clear exclusion condition. This is direct, actionable guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_customers_contacts_modified_listARead-onlyIdempotent
Search contact records across specified customers using created or modified time ranges. Returns one page; use crm_customers_contacts_list for all contacts of one known customer.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| customerIds | No | Comma-delimited customer IDs | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the description carries less safety burden. It adds useful behavioral context beyond annotations by stating the tool 'Returns one page' and that filtering is based on created or modified time ranges.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence front-loads the purpose and filter scope, and the second handles pagination and sibling routing. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, paginated search tool with annotations, an output schema, and multiple sibling tools, the description is largely complete: it covers scope, time filters, pagination behavior, and the key alternative. The main gap is that it does not explicitly state whether customerIds is required or what happens when omitted, which matters given openWorldHint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, with good descriptions for page, pageSize, customerIds, and includeTotal, but no descriptions for the four date parameters. The description provides the umbrella concept of 'created or modified time ranges' and 'specified customers', which helps map parameters to intent, but it does not detail per-parameter semantics like the difference between Before and OnOrAfter or combination constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Search') and names the exact resource ('contact records'), with scope ('across specified customers') and key filters ('created or modified time ranges'). It also explicitly distinguishes the closest sibling, crm_customers_contacts_list, by stating that sibling is for all contacts of one known customer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit alternative and the condition that selects it: use crm_customers_contacts_list for all contacts of one known customer. This implies the current tool is for cross-customer, time-filtered contact searches, leaving minimal ambiguity about when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_customers_custom_field_types_listARead-onlyIdempotent
List one page of custom-field type definitions available to customers, with created and modified date filters. This returns field metadata, not values for one customer.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the safety profile is covered. The description adds value by stating pagination ('one page') and available date filters, but it does not disclose deeper behavioral details such as default ordering, total-count behavior, or any server-side limits. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The first sentence states the action, scope, and filters; the second clarifies the return type by excluding a common misunderstanding. Both sentences earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a rich output schema, annotations, and per-parameter schema descriptions for most fields, the description covers the essential selection context: what is listed, the filters, and what the response is not. Minor gaps remain around parameter nuances, but these are mostly available in the schema, so the description is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, with the four date parameters lacking descriptions. The description partially compensates by mentioning 'created and modified date filters' and 'one page,' which maps to pagination and the date parameters. However, it does not explain sort semantics, inclusive/exclusive date behavior, or the meaning of includeTotal, leaving some burden unmet.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List one page of custom-field type definitions') and a clear resource scope ('available to customers'). It also distinguishes the tool from customer-value retrieval by noting it returns metadata, not values. However, it does not explicitly differentiate from the many sibling custom-field-type list tools (e.g., locations, jobs, invoices), though the tool name partially covers this.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: to list custom-field type definitions rather than a specific customer's field values. The clarification 'not values for one customer' is a useful exclusion, but there is no explicit guidance about alternatives or when one list variant should be preferred over another.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_customers_getARead-onlyIdempotent
Retrieve one customer record by ID, including the customer data returned by ServiceTitan. Use crm_customers_list to search by name, address, phone, external data, activity, or date ranges.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Customer ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description only needs to add extra context. The phrase 'including the customer data returned by ServiceTitan' informs the agent that the response contains the raw ServiceTitan customer payload, which is useful behavioral context beyond the annotations. It does not specify not-found behavior, but the simplicity of the tool and presence of an output schema reduce that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences accomplish everything: the first states the exact purpose and scope, the second directs to the correct sibling for broader searches. There is no repetition or filler, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with full annotation coverage and an output schema, the description is complete. It explains the tool's scope, points to the alternative for search scenarios, and relies on structured metadata for safety and return-type information. An agent has enough information to invoke this tool correctly without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single 'id' parameter with 100% coverage, so the description need not repeat parameter details. The phrase 'by ID' adds no new semantic information beyond the schema. A baseline score of 3 is appropriate when the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and resource ('one customer record by ID'), clearly stating what the tool does. It also implicitly differentiates from crm_customers_list, which is framed as the search-by-attributes alternative, making the tool's unique role clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to crm_customers_list for searching by name, address, phone, external data, activity, or date ranges, establishing exactly when to use the alternative. It implies that crm_customers_get is for direct ID-based lookup, providing clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_customers_listARead-onlyIdempotent
Search customers by IDs, name, address, phone, coordinates, external data, activity, or created and modified ranges. Returns one page; use crm_customers_get for a known ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited customer IDs | |
| zip | No | Filter by zip | |
| city | No | Filter by city | |
| name | No | Filter by name | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| unit | No | Filter by unit | |
| phone | No | Filter by contact phone | |
| state | No | Filter by state | |
| active | No | Filter by active status | True |
| street | No | Filter by street | |
| country | No | Filter by country | |
| latitude | No | Filter by latitude | |
| pageSize | No | Records per page (default 50) | |
| longitude | No | Filter by longitude | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| externalDataKey | No | External data key | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| externalDataValues | No | External data values | |
| externalDataApplicationGuid | No | External data application GUID | |
| excludeAccountingChangesFromModifiedDateRange | No | Exclude accounting-only changes from modified date filters |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by noting pagination ('Returns one page') and the distinction from a direct get, but it does not disclose other behavior such as defaults or response structure, which is partly covered by the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the tool's purpose and followed by direct routing guidance. Every clause earns its place; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 24-parameter search tool with an output schema and strong annotations, the description gives enough orientation: it summarizes searchable dimensions, clarifies pagination, and points to the right sibling for known IDs. It does not mention sorting or defaults, but those are already specified in the input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents most parameters. The description adds a useful high-level grouping of filter categories, especially covering the otherwise undocumented date-range parameters as 'created and modified ranges,' but it does not deepen individual parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific verb 'Search customers' and enumerates the key search dimensions (IDs, name, address, phone, coordinates, external data, activity, created/modified ranges). It also distinguishes itself from crm_customers_get by noting this tool returns a page and should be used for search rather than known-ID lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Returns one page' and tells the agent to use crm_customers_get for a known ID, which is clear routing guidance. It does not mention bulk-export alternatives like export_customers, but the one-page statement plus sibling context is enough for most selection decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_customers_notes_listARead-onlyIdempotent
List one page of notes attached to a known customer, optionally filtered by created or modified timestamps. Requires the customer ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Customer ID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds operational context beyond that: results are paginated ('one page') and can be filtered by created/modified timestamps, plus the hard precondition of a customer ID. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action and scope are front-loaded, followed by the optional filters and the prerequisite. Every clause contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value documentation is not needed. The description covers the essential calling context: pagination, timestamp filtering, and the required customer ID. Minor gaps such as default page size and exact filter parameter names are already present in the input schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, leaving the four timestamp parameters undocumented. The description partially compensates by explaining they filter by 'created or modified timestamps' and that the ID is required, but it does not elaborate on before/on-or-after semantics or pagination defaults beyond what the schema already names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a specific resource ('notes attached to a known customer'), and the key scoping detail ('one page', 'Requires the customer ID'). It clearly distinguishes this from other list tools by tying it to customer notes, even among many sibling note-list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear prerequisite ('Requires the customer ID') and implies this is for fetching a paginated set of notes for a known customer, not a broad export or a different entity's notes. It does not explicitly name alternative tools for locations/leads/jobs notes, but the customer-specific wording makes the intended context reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_leads_getARead-onlyIdempotent
Retrieve one CRM lead record by ID, including its customer and lead details. Use crm_leads_list to search by customer, status, prospect state, location fields, or date ranges.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Lead ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, and non-destructive profile, so the description has a lower burden. It adds value by stating what the response includes ('customer and lead details') and confirming this is a single-record fetch. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences accomplish everything: the first states the tool's exact function, and the second routes to the appropriate alternative for search scenarios. There is no redundant or filler language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter getter with rich annotations and an output schema, the description is complete. It specifies the resource, the selection mechanism, the included content, and the sibling tool to use for filtered searches.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'id' parameter is documented in the schema as 'Lead ID.' The description confirms the lookup key is the ID but does not add meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') with a clear resource ('one CRM lead record by ID') and explicitly scopes the payload to 'customer and lead details.' It also distinguishes itself from crm_leads_list by pointing out that the list tool handles search scenarios.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit routing guidance: use crm_leads_list when searching by customer, status, prospect state, location fields, or date ranges, implying this tool is for fetching by ID. This clearly separates the single-record getter from the search-oriented sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_leads_listARead-onlyIdempotent
Search CRM leads by IDs, customer, status, prospect state, customer location, or created and modified ranges. Returns one page; use crm_leads_get for a known ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited lead IDs | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| status | No | Lead status | |
| pageSize | No | Records per page (default 50) | |
| customerId | No | Associated customer ID | |
| genPermUrl | No | Generate permanent URL | |
| isProspect | No | Filter by prospect state | |
| customerZip | No | Filter by customer zip | |
| customerCity | No | Filter by customer city | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| customerState | No | Filter by customer state | |
| modifiedBefore | No | ||
| withoutCustomer | No | Filter by missing customer/location | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| customerCreatedBefore | No | Customer created before timestamp | |
| customerCreatedOnOrAfter | No | Customer created on/after timestamp | |
| customerModifiedOnOrAfter | No | Customer modified on/after timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior, so the description only needs to add extra behavioral context. It adds 'Returns one page', which tells the agent about pagination behavior beyond the schema, and the phrase 'created and modified ranges' clarifies date filtering semantics. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundant words: the first states searchable dimensions, the second states pagination and the known-ID alternative. The most important usage information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a filtered read-only list endpoint, the description covers the main decision points: what it searches, that it returns one page, and when to switch to crm_leads_get. The output schema and rich parameter schema cover return and filter details, so no critical information is missing for an agent to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the schema already documents most parameters. The description adds value by grouping filters semantically (customer location, prospect state, created/modified ranges), which helps an agent map intent to the less-documented date-time and location parameters. It does not delve into each parameter, but the schema covers the remaining details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Search CRM leads'), enumerates the key filter dimensions (IDs, customer, status, prospect state, location, date ranges), and notes it returns one page, which separates it from crm_leads_get. This clearly identifies the resource and operation without relying on the tool name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly gives an alternative for a known ID ('use crm_leads_get') and indicates the list is page-based, which implies pagination for large result sets. However, it does not mention when a bulk export sibling (e.g., export_leads) would be more appropriate, so the guidance is useful but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_leads_notes_listARead-onlyIdempotent
List one page of notes attached to a known lead, optionally filtered by created or modified timestamps. Requires the lead ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Lead ID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive, so the description does not need to restate safety. It does add useful behavioral detail beyond annotations: the tool returns only 'one page' of notes and supports optional timestamp filtering. However, it does not describe ordering, pagination behavior beyond the page concept, or any response characteristics, though an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the core action and resource, then adds the filtering capability and the required lead ID. There is no repetition of schema details or annotations, and every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated, read-only list tool with an output schema and a required lead ID, the description covers the essential operational facts: it returns one page, it can filter by timestamps, and the lead ID is required. It does not mention how to navigate all pages or what happens if the lead ID is invalid, but those are secondary given the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, with page, pageSize, includeTotal, and id already described in the schema. The description adds high-level meaning for the four timestamp parameters by saying results are 'optionally filtered by created or modified timestamps,' but it does not clarify the distinctions between the before/after parameters or their boundary semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'List one page of notes attached to a known lead.' It clearly identifies both the entity type (lead) and the payload type (notes), and the 'one page' phrasing distinguishes it from tools that retrieve full note histories or lead records themselves. The requirement of a lead ID further pins down its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when you already have a lead ID and need notes attached to that lead. It does not explicitly name alternatives such as crm_customers_notes_list or dispatch_jobs_notes_list, but the resource-specific wording makes the intended use obvious enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_location_labor_types_listARead-onlyIdempotent
List one page of labor-type assignment records for specified location IDs, optionally filtered by active state or creation time. Use this to determine which labor types apply across known service locations.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: +Location/-Location or +CreatedOn/-CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| locationIds | No | Comma-delimited location IDs | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Created before timestamp | |
| createdOnOrAfter | No | Created on or after timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. The description adds value by disclosing pagination ('one page'), filtering by active state or creation time, and the location-scoped nature. It leaves slight ambiguity around behavior when locationIds is omitted, but does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, information-dense sentences with no filler. The core behavior is front-loaded, and the second sentence provides a clear use case without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full output schema, 100% parameter schema coverage, and strong annotations, the description gives sufficient orientation for a paginated read-only list. The only notable gap is the behavior when locationIds is not supplied, which openWorldHint suggests is valid but the description does not clarify.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter already has its own description. The description summarizes the main filter dimensions (location IDs, active state, creation time) but adds no deeper semantics beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('List'), a clear resource ('labor-type assignment records'), and the key scope ('for specified location IDs'), plus pagination and optional filters. It is clearly distinct from generic CRM list tools and identifies the domain without requiring the agent to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use this to determine which labor types apply across known service locations.' It provides clear context for the intended use, though it does not mention alternatives or exclusion cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_locations_contacts_listARead-onlyIdempotent
List one page of contacts attached to a known service location. Use crm_locations_contacts_modified_list for cross-location incremental contact queries.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Location ID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds 'one page' and 'known service location' context, but the pagination behavior is already implied by the page/pageSize schema and the description does not add further behavioral detail. With annotations covering the main traits, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The primary behavior and scope are front-loaded in the first sentence, and the alternative tool is clearly separated in the second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the detailed input schema, rich annotations, and presence of an output schema, the description is complete for this simple read-only list tool. It states the core purpose, scopes the result to one page, and names the one sibling an agent might confuse it with.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters have full descriptions in the input schema, including location ID, page, pageSize, and includeTotal. The tool description itself adds no parameter-level meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), a clearly scoped resource ('contacts attached to a known service location'), and a precise pagination scope ('one page'). It also differs from the sibling crm_locations_contacts_modified_list by naming that tool's cross-location incremental purpose, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative tool and the condition for using it: cross-location incremental contact queries. This implies this tool is for single-location, non-incremental page-based listing, giving the agent clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_locations_contacts_modified_listARead-onlyIdempotent
Search contact records across specified locations using created or modified time ranges. Returns one page; use crm_locations_contacts_list for all contacts of one known location.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| locationIds | No | Comma-delimited location IDs | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only/idempotent/non-destructive behavior. The description adds behavioral context by stating the one-page return and the time-range filtering behavior. It does not detail inclusivity/timezone semantics, but those are not promised by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the main behavior, pagination caveat, and sibling alternative, all front-loaded. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema and annotations cover return shape and safety, and the description covers pagination and the main alternative. The only minor gaps are whether locationIds is effectively required and exact inclusivity of the time filters, so not a perfect 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers page, pageSize, locationIds, and includeTotal, leaving four date params with only format. The description supplies the umbrella meaning ('created or modified time ranges') but does not detail each date filter's boundary semantics; names are reasonably self-explanatory. This is adequate but not rich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search') plus resource ('contact records') and scoping ('across specified locations... created or modified time ranges'). It names the sibling it is not (crm_locations_contacts_list) and notes the one-page return, making the tool's role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes to crm_locations_contacts_list when the need is all contacts of one known location, and makes clear this tool is for time-range-filtered, location-scoped search. It also warns that only one page is returned, which is key for choosing pagination.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_locations_custom_field_types_listARead-onlyIdempotent
List one page of custom-field type definitions available to locations, with created and modified date filters. This returns field metadata, not values for one location.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is established. The description adds useful behavioral context by clarifying that this returns metadata rather than values and that it returns a single page. However, it does not disclose pagination behavior details or response shape beyond what the output schema would provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core action and resource, then adds a precise clarifying disclaimer. Every sentence contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, paginated list with an output schema, the description is sufficiently complete: it names the resource, the one-page behavior, the date filters, and the key disambiguation from value-level data. It does not need to describe return values because an output schema is present. A small enhancement would be naming an alternative tool for value lookup, but this is not a critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers half of the parameters with descriptions; page, sort, pageSize, and includeTotal are already explained structurally. The description adds only a general reference to 'created and modified date filters,' which loosely covers the four undocumented date parameters without detailing their before/on-or-after semantics. This provides minimal compensation for the 50% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: listing custom-field type definitions available to locations. It adds the important disambiguation 'This returns field metadata, not values for one location,' which prevents confusion with location value retrieval. It does not explicitly name a sibling tool for comparison, but the resource scope is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need location-level custom-field type metadata or a paginated list with date filters. It draws a boundary by saying it returns metadata rather than values, but it does not name an alternative tool or provide explicit when-not-to-use conditions. Usage context is present but left mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_locations_getARead-onlyIdempotent
Retrieve one service-location record by ID, including its customer and address data. Use crm_locations_list to search by customer, address, external data, activity, or date ranges.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Location ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the read-only, idempotent, non-destructive nature of the operation. The description adds that the response includes customer and address data, which is a useful behavioral detail. However, with an output schema present and annotations covering the safety profile, this is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, and no filler. The alternative-tool guidance is delivered efficiently without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read operation with strong annotations and an output schema, the description provides enough context to call it correctly. It also names the key sibling for search scenarios, completing the decision context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single 'id' parameter is already described as 'Location ID'. The description's reference to retrieving by ID reinforces but does not meaningfully extend the schema semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve'), identifies the resource ('one service-location record by ID'), and clarifies the included data ('customer and address data'). It also distinguishes itself from crm_locations_list by noting the difference between fetching by ID and searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes agents to the alternative crm_locations_list for search-by-customer, address, external data, activity, or date ranges. This clearly defines when this tool is appropriate (single-record retrieval by ID) and when it is not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_locations_listARead-onlyIdempotent
Search service locations by IDs, customer, name, address, coordinates, external data, activity, or date ranges. Returns one page; use crm_locations_get for a known ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited location IDs | |
| zip | No | Filter by zip | |
| city | No | Filter by city | |
| name | No | Filter by location name | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| unit | No | Filter by unit | |
| state | No | Filter by state | |
| active | No | Filter by active status | True |
| street | No | Filter by street | |
| country | No | Filter by country | |
| latitude | No | Filter by latitude | |
| pageSize | No | Records per page (default 50) | |
| longitude | No | Filter by longitude | |
| customerId | No | Filter by customer ID | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| externalDataKey | No | External data key | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| externalDataValues | No | External data values | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, and non-destructive behavior, so the description only needs to add context beyond that. It adds useful operational detail by stating 'Returns one page', which tells the agent that results are paginated and that repeated calls may be needed for full result sets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences that front-load the action and scope, then add the one-page behavior and the sibling alternative. Every sentence contributes useful information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search endpoint with well-described parameters and an output schema, the description covers the key behavioral points: it searches locations, returns one page, and routes known-ID lookups to crm_locations_get. The annotations handle safety semantics, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high, but the description meaningfully groups the 23 parameters into categories like address, coordinates, external data, and date ranges. It also covers the four date-time parameters that lack schema descriptions, helping the agent understand their intended use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear action ('Search service locations') and lists the filter dimensions, making the resource and operation unambiguous. It also distinguishes the tool from crm_locations_get by noting that the get variant is for a known ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly identifies when to prefer crm_locations_get ('for a known ID') and frames this tool as a one-page search, which is the key decision an agent needs to choose between the closest alternatives. Other siblings are either unrelated or clearly export-focused.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crm_locations_notes_listARead-onlyIdempotent
List one page of notes attached to a known service location, optionally filtered by created or modified timestamps. Requires the location ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Location ID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral details beyond those: it returns only one page of notes, can be filtered by created or modified timestamps, and requires a known location ID. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no redundant wording. It front-loads the primary purpose, then adds the key prerequisite. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with comprehensive annotations and an output schema, the description covers the essential operational context: what is listed, pagination scope, optional filters, and the required location ID. It could additionally have mentioned the timestamp parameter names, but the schema and intuitive naming largely fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, leaving the four date-time filter parameters undocumented in the schema. The description partially compensates by noting that filtering is by 'created or modified timestamps,' which groups those parameters semantically. However, it does not explain before/on-or-after semantics or the pagination parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a precise resource ('notes attached to a known service location') and states the core behavior: one page, optional timestamp filters. It clearly distinguishes this from sibling note-list tools by anchoring to service locations and requiring a location ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when the target is a service location and you have its ID. It also states a clear prerequisite ('Requires the location ID'). However, it does not explicitly contrast this with sibling tools like crm_customers_notes_list or crm_leads_notes_list, 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.
dispatch_appointments_getARead-onlyIdempotent
Retrieve one appointment record by ID, including its dispatch and scheduling data. Use dispatch_appointments_list to search by job, customer, technician, status, start time, or other filters.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Appointment ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered by structured data. The description adds the specific return scope ('including its dispatch and scheduling data') and the single-record behavior, which is useful but not deeply detailed beyond the annotations and output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two purposeful sentences with no filler. The primary action is stated first, and the alternative tool is mentioned in the second sentence without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-ID lookup with one required parameter, comprehensive annotations, an output schema, and clear sibling differentiation, the description is complete. Nothing an agent needs to choose and invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single 'id' parameter is self-explanatory as 'Appointment ID'. The description does not add parameter-level detail, but the schema already fully documents it, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves one appointment record by ID, and explicitly notes it includes dispatch and scheduling data. It differentiates itself from dispatch_appointments_list, which is the search-oriented sibling, so an agent can identify the correct tool without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: use this tool for single-record lookup by ID, and use dispatch_appointments_list for filtered searches across multiple criteria. This is a clear when-to-use vs. alternative explanation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_appointments_listARead-onlyIdempotent
Search appointments by IDs, job, project, customer, technician, status, start range, or created and modified ranges. Returns one page; use dispatch_appointments_get for a known ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated appointment IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| jobId | No | Filter by job ID | |
| number | No | Filter by appointment number | |
| status | No | Filter by appointment status | |
| unused | No | Return unused appointments only | |
| pageSize | No | Records per page (default 50) | |
| projectId | No | Filter by project ID | |
| customerId | No | Filter by customer ID | |
| includeTotal | No | Include total count in response | |
| startsBefore | No | Return appointments starting before this UTC timestamp | |
| technicianId | No | Filter by assigned technician ID | |
| createdBefore | No | Return appointments created before this UTC timestamp | |
| modifiedBefore | No | Return appointments modified before this UTC timestamp | |
| startsOnOrAfter | No | Return appointments starting on or after this UTC timestamp | |
| createdOnOrAfter | No | Return appointments created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return appointments modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is read-only, idempotent, and non-destructive. The description adds value by disclosing that results are paginated ('Returns one page'), which is a genuine behavioral trait beyond the annotations. It does not introduce contradictions or hidden side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that names the tool's purpose, enumerates its major filters, and gives routing advice. Every element earns its place, with no wasted words or redundant restating of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich 18-parameter schema, the output schema, and annotations covering safety and idempotency, the description is complete for a list tool. It covers pagination, known-ID routing, and the core search dimensions, leaving no significant gap for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented. The description provides a useful high-level summary of filters, but it does not add semantics beyond what the schema already states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Search appointments') and a clear resource, listing the main filter dimensions (IDs, job, project, customer, technician, status, dates). It differentiates itself from the sibling dispatch_appointments_get by explicitly directing known-ID lookups to that tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: this is a search/list tool that returns one page. It explicitly names an alternative for a known ID (dispatch_appointments_get), helping an agent decide between the two related appointment tools. This is sufficient guidance for the search-vs-single-get decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_arrival_window_configuration_getARead-onlyIdempotent
Retrieve the tenant-wide arrival-window configuration as one unpaged response. It returns scheduling configuration rather than an individual window; use dispatch_arrival_windows_get or list for window definitions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond annotations: the response is unpaged and represents configuration rather than individual window records.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The primary action and scope are front-loaded, and the distinction from sibling tools is stated efficiently and clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with an output schema and strong annotations, the description covers everything an agent needs: what the tool returns, the scope (tenant-wide, unpaged), and how to route to sibling tools for window-level details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema coverage is 100%, so there is nothing for the description to explain. With no parameters, the baseline is 4 and the description appropriately omits parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb ('Retrieve'), resource ('tenant-wide arrival-window configuration'), and scope ('one unpaged response'). It explicitly distinguishes this from returning an individual window by naming the sibling tools for window definitions, so an agent can disambiguate without inspecting other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool: to retrieve the tenant-wide scheduling configuration, not window definitions. It also names the exact alternatives, dispatch_arrival_windows_get or dispatch_arrival_windows_list, and the condition for choosing them, providing clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_arrival_windows_getARead-onlyIdempotent
Retrieve one arrival-window definition by ID, including its time span and applicable business units. Use dispatch_arrival_windows_list to browse by active state or creation time.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Arrival window ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral/return context by stating the retrieved object includes the time span and applicable business units, which is not visible from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary capability and key identifier are stated first, and the sibling routing follows naturally. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single required parameter, full schema coverage, strong annotations, and an output schema, the description provides sufficient context for correct invocation. It also names the relevant sibling for browsing, making the tool's role in the family clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the single 'id' parameter is already documented as 'Arrival window ID.' The description only reinforces that retrieval is 'by ID' and does not add new semantic detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('Retrieve'), a specific resource ('one arrival-window definition by ID'), and adds the useful scope 'including its time span and applicable business units.' It is clearly distinct from the sibling dispatch_arrival_windows_list, which serves a different browsing purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names dispatch_arrival_windows_list as the alternative and tells the agent when to use it: 'to browse by active state or creation time.' This gives clear routing guidance without requiring the agent to inspect sibling schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_arrival_windows_listARead-onlyIdempotent
List one page of arrival-window definitions, optionally filtered by active state or creation time. Each record supplies a configured window and applicable business units; use dispatch_arrival_windows_get for a known ID.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful context beyond annotations: paginated one-page behavior, filterable by active state or creation time, and the fact that each record includes a configured window and business units.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with no filler. The core action and filters are front-loaded, and the second sentence adds record content plus the routing alternative, all earning their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a paginated list tool: it covers purpose, filtering options, record contents, and the correct sibling for known-ID retrieval. With output schema available and annotations covering safety, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter. The description summarizes filters as 'active state or creation time' but adds no deeper meaning beyond what parameter descriptions already provide, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('arrival-window definitions'), with clear scope: one page, optional filters, and record content. It explicitly distinguishes itself from dispatch_arrival_windows_get by directing known-ID lookups to that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative and the condition for using it: 'use dispatch_arrival_windows_get for a known ID.' This tells the agent when not to use this list tool and where to route instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_call_reasons_listARead-onlyIdempotent
List one page of dispatch call-reason catalog entries, filtered by active state or created and modified ranges. Use these IDs when a workflow requires a call reason.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral detail beyond annotations by clarifying that the tool returns only one page and supports filtering by active state and created/modified ranges.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each earning its place: the first states the action and filtering capabilities, the second explains practical ID usage. No redundant wording or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, optional-parameter list tool with a full input schema and an output schema, the description covers the core purpose, filtering options, and intended use. It is slightly terse about how these call reasons relate to job cancel/hold reasons, but the tool name and sibling list provide enough context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with every parameter documented in the input schema. The description paraphrases the active-state and date-range filters but does not add syntactic or format details beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('dispatch call-reason catalog entries'), and a scope ('one page', filtered). It also communicates that the tool returns IDs to be reused, which distinguishes it from generic list endpoints and from sibling reason-list tools like dispatch_job_cancel_reasons_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use the tool: 'Use these IDs when a workflow requires a call reason.' It does not explicitly contrast with alternatives such as cancel/hold reason lists, but the practical use case is clear enough to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_forms_listARead-onlyIdempotent
Search dispatch form definitions by IDs, name, publication status, active state, conditional logic, triggers, and date ranges. Returns one page of form metadata; use dispatch_form_submissions_list for completed or pending submissions.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated form IDs (maximum 50) | |
| name | No | Filter by form name | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, ModifiedOn, Name | |
| active | No | Filter by active status | True |
| status | No | Filter by form publication status | |
| pageSize | No | Records per page (default 50) | |
| hasTriggers | No | Filter forms by trigger usage | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return forms created before this UTC timestamp | |
| modifiedBefore | No | Return forms modified before this UTC timestamp | |
| createdOnOrAfter | No | Return forms created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return forms modified on or after this UTC timestamp | |
| hasConditionalLogic | No | Filter forms by conditional logic usage |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and open-world behavior. The description adds the useful runtime behavior that it returns one page of form metadata, which informs pagination expectations without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry all necessary information: the first defines scope, the second adds pagination behavior and the sibling alternative. There is no filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the detailed 14-parameter schema, 100% schema coverage, output schema presence, and safety annotations, the description covers the behavioral essentials not in structured fields: the single-page nature and the correct sibling for submissions. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter has a clear description and type/default/enum where relevant. The description's mention of filter categories mostly restates the schema, so it adds little parameter meaning beyond a helpful summary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Search' and the resource 'dispatch form definitions', then enumerates the key filter dimensions (IDs, name, status, active, conditional logic, triggers, date ranges). It also distinguishes itself from dispatch_form_submissions_list, so an agent can differentiate the tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly scopes use to searching form definitions and explicitly routes submission-related lookups to dispatch_form_submissions_list. This gives an agent a concrete when-to-use/when-not-to-use decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_form_submissions_listARead-onlyIdempotent
Search submitted form records by form, creator, status, owner expression, submitted range, or active state. Returns one page; use this for submission results rather than form definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, SubmittedOn, CreatedBy | |
| active | No | Filter by active status | True |
| owners | No | Owner query expression used by ServiceTitan submissions endpoint | |
| status | No | Submission status filter | |
| formIds | No | Comma-separated form IDs | |
| pageSize | No | Records per page (default 50) | |
| ownerType | No | Owner type filter | |
| createdById | No | Creator user ID | |
| includeTotal | No | Include total count in response | |
| submittedBefore | No | Return submissions submitted before this UTC timestamp | |
| submittedOnOrAfter | No | Return submissions submitted on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=true, destructiveHint=false, idempotentHint=true). The description adds one useful behavioral fact: 'Returns one page'. It does not disclose additional behavioral details like default active filtering or pagination semantics, but those are covered by the schema. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and resource, followed by a useful pagination note and a clear differentiation from form definitions. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter read-only list tool with full schema coverage and an output schema, the description is adequately complete: it names the entity, the filter families, the one-page behavior, and the key distinction from form definitions. It could mention the exact sibling for form definitions or pagination strategy, but these are not critical gaps given the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description summarizes the main filter categories (form, creator, status, owner expression, submitted range, active state), which maps to the schema parameters, but it adds no syntax, defaults, or relationship details beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search submitted form records', and lists concrete filter dimensions (form, creator, status, owner expression, submitted range, active state). It also distinguishes this tool from form-definition tools by stating 'use this for submission results rather than form definitions', matching the sibling dispatch_forms_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage context: it is for submission results, not form definitions. It could name the alternative tool explicitly (e.g., dispatch_forms_list), but the conceptual exclusion is enough for an agent to orient itself among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_images_getARead-onlyIdempotent
Request image response data for a ServiceTitan storage path. The upstream Pricebook image operation documents an HTTP 302 redirect; this wrapper returns the client-decoded response body through its standard JSON/text envelope, without exposing the redirect Location header. Supply the known path when targeting an image; use dispatch_jobs_list_attachments to discover job attachments.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Storage path of the image to retrieve |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover read-only/idempotent/non-destructive, and the description adds meaningful behavior beyond that: the upstream HTTP 302 redirect is followed, the Location header is not exposed, and the response is returned through a standard JSON/text envelope. This is useful operational context, though 'standard envelope' is left somewhat generic.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, redirect/envelope behavior, and sibling routing. The most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read operation with an output schema and rich annotations, the description covers the operation's purpose, behavior, and how to discover valid paths. It is slightly generic about where 'known path' values originate beyond job attachments, but enough context is provided for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single path parameter, so the schema already documents it. The description reinforces that a known path should be supplied when targeting an image, but it doesn't add format, encoding, or error details; with complete schema coverage this meets the baseline without adding extra nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the specific operation ('Request image response data for a ServiceTitan storage path') and the wrapper's decoded-envelope behavior, and distinguishes it from dispatch_jobs_list_attachments. An agent can determine what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use the tool ('Supply the known path when targeting an image') and explicitly directs agents to dispatch_jobs_list_attachments when discovery of job attachments is needed. This gives clear routing among the large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_installed_equipment_attachments_getARead-onlyIdempotent
Request an installed-equipment attachment by its ServiceTitan storage path. Returns the client-decoded attachment response; the pinned API does not define a response-body schema. Supply the exact known path; use dispatch_installed_equipment_get for the equipment record itself.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Storage path for a previously-uploaded attachment |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe read-only, idempotent operation. The description adds useful behavioral context: the response is client-decoded, and the pinned API defines no response-body schema. This sets appropriate expectations without relying solely on structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three focused sentences with no fluff. It front-loads the core purpose, then explains the response behavior and the relevant sibling alternative. Every sentence contributes necessary guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter, rich annotations, an output schema, and a clear sibling distinction, the description is nearly complete. It could be slightly more explicit about error behavior for invalid paths, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'path' is already fully described in the schema as 'Storage path for a previously-uploaded attachment.' The description reinforces that the path must be exact, which is useful, but the schema carries most of the parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool requests an installed-equipment attachment using a ServiceTitan storage path. It distinguishes itself from the related sibling dispatch_installed_equipment_get, so an agent can immediately tell what resource this tool operates on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs the agent to supply the exact known path and points to dispatch_installed_equipment_get as the correct tool when the equipment record itself is needed. This gives clear routing guidance and prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_installed_equipment_getARead-onlyIdempotent
Retrieve one installed-equipment record by ID, including its location and equipment details. Use dispatch_installed_equipment_list to search by location, IDs, active state, or date ranges.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Installed equipment ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the response scope ('including location and equipment details') but does not add extra behavioral context like error behavior, authorization needs, or open-world implications. Given the strong annotations, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two purposeful sentences: the first states the action and scope, the second routes to the correct sibling tool. No filler, no repetition of schema or annotation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only getter with an output schema and rich annotations, the description fully covers what an agent needs to select and invoke it correctly. It identifies the operation, the ID input, the response scope, and the alternative list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the only parameter 'id' is already documented with a description ('Installed equipment ID'). The description reinforces that the lookup is by ID but adds no new semantic detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') with a clear resource ('one installed-equipment record by ID') and states the included details (location and equipment). It clearly distinguishes this tool from dispatch_installed_equipment_list by positioning that sibling as the search-oriented alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use the sibling tool instead: 'Use dispatch_installed_equipment_list to search by location, IDs, active state, or date ranges.' This gives a direct alternative and its selection criteria, leaving no ambiguity about when to choose this getter over the list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_installed_equipment_listARead-onlyIdempotent
Search installed-equipment records by IDs, location IDs, active state, or created and modified ranges. Returns one page; use dispatch_installed_equipment_get for a known ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated installed equipment IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| locationIds | No | Comma-separated location IDs to include | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description's additional disclosure that it 'returns one page' is valuable behavioral context beyond the structured metadata. It also implicitly warns against expecting a full dataset in a single call, which is useful for agent planning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core purpose and search dimensions, then ends with the necessary pagination caveat and sibling routing. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and comprehensive parameter descriptions in the schema, the description covers the essential selection and invocation context: what it searches, that it is paginated, and when to prefer the get variant. It lacks explicit guidance about bulk export alternatives, but that is a minor gap given the tool's clear search orientation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the schema carries the parameter meaning. The description restates the main filter categories but adds no syntax, defaults, or format details beyond what the schema already provides. This meets the baseline for well-documented schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches installed-equipment records with specific filter dimensions (IDs, location IDs, active state, created/modified ranges). It also names the sibling dispatch_installed_equipment_get for known-ID lookups, so an agent can distinguish them without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to use dispatch_installed_equipment_get when a known ID is available, which is a precise when-not-to-use-this-tool signal. It also frames this tool as a search-and-paginate operation, making its role among the sibling list tools clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_job_cancel_reasons_listARead-onlyIdempotent
Browse the paginated job-cancellation-reason catalog using active and date filters. Use dispatch_jobs_cancel_reasons_list instead only to look up a supplied set of known reason IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that this is a paginated browse with active/date filters, which is useful context but largely mirrors what the schema already communicates. There is no contradictory behavioral claim.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary purpose is front-loaded, and the sibling distinction is stated efficiently in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated list tool with rich schema descriptions and an output schema, the description is sufficient. It tells the agent what the tool does, how it filters, and when to choose the sibling instead. Nothing critical for tool selection or invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even without parameter info in the description. The description groups the parameters as 'active and date filters,' which provides a useful framing but does not add meaning beyond the schema's per-field descriptions. No parameter information is missing from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: browsing the paginated job-cancellation-reason catalog with active and date filters. It explicitly distinguishes this tool from the sibling dispatch_jobs_cancel_reasons_list, which is for looking up known reason IDs. The verb 'Browse' and the resource 'job-cancellation-reason catalog' make the scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage direction: use this tool for catalog browsing/filtering, and use dispatch_jobs_cancel_reasons_list instead only when you have a supplied set of known reason IDs. This directly routes the agent between two closely named siblings and leaves little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_job_hold_reasons_listARead-onlyIdempotent
List one page of job-hold-reason catalog entries, filtered by active state or created and modified ranges. Returned records provide reason IDs and metadata used when placing a job on hold; they are distinct from cancellation reasons.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to restate those. It adds useful context about pagination ('one page'), filtering by active state and date ranges, and the purpose of returned records, which goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with no filler. The primary action and scope are front-loaded, followed by filter capabilities and the key distinction from cancellation reasons. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation, the description is complete: it identifies the resource, the business purpose, the filtering dimensions, and the distinction from related catalogs. The 100% schema coverage, rich annotations, and output schema remove the need for additional detail in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all 9 parameters, so the schema already documents each parameter clearly. The description only loosely summarizes filtering ('active state or created and modified ranges') without adding new parameter-level meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a clear resource ('job-hold-reason catalog entries'), and it notes they are 'distinct from cancellation reasons,' which helps separate this tool from the similarly named cancellation-reason siblings in the surrounding tool list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when the tool is relevant: retrieving reason IDs and metadata for placing a job on hold. It also excludes cancellation reasons, preventing confusion with dispatch_job_cancel_reasons_list, though it does not explicitly name alternate sibling tools or state 'use X instead.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_jobs_booked_log_getARead-onlyIdempotent
Retrieve booking-log details for a known job ID as one unpaged audit resource. Use dispatch_jobs_get for the current job record rather than its booking audit data.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Job ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe, read-only, idempotent operation. The description adds useful context by specifying this is an unpaged audit resource, telling the agent not to expect pagination and that the data is historical booking-log detail rather than the live job record.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The primary retrieval purpose is stated first, and the routing guidance to the sibling tool is placed second, making the most important information immediately visible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with rich annotations and an output schema, the description fully covers what the tool does, the nature of the returned data, and how to choose between this tool and the closely related sibling. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the sole parameter 'id' as 'Job ID' with 100% coverage. The description's phrase 'known job ID' reinforces that the caller must already have the ID, but adds little meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Retrieve') and resource ('booking-log details for a known job ID'), and clarifies the output is 'one unpaged audit resource.' This clearly differentiates it from the sibling dispatch_jobs_get, which returns the current job record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to use dispatch_jobs_get when the current job record is needed rather than booking audit data. This is a clear when-to-use versus alternative directive, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_jobs_canceled_logs_listARead-onlyIdempotent
List one page of cancellation log entries for a known job ID. Use this for cancellation audit details rather than the current job or cancellation-reason catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Job ID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds that this returns one page of historical cancellation audit entries for a specific job, but does not disclose ordering, empty-result behavior, or pagination details beyond 'one page'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences front-load the core operation and usage guidance, with no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, paginated, read-only list operation, the description plus input schema and annotations are sufficient. Since an output schema exists, the description does not need to explain return values, and no critical calling information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100% and every parameter (id, page, pageSize, includeTotal) already has a description. The tool description adds little beyond 'known job ID', so it does not meaningfully improve on the schema's parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource—'List one page of cancellation log entries for a known job ID'—and clearly differentiates from current-job data and cancellation-reason catalogs. An agent can tell what this tool does without needing to inspect the schema or infer from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit usage context: 'Use this for cancellation audit details rather than the current job or cancellation-reason catalog.' This clearly scopes when to use it, though it does not explicitly name the alternative sibling tools such as export_job_canceled_logs for bulk or unpaginated exports.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_jobs_cancel_reasons_listARead-onlyIdempotent
Look up job cancellation reasons for a supplied list of known IDs. This non-paginated Jobs endpoint is distinct from dispatch_job_cancel_reasons_list, which browses and filters the reason catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated cancel reason IDs (maximum 50) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe read-only, idempotent, non-destructive profile. The description adds the meaningful behavioral trait that this endpoint is non-paginated, which is useful context for an agent deciding how to handle results. This goes beyond what the annotations alone communicate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences front-load the core purpose, then immediately add the distinguishing non-pagination and sibling-tool information. Every sentence earns its place with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, output-schema-backed lookup tool with comprehensive annotations, the description is complete. It explains the lookup scope, the non-paginated behavior, and the difference from the nearest sibling, leaving no critical information missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents that 'ids' is a comma-separated list of cancel reason IDs with a maximum of 50. The description's phrase 'known IDs' reinforces the lookup semantics but adds no new parameter details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('look up'), a clear resource ('job cancellation reasons'), and a clear input mode ('for a supplied list of known IDs'). It also explicitly distinguishes itself from the similarly named sibling dispatch_job_cancel_reasons_list, so an agent can reliably tell the two apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: use this endpoint to look up known cancellation reason IDs. It also names the alternative catalog-browsing endpoint and contrasts it ('browses and filters the reason catalog'), effectively telling the agent 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.
dispatch_jobs_custom_field_types_listARead-onlyIdempotent
List one page of custom-field type definitions available to jobs, with created and modified date filters. This returns field metadata, not values for one job.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, ModifiedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds useful context about pagination ('one page') and clarifies it returns metadata rather than field values, which goes beyond the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. The main purpose is front-loaded, and the clarifying 'metadata, not values' detail earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With complete schema descriptions, an output schema, and safety-relevant annotations present, the description adequately covers the tool's behavior. Nothing essential for an agent to select and invoke it correctly appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents every parameter. The description's mention of 'created and modified date filters' and 'one page' aligns with the parameters, but adds little semantic value beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists custom-field type definitions available to jobs, using a specific verb and resource. It also distinguishes itself from returning values for one job, and the 'available to jobs' qualifier differentiates it from sibling custom-field type list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys clear usage context: use this to list job custom-field type definitions with optional created/modified filters. It does not explicitly name excluded alternatives, but the job-specific scope and 'metadata, not values' clarification give adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_jobs_equipment_getARead-onlyIdempotent
Retrieve the installed-equipment ID collection attached to a known job as one unpaged response. Use dispatch_installed_equipment_get or list to fetch the equipment records themselves.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Job ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds useful behavioral context beyond those: the response is 'one unpaged response' and contains only installed-equipment IDs tied to the job. It does not cover invalid-job behavior or empty collections, but the output schema mitigates that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences carry the entire definition: the first states the resource and key unpaged behavior, the second routes to alternatives. There is no filler or repetition of schema/annotation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool with rich annotations and an existing output schema, the description covers everything needed: what is returned (ID collection), the response behavior (unpaged), the required scope (a known job), and how to obtain full records via sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'id' parameter, which the schema already documents as 'Job ID'. The description adds the context that the job must be 'known', but it does not materially extend the parameter semantics beyond what the schema provides, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') with a precise resource ('installed-equipment ID collection') scoped to a known job. It also explicitly distinguishes itself from dispatch_installed_equipment_get/list by clarifying that this tool returns only the ID collection, not the equipment records themselves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence explicitly names the alternatives (dispatch_installed_equipment_get or list) and tells the agent to use them when the equipment records themselves are needed. This provides clear routing between this tool and its closest siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_jobs_getARead-onlyIdempotent
Retrieve one job record by ID, optionally scoped to an external-data application. Returns the current ServiceTitan job data; use dispatch_jobs_list to search by customer, location, status, dates, or other filters.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Job ID | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, and the description adds context: it returns current job data and may be scoped to an external-data application. No contradiction with annotations; the only missing behavior details (errors, auth) are not critical for this simple read operation with an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action and resource are front-loaded, and the alternative tool guidance is included in the same sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-record lookup with two parameters, full schema coverage, a safety profile already in annotations, and an output schema, the description covers purpose, usage, and parameter semantics sufficiently. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters. The description adds the contextual idea of optional scoping, but no new syntax or format details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve'), names the resource ('one job record by ID'), and notes optional scoping. It also distinguishes itself from dispatch_jobs_list, so an agent can select it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent to call dispatch_jobs_get for ID-based single-record retrieval and explicitly redirects to dispatch_jobs_list for searching by customer, location, status, dates, or other filters. This is explicit when-to-use guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_jobs_get_attachmentARead-onlyIdempotent
Retrieve one job-attachment resource from Forms v2 by attachment ID. Use dispatch_jobs_list_attachments to browse attachment metadata for a known job when the attachment ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Job attachment ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context about the Forms v2 source and single-resource scope, but it does not disclose any deeper behavioral details such as return format or content type. This is adequate but not rich beyond what annotations and schema supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the action and scope, and the second sentence provides a useful sibling routing. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only retrieval tool with a full input schema and output schema present, the description provides enough context: resource type, source system, lookup key, and an alternative for the unknown-ID case. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single required parameter 'id' already described as 'Job attachment ID'. The description repeats the 'attachment ID' concept but does not add meaningful extra parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve'), names the exact resource ('one job-attachment resource from Forms v2'), and states the lookup key ('by attachment ID'). It clearly distinguishes this get-by-ID tool from the sibling browse tool, dispatch_jobs_list_attachments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes the agent to the alternative when the attachment ID is unknown: 'Use dispatch_jobs_list_attachments to browse attachment metadata for a known job when the attachment ID is unknown.' This makes the when-to-use versus when-not-to-use decision explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_jobs_history_getARead-onlyIdempotent
Retrieve the history response for a known job ID as one unpaged audit resource. Use dispatch_jobs_get for the current job record rather than its historical changes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Job ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds meaningful behavioral context by noting the response is a single unpaged audit resource, which conveys pagination behavior and the historical nature of the data beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The primary purpose is front-loaded, and the comparison with dispatch_jobs_get is both relevant and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with an output schema and comprehensive annotations, the description provides all necessary context. It explains the resource, the singular unpaged nature, and the alternative tool, leaving no significant gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the only parameter, 'id', as 'Job ID' with 100% coverage. The description adds little beyond referring to a 'known job ID', which only slightly reinforces that the ID must exist. This matches the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the history response for a known job ID, and identifies it as an unpaged audit resource. It distinguishes itself from dispatch_jobs_get by explicitly contrasting historical changes with the current job record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to use dispatch_jobs_get when the current job record is needed rather than historical changes. It also establishes that the tool is for a known job ID, making the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_jobs_listARead-onlyIdempotent
Search jobs by IDs, number, customer, location, project, status, appointments, equipment, tags, dates, or other supported filters. Returns one page; use dispatch_jobs_get for a known job ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated job IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn, Priority | |
| number | No | Filter by job number | |
| pageSize | No | Records per page (default 50) | |
| priority | No | Job priority filter | |
| soldById | No | Filter by selling technician ID | |
| bookingId | No | Filter by booking ID | |
| invoiceId | No | Filter by invoice ID | |
| jobStatus | No | Job status filter | |
| jobTypeId | No | Filter by job type ID | |
| projectId | No | Filter by project ID | |
| campaignId | No | Filter by campaign ID | |
| customerId | No | Filter by customer ID | |
| locationId | No | Filter by location ID | |
| tagTypeIds | No | Comma-separated tag type IDs | |
| equipmentIds | No | Comma-separated installed equipment IDs; returns jobs with at least one attached equipment item | |
| includeTotal | No | Include total count in response | |
| technicianId | No | Filter by technician ID | |
| createdBefore | No | Return items created before this UTC timestamp | |
| businessUnitId | No | Filter by business unit ID | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| completedBefore | No | Return jobs completed before this UTC timestamp | |
| externalDataKey | No | External data key | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| appointmentStatus | No | Appointment status filter | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp | |
| completedOnOrAfter | No | Return jobs completed on or after this UTC timestamp | |
| externalDataValues | No | External data values (comma-separated, maximum 50) | |
| hasUnusedAppointments | No | Return jobs with unused appointments | |
| appointmentStartsBefore | No | Return jobs with any appointment before this UTC timestamp | |
| appointmentStartsOnOrAfter | No | Return jobs with any appointment on or after this UTC timestamp | |
| externalDataApplicationGuid | No | External data application GUID | |
| firstAppointmentStartsBefore | No | Return jobs whose first appointment starts before this UTC timestamp | |
| firstAppointmentStartsOnOrAfter | No | Return jobs whose first appointment starts on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and open-world behavior, so the bar is lower. The description adds useful behavioral context by stating that the operation 'Returns one page' and noting that other supported filters exist, which aligns with the openWorldHint. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the resource and filter scope, then adds the pagination note and the alternative tool for known IDs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full parameter schema, annotations, and output schema, the description is complete enough for an agent to correctly select and invoke the tool. It covers what the tool searches, the pagination behavior, and the correct sibling for single-record lookups.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with individual descriptions for all 35 parameters, so the description does not need to compensate. It provides a helpful categorical summary of filter types, but it does not add new semantic meaning or syntax beyond what the schema already gives.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Search jobs,' and enumerates the main filter dimensions (IDs, number, customer, location, project, status, appointments, equipment, tags, dates). It also explicitly distinguishes itself from dispatch_jobs_get, which is for retrieving a known job ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly says to use dispatch_jobs_get when a known job ID is available and signals this is the paginated search variant with 'Returns one page.' It does not mention the bulk-export alternative like export_jobs, so the guidance is good but not exhaustive across all sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_jobs_list_attachmentsARead-onlyIdempotent
List one page of attachments for a known job, optionally filtered by creation time and sorted. Returned records identify files attached to that job.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn | |
| jobId | Yes | Job ID | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safe read behavior is covered. The description adds the useful 'one page' and 'identify files' context, but does not disclose additional behaviors such as error cases or relationship to attachment retrieval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no filler. The core action, scope, and return-value semantics are all present, and every sentence contributes necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the comprehensive input schema, output schema, and safety annotations, the description is sufficient for an agent to invoke the tool correctly. It clarifies that the result is one page, that records identify attachments, and that filtering/sorting are optional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters. The description paraphrases the time filters and sorting and notes a known jobId, but it does not add syntax or meaning beyond the schema, keeping it at the high-coverage baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource ('List one page of attachments for a known job'), with optional filters and sorting. It is unambiguous but does not explicitly contrast with sibling tools such as dispatch_jobs_get_attachment or dispatch_jobs_list, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear context: use this when listing attachments for an already-known job, with pagination and time filters. It does not explicitly state when not to use it or name alternatives, but the prerequisite and use case are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_jobs_notes_listARead-onlyIdempotent
List one page of notes attached to a known job. Requires the job ID; this endpoint has pagination controls but no note-content filters.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Job ID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, and non-destructive; the description adds behavioral context by stating that it returns one page and exposes pagination controls but no note-content filters. This clarifies the tool's bounds beyond what the annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence delivers the core action, necessary precondition, and key limitation without filler. Every clause contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only paginated list with a full input schema, rich annotations, and an output schema, the description is complete. It tells the agent the required identifier, the one-page behavior, and the lack of content filters, leaving nothing essential to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes all four parameters in full (100% coverage), so the description does not need to repeat parameter details. It usefully connects the required id to 'known job' and page/pageSize to 'pagination controls,' but adds no extra semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('List'), a concrete resource ('notes attached to a known job'), and a scoping constraint ('one page'). The job-ID requirement and 'no note-content filters' clearly differentiate it from sibling notes-list tools and the export_job_notes export tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to call it: with a known job ID, for a single page of notes, with only pagination controls and no content filtering. It does not explicitly name an alternative or state when not to use it, so it falls short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_job_splits_by_jobs_listARead-onlyIdempotent
Search one page of job-split records across supplied job IDs, with activity and date filters. Use dispatch_job_splits_list when working with one job-scoped route.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| jobIds | No | Comma-separated job IDs to include | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety aspects (readOnly, idempotent, non-destructive). The description adds behavioral context by noting this returns one page of results and filters across supplied job IDs, which goes beyond the static annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the purpose and immediately provide sibling differentiation. Every phrase earns its place without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, complete parameter documentation, and strong annotations, the description only needs to establish scope and routing. It does both effectively, including naming the alternative for the single-job case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 10 parameters. The description only summarizes categories like 'activity and date filters' and 'supplied job IDs' without adding parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Search one page of job-split records across supplied job IDs.' It clearly identifies the scope (multiple job IDs) and mentions filters, distinguishing it from the sibling dispatch_job_splits_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs when to use the alternative: 'Use dispatch_job_splits_list when working with one job-scoped route.' This gives the agent a clear decision rule between two closely related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_job_splits_listARead-onlyIdempotent
List one page of split records for a single required job ID, with activity and date filters. Use dispatch_job_splits_by_jobs_list to query splits across multiple jobs.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| jobId | Yes | Job ID | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context beyond those: pagination ('one page'), the required single-job scope, and available filter dimensions. This supplements rather than contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The essential scope and pagination behavior are front-loaded, and the sibling-tool differentiation is placed second for quick routing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich 100%-covered input schema, detailed annotations, and an output schema, the description provides the additional context an agent needs: pagination behavior, single-job requirement, and the multi-job alternative. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, so the schema carries the full meaning of jobId, page, sort, active, pageSize, and date filters. The description groups these as 'activity and date filters' but adds no new detail beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), names the resource ('split records'), and states a clear scope ('for a single required job ID'). It also explicitly distinguishes itself from the sibling tool dispatch_job_splits_by_jobs_list, which handles multiple jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use this tool: for one page of splits for a single required job ID. It also names the alternative tool for querying splits across multiple jobs, giving the agent an explicit routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_job_types_getARead-onlyIdempotent
Retrieve one job-type definition by ID, optionally scoped to an external-data application. Returns the configured defaults and associations for that type; use dispatch_job_types_list to search the catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Job type ID | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the useful context that the tool returns 'configured defaults and associations' and optionally scopes by external-data application, but it does not go much beyond that. This is adequate given the strong annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. The core behavior is front-loaded, and the sibling routing is included in the same concise statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-record read tool, the description, input schema, annotations, and output schema together are complete. The agent knows what the tool does, when to use it, what parameters are accepted, and what safety profile to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters already have clear descriptions in the schema. The description adds the notion of scoping to an external-data application, but this mostly mirrors the schema field rather than providing deeper semantic detail. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Retrieve one job-type definition by ID.' It also names the optional external-data-application scoping and explicitly contrasts with dispatch_job_types_list, so an agent can immediately distinguish these siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent when to use this tool (by ID lookup) and explicitly directs catalog searches to dispatch_job_types_list. This gives clear routing guidance and prevents confusion with the list sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_job_types_listARead-onlyIdempotent
Search job-type definitions by IDs, name, priority, duration, active state, external-data application, or date ranges. Returns one page of configured job types; use dispatch_job_types_get for a known ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated job type IDs (maximum 50) | |
| name | No | Filter by job type name | |
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| orderBy | No | Order by field | |
| pageSize | No | Records per page (default 50) | |
| priority | No | Priority filter | |
| maxDuration | No | Maximum duration in seconds | |
| minDuration | No | Minimum duration in seconds | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| orderByDirection | No | Order direction (asc/descending) | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds value beyond the annotations by disclosing paginated behavior ('Returns one page') and scoping the result set to 'configured job types,' which is useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the search scope and filter categories, and the second states the paginated return behavior and the correct sibling for known-ID lookups. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complete input schema, strong annotations, the presence of an output schema, and the direct pointer to dispatch_job_types_get, nothing essential is missing. The description sufficiently covers selection, safety, and pagination behavior for a list/search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented with a meaningful description. The tool description summarizes the filter dimensions but does not add much beyond what the schema provides, which fits the baseline of 3 for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') and a clear resource ('job-type definitions'), and enumerates the main filter dimensions. It also differentiates itself from dispatch_job_types_get by noting that the get variant is for a known ID, so an agent can select correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the alternative tool to use when a known ID is available: dispatch_job_types_get. It also communicates that the tool returns one page, implying it is appropriate for exploration and filtered discovery rather than direct lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_projects_custom_field_types_listARead-onlyIdempotent
List one page of custom-field type definitions available to projects, with created and modified date filters. This returns field metadata, not values for one project.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, non-destructive, and open-world. The description adds useful behavioral context beyond annotations: it returns one page, supports created/modified date filters, and returns metadata rather than project-specific values. No contradictions with annotations detected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. The primary action and resource are front-loaded, followed by the key clarification about metadata versus values. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with a full input schema and an output schema, the description is complete. It conveys pagination scope, filtering capability, and the critical metadata-versus-values distinction, while annotations cover safety and idempotency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all eight parameters. The description adds only a high-level mention of 'created and modified date filters' and 'one page', which does not go beyond what the schema already conveys. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a specific resource ('custom-field type definitions available to projects'), and key behaviors ('one page', 'created and modified date filters'). It also clarifies a common confusion by stating it returns field metadata, not values for one project. This clearly distinguishes it from value-returning project tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this is for listing project custom-field type definitions, not for retrieving field values for a specific project. It implies the appropriate use case and gives an exclusion, though it does not explicitly name alternative tools for values or for other resources such as jobs or customers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_projects_getARead-onlyIdempotent
Retrieve one project record by ID, optionally scoped to an external-data application. Returns the current project data; use dispatch_projects_list to search by customer, location, status, dates, or linked work.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Project ID | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds useful behavioral context: it returns 'the current project data' and supports optional scoping to an external-data application. It does not discuss not-found behavior, but the output schema and read-only annotations reduce the need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary action is front-loaded, optional behavior is stated, and the alternative tool is named efficiently. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-record read tool, the description covers the action, optional scoping, return nature, and the key alternative. The output schema exists, so return structure does not need to be explained here. Annotations cover the read-only and idempotent behavior, making this definition complete for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds value by explaining that externalDataApplicationGuid is an optional scope, which clarifies the relationship between the two parameters without repeating schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Retrieve one project record by ID'), states the optional scoping, and explicitly contrasts itself with dispatch_projects_list. An agent can immediately tell this tool fetches a single project by ID rather than searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to use dispatch_projects_list when searching by customer, location, status, dates, or linked work. It also clarifies the optional external-data scoping, giving clear when-to-use guidance versus the main sibling alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_projects_listARead-onlyIdempotent
Search projects by IDs, customer, location, status, type, manager, dates, or linked jobs, appointments, and invoices. Returns one page; use dispatch_projects_get for a known ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated project IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn, Name, TargetCompletionDate | |
| jobId | No | Filter by job ID | |
| status | No | Project status filter | |
| pageSize | No | Records per page (default 50) | |
| invoiceId | No | Filter by invoice ID | |
| customerId | No | Filter by customer ID | |
| locationId | No | Filter by location ID | |
| includeTotal | No | Include total count in response | |
| startsBefore | No | Return projects starting before this UTC timestamp | |
| technicianId | No | Filter by technician ID | |
| appointmentId | No | Filter by appointment ID | |
| createdBefore | No | Return items created before this UTC timestamp | |
| projectTypeId | No | Filter by project type ID | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| businessUnitIds | No | Comma-separated business unit IDs | |
| completedBefore | No | Return completed projects before this UTC timestamp | |
| externalDataKey | No | External data key | |
| startsOnOrAfter | No | Return projects starting on or after this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp | |
| projectManagerIds | No | Comma-separated manager IDs | |
| completedOnOrAfter | No | Return completed projects on or after this UTC timestamp | |
| externalDataValues | No | External data values (comma-separated) | |
| targetCompletionDateBefore | No | Return projects with target completion before this UTC timestamp | |
| externalDataApplicationGuid | No | External data application GUID | |
| targetCompletionDateOnOrAfter | No | Return projects with target completion on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate read-only, idempotent, non-destructive behavior. The description adds meaningful behavioral context beyond that by stating the one-page return behavior, which is not inferable from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, with the core search capability front-loaded and the important pagination caveat and get-alternative stated immediately after. No filler or repeated schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and safety annotations, the description covers what is needed for effective selection: capacity, pagination behavior, and the sibling tool for known-ID lookups. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description provides a useful high-level grouping of filter categories, but it does not add substantial meaning beyond the per-parameter descriptions already present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific search/list operation over projects and enumerates the main filter dimensions (IDs, customer, location, status, type, manager, dates, linked entities). It also distinguishes itself from dispatch_projects_get, making the tool's role unambiguous among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says the tool returns one page, warning agents not to expect a full result set, and directs them to dispatch_projects_get when a known project ID is available. This gives a clear, actionable routing rule for when to use this tool versus the closest alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_projects_notes_listARead-onlyIdempotent
List one page of notes attached to a known project. Requires the project ID; use dispatch_projects_get for the project record itself.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Project ID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, non-destructive, idempotent behavior, so the description's 'one page' qualifier and 'known project' precondition add modest extra context. It does not disclose return ordering, error behavior, or pagination defaults, but with strong annotations and an output schema, nothing here contradicts or misleads.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences carry purpose, prerequisite, and the key sibling distinction without any filler. The most important fact (what the tool lists) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated read tool with a required ID, a complete input schema, rich annotations, and an output schema, this description covers the necessary context. It tells the agent what is returned, what must be supplied, and where to go for the parent record.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies. The description adds only that the project ID is required and that the result is a single page; it does not add detail about page, pageSize, or includeTotal beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a specific resource ('notes attached to a known project'), and a pagination qualifier ('one page'). It also distinguishes itself from dispatch_projects_get by clarifying that the get tool returns the project record itself, which removes the most likely ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the prerequisite ('Requires the project ID') and explicitly names the alternative for when the project record itself is wanted ('use dispatch_projects_get'). This gives the agent a clear branch: use this tool for notes when the project ID is already known, and use the get tool for the record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_project_statuses_getARead-onlyIdempotent
Retrieve one project-status definition by ID, including its configured status metadata. Use dispatch_project_statuses_list to search the catalog and the sub-status list for finer classifications.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description confirms the read-only retrieval and adds the detail that configured status metadata is included, but it does not add further behavioral context such as auth requirements, response shape, or pagination. Given the strong annotation coverage, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: the primary action and resource are front-loaded, and the alternative tool guidance is compact. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with one well-documented parameter, an output schema, and robust annotations, the description is complete. It explains what is returned, how to retrieve a single record, and where to go for searching or finer classifications.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single required parameter 'id' with the description 'Entity ID,' so the description adds no additional semantic value beyond the schema. The parameter is self-explanatory, and the description does not need to compensate for any coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') with a concrete resource ('one project-status definition by ID') and clarifies it includes 'configured status metadata.' It also distinguishes this GET-by-ID operation from dispatch_project_statuses_list and the sub-status list, so there is no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use dispatch_project_statuses_list ('to search the catalog') and points to the sub-status list for 'finer classifications,' which tells an agent when this tool is not the right choice. This is clear routing guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_project_statuses_listARead-onlyIdempotent
Search one page of project-status definitions by IDs, name, or created and modified ranges. Use the returned status IDs to classify projects, and dispatch_project_sub_statuses_list to find their finer-grained sub-statuses.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated status IDs (maximum 50) | |
| name | No | Filter by project status name | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name, Order, ModifiedOn, CreatedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond that: this is a paged search (one page), not a full export, and the returned IDs are meant to be used for classification. This helps set agent expectations without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the tool's scope and filters, the second gives the practical downstream usage and points to the sub-status sibling. Information is front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paged, read-only list endpoint with a complete input schema and an output schema, the description covers what an agent needs: the resource, filter scope, pagination awareness, and how the result IDs feed into classification and sub-status lookup. No critical missing context remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameters with meaningful descriptions, so the description does not need to add much. It summarizes the filter categories (IDs, name, created/modified ranges) but adds no new parameter-level semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (Search one page), a clear resource (project-status definitions), and the available query dimensions (IDs, name, created/modified ranges). It also distinguishes itself from the finer-grained dispatch_project_sub_statuses_list, so an agent can tell which status list to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear downstream guidance: use returned status IDs to classify projects, and use dispatch_project_sub_statuses_list for finer-grained sub-statuses. It does not explicitly state when to prefer dispatch_project_statuses_get over this list, but the context is clear enough for typical list-versus-get decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_project_sub_statuses_getARead-onlyIdempotent
Retrieve one project sub-status definition by ID, including its parent-status metadata. Use dispatch_project_sub_statuses_list to search by parent status, name, IDs, active state, or dates.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds some context about the return payload including parent-status metadata, but does not disclose additional behavioral traits beyond what annotations already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The primary action is stated first, and the routing guidance to the list sibling is concise and immediately actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-ID retrieval tool with a rich output schema and strong read-only annotations, the description is fully adequate. It states what the tool returns, points to the appropriate alternative for search scenarios, and leaves no important gap for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single 'id' parameter, described as 'Entity ID'. The description adds little beyond confirming retrieval by ID, so it meets the baseline but does not substantially enrich parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and identifies the exact resource ('one project sub-status definition by ID'), and it distinguishes itself from the list sibling by stating it retrieves a single entity including parent-status metadata. This clearly differentiates the tool from related dispatch status tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to dispatch_project_sub_statuses_list when searching by parent status, name, IDs, active state, or dates. This provides clear when-to-use-this-tool versus when-to-use-an-alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_project_sub_statuses_listARead-onlyIdempotent
Search one page of project sub-status definitions by parent status, IDs, name, active state, or date ranges. Returned records refine a project's status; use dispatch_project_statuses_list for the parent status catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated sub-status IDs (maximum 50) | |
| name | No | Filter by project sub-status name | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name, Order, StatusId, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| statusId | No | Filter by parent project status ID | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond the annotations: it explicitly states this is a one-page search and that returned records refine a project's status, giving domain meaning to the operation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence front-loads the verb, resource, and key filter categories; the second sentence provides the critical differentiation from the sibling tool. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity list endpoint with 12 optional parameters, the combination of description, 100% schema coverage, output schema, and strong annotations is quite complete. The description covers pagination, filter scope, and the parent-status alternative. The only minor omission is not mentioning the single-sub-status lookup sibling, but that is not essential for correct invocation of this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents all 12 parameters. The description adds value by grouping the filter dimensions (parent status, IDs, name, active state, date ranges), but it does not provide any deeper semantics than the parameter descriptions already offer. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search'), a specific resource ('project sub-status definitions'), and explicit filter dimensions. It distinguishes itself from the sibling dispatch_project_statuses_list by clarifying that this returns records that refine a project's status while the sibling is the parent status catalog. An agent can tell them apart immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative for the parent status catalog ('use dispatch_project_statuses_list'), which is the main differentiation point. It also communicates that this is a page-based search, implying pagination usage. It does not mention the single-record sibling dispatch_project_sub_statuses_get, so it stops short of fully covering all alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_project_types_getARead-onlyIdempotent
Retrieve one project-type definition by ID, including its configured type metadata. Use dispatch_project_types_list to browse the paginated type catalog when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safe read-only behavior is established. The description adds that the response includes configured type metadata, which is useful, but it does not add much behavioral context beyond the annotations, such as error behavior or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two crisp sentences with no wasted words. The primary purpose is front-loaded, and the alternative is mentioned only after the core behavior is stated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-parameter get tool with strong annotations and an output schema present. The description provides the necessary usage context, names the sibling list tool for unknown IDs, and is complete enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the only parameter, 'id', is documented as 'Entity ID'. The description reinforces that the operation is by ID, but it does not add substantial semantic detail beyond the schema's already-complete parameter documentation. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a specific resource ('one project-type definition'), and the key qualifier 'by ID, including its configured type metadata'. It also differentiates itself from the sibling dispatch_project_types_list by explicitly referring to browsing the paginated catalog when the ID is unknown, making the tool's scope immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: use dispatch_project_types_list when the ID is unknown. This tells the agent the exact condition for choosing this tool versus the alternative, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch_project_types_listARead-onlyIdempotent
List one page of project-type definitions. Use dispatch_project_types_get when a project-type ID is already known.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description adds pagination context ('one page') beyond the annotations, which is useful, but it doesn't disclose ordering, defaults behavior, or response shape. With rich annotations present, the added behavioral value is modest but non-zero — consistent with a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: the first front-loads the core action and scope, the second delivers the routing guidance. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple list tool: all three optional parameters are documented in the schema (100% coverage), the output schema covers return values, annotations cover the safety profile, and the cross-tool routing handles the main sibling ambiguity. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so page, pageSize, and includeTotal are already fully documented in the schema. The description's 'one page' phrasing aligns with the pagination params but does not add new meaning, syntax, or format details beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), resource ('project-type definitions'), and scope ('one page'), and explicitly names the sibling alternative dispatch_project_types_get for the ID-known case. An agent can tell this apart from dispatch_projects_list and dispatch_project_types_get from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool and the exact condition that selects it: 'Use dispatch_project_types_get when a project-type ID is already known.' This is explicit when-to-use guidance that routes the agent correctly without needing to open schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_estimate_templates_getARead-onlyIdempotent
Retrieve an estimate template by its ServiceTitan ID. Returns the single upstream record without pagination; use estimates_estimate_templates_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful context by stating that the operation returns a single upstream record with no pagination, which helps set expectations for the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. The core behavior is stated first, and the routing guidance is placed second. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter get operation with an output schema and safety annotations, the description is complete. It covers the resource, the lookup key, the response shape, and the alternative for unknown IDs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers the single parameter with 100% description coverage ('Template ID'). The description echoes this as 'ServiceTitan ID,' adding slight clarity but not materially expanding on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb-resource pair: retrieve an estimate template by its ServiceTitan ID. It also distinguishes itself from the list variant by clarifying the difference between direct ID lookup and search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool versus the alternative: use estimates_estimate_templates_list to search when the ID is unknown. This gives clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_estimate_templates_listARead-onlyIdempotent
List one requested page of estimate templates, filterable by active state and modified timestamps. Use estimates_estimate_templates_get for a known template ID; use estimates_list for customer estimates created from templates.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| modifiedBefore | No | Return templates modified before this UTC timestamp | |
| modifiedOnOrAfter | No | Return templates modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and no destructive action, so the safety profile is covered. The description adds meaningful behavioral context by noting pagination, filtering by active state and modified timestamps, and the distinction from related list endpoints. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence states the core purpose and key filters; the second provides targeted routing guidance. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated list endpoint with full schema descriptions, a rich output schema, and strong read-only annotations, the description is complete. It covers what the tool returns, the principal filters, pagination, and how it differs from the closest sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a clear description. The tool description adds only a high-level summary of filtering by active state and modified timestamps, which is helpful orientation but does not meaningfully expand on the schema's parameter-level explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('List'), a concrete resource ('estimate templates'), and the paging/filtering scope. It also names sibling alternatives (estimates_estimate_templates_get, estimates_list), making the tool's role unambiguous within a large sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly gives routing guidance: use estimates_estimate_templates_get for a known template ID and estimates_list for customer estimates created from templates. This tells an agent when to use this tool versus the most relevant alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_export_estimatesARead-onlyIdempotent
Read the incremental estimate export feed for synchronization. Supply from as the change-window start and continue with the response continuation token when present; use estimates_list for interactive filtered browsing and estimates_get for a known ID.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or custom date to begin export | |
| includeRecentChanges | No | Include recent changes (may include duplicates) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, openWorld, idempotent, non-destructive), so the description's job is lighter. It adds useful behavioral context by describing the tool as an incremental feed intended for synchronization and by explaining the continuation-token pagination pattern. This goes beyond what the annotations alone provide, though it does not detail output format or edge cases like missing 'from'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary purpose is front-loaded, and the continuation-token mechanics and sibling alternatives are packed into the second sentence. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a read-only export tool: it covers the sync use case, pagination continuation, and how it differs from related estimate tools. The output schema exists, so return-value details are not required. No critical missing context is apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining that 'from' serves as the change-window start and that the response continuation token should be fed back into it—clarifying the incremental feed workflow. It does not add much for includeRecentChanges, but the schema already explains that parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental estimate export feed for synchronization.' It clearly identifies what the tool does and differentiates it from estimates_list and estimates_get by naming them explicitly. An agent can immediately understand this is the sync/export tool, not the interactive browsing or single-record lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage direction: supply 'from' as the change-window start and continue with the response continuation token when present. It also names the alternatives and their use cases—estimates_list for interactive filtered browsing and estimates_get for a known ID—so an agent knows 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.
estimates_getARead-onlyIdempotent
Retrieve a single estimate by its ServiceTitan ID. Returns the single upstream record without pagination; use estimates_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Estimate ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds a useful behavioral trait—no pagination and a single upstream record—but does not describe error behavior, not-found handling, or any additional constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste. The primary action and key constraint are front-loaded, and the alternative tool is mentioned only where needed for disambiguation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with one required parameter, full schema coverage, and an output schema, the description is complete. It tells an agent what to expect (single record, no pagination) and when to choose the sibling list tool instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'id' parameter already has a clear description ('Estimate ID'). The description adds the qualifier 'ServiceTitan ID,' which is mildly informative but does not substantially expand on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and resource ('a single estimate by its ServiceTitan ID'), making the tool's purpose immediately clear. It also distinguishes itself from list/search tools by noting it returns a single record without pagination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use estimates_list instead ('when the ID is unknown'), giving an agent clear routing guidance. This is strong usage guidance that prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_items_listARead-onlyIdempotent
Search one requested page of estimate line items by estimate ID, item IDs, active state, or creation and modification dates. Each result represents an item attached to an estimate, rather than an estimate header returned by estimates_list.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated estimate item IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| estimateId | No | Filter by estimate ID | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: pagination behavior ('one requested page') and the item-vs-header distinction, which go beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and resource, then a concise clarifying contrast with estimates_list. Every sentence earns its place with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated list tool with an output schema and robust annotations, the description contains the essential meaning: what is returned, how pages work, and how it differs from the sibling estimates_list. It is complete enough for an agent to select and call the tool correctly, though it does not mention bulk export alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description summarizes the filter dimensions: estimate ID, item IDs, active state, and creation/modification dates, which partially maps to the schema. Schema descriptions cover 6/10 parameters; the four date parameters lack schema descriptions and the description only groups them without explaining the precise before vs on-or-after semantics. Parameter names are fairly self-descriptive, so this is adequate but not thorough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Search one requested page of estimate line items'. Clearly distinguishes from estimates_list by explaining this returns line items, not estimate headers. No ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names estimates_list as the closest alternative and clarifies the difference: this returns items attached to an estimate, while estimates_list returns headers. It gives useful selection context, though it doesn't mention export alternatives or explicit when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_listARead-onlyIdempotent
Search one requested page of estimates by job, project, location, status, dates, salesperson, or total amount. Use estimates_get for one known estimate; use estimates_export_estimates for incremental synchronization.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated estimate IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, ModifiedOn, SoldOn, Total | |
| jobId | No | Filter by job ID | |
| active | No | Filter by active status | True |
| status | No | Filter by estimate status | |
| orderBy | No | Legacy order by field accepted by ServiceTitan API | |
| pageSize | No | Records per page (default 50) | |
| soldById | No | Filter by seller user ID | |
| jobNumber | No | Filter by job number | |
| projectId | No | Filter by project ID | |
| soldAfter | No | Return estimates sold on or after this date/time (UTC) | |
| totalLess | No | Filter estimates with totals less than this amount | |
| locationId | No | Filter by location ID | |
| soldBefore | No | Return estimates sold before this date/time (UTC) | |
| includeTotal | No | Include total count in response | |
| totalGreater | No | Filter estimates with totals greater than this amount | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| orderByDirection | No | Legacy order direction accepted by ServiceTitan API | |
| soldByEmployeeId | No | Filter by seller employee ID | |
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the important behavioral nuance that this tool returns only 'one requested page' rather than streaming all records, and it clarifies the filtering scope. This is valuable context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: the first states the core action and scope, the second gives routing guidance. No filler, no repetition of schema details, and the most important behavioral trait (single-page search) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema (23 parameters, 83% covered), the presence of an output schema, and annotations covering safety and idempotency, the description supplies exactly the missing context: pagination semantics, filter scope, and sibling-tool routing. Nothing critical for correct selection or invocation is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the parameters are already well documented. The description summarizes the filter categories conceptually and maps 'salesperson' to the seller-related parameters, providing modest added meaning, but it does not go beyond what the schema descriptions already convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search one requested page of estimates,' and enumerates the main filter dimensions (job, project, location, status, dates, salesperson, total). It also names the sibling tools estimates_get and estimates_export_estimates, making the tool's scope immediately distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use alternatives: 'Use estimates_get for one known estimate; use estimates_export_estimates for incremental synchronization.' This gives the agent clear selection criteria and eliminates ambiguity among closely related estimate tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_proposal_templates_getARead-onlyIdempotent
Retrieve a proposal template by its ServiceTitan ID. Returns the single upstream record without pagination; use estimates_proposal_templates_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds useful behavioral context beyond annotations, notably that it returns a single upstream record without pagination, which helps the agent understand the response shape and absence of paging concerns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action and scope are front-loaded, and the alternative usage is stated efficiently in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only retrieval tool with a rich annotation set and an output schema, the description covers everything needed: what the tool does, what makes it distinct, when to use the sibling, and the pagination behavior. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the 'id' parameter already has a description, so the baseline is 3. The description adds meaningful context by clarifying that the ID is the ServiceTitan ID and that the lookup targets the single upstream record, reinforcing the parameter's role beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') with a clear resource ('a proposal template by its ServiceTitan ID'). It also explicitly contrasts itself with estimates_proposal_templates_list, making the tool's purpose and scope immediately distinguishable from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool versus the alternative: use estimates_proposal_templates_list when the ID is unknown. This gives the agent a clear decision rule and names the exact sibling to fall back to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_proposal_templates_listARead-onlyIdempotent
List one requested page of proposal templates, filterable by active state, modified timestamps, and proposal type ID. Use estimates_proposal_templates_get for a known template and estimates_proposal_types_list to resolve the type filter.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| modifiedBefore | No | Return templates modified before this UTC timestamp | |
| proposalTypeId | No | Filter by proposal type ID | |
| modifiedOnOrAfter | No | Return templates modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior, so the description does not need to restate safety. It adds pagination context and filterable dimensions, but does not disclose response-level behavior such as result ordering, default active filtering behavior, or whether the output is exhaustive. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the primary action and resource, then provides targeted alternative-tool guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full parameter schema, an output schema, and strong safety annotations, the description covers the essential decision points: what is listed, how it can be filtered, and when to use sibling tools. Nothing critical is missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter. The description adds a helpful summary of filterability, but it does not provide additional meaning beyond the schema. Baseline 3 is appropriate because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation as listing proposal templates, specifies pagination ('one requested page'), and enumerates the main filters. It also distinguishes itself from sibling tools by naming estimates_proposal_templates_get for retrieving a single known template and estimates_proposal_types_list for resolving type filters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides when to use this tool versus alternatives: use estimates_proposal_templates_get when a specific template is known, and estimates_proposal_types_list to resolve the proposal type filter. This gives an agent clear routing information without needing to inspect sibling schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimates_proposal_types_listARead-onlyIdempotent
List proposal-type definitions available for grouping and filtering proposal templates. Use estimates_proposal_templates_list to retrieve the templates that reference these types.
| Name | Required | Description | Default |
|---|---|---|---|
| active | No | Filter by active status | True |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds contextual purpose but does not disclose additional behavior such as pagination, ordering, or default filter behavior; however, with strong annotations and an output schema present, the lack of extra behavioral disclosure is acceptable but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences: the first states the action and resource, and the second routes to the correct sibling tool. There is no redundant wording or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with one optional filtered parameter, the description is complete. The output schema covers return values, annotations cover safety/idempotency, and the description provides domain context and sibling differentiation, so an agent has everything needed to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'active' is fully documented in the schema with an enum and description, so schema coverage is 100%. The description adds no extra meaning to the parameter beyond the schema, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List proposal-type definitions'. It further clarifies the purpose ('available for grouping and filtering proposal templates') and explicitly distinguishes itself from the sibling estimates_proposal_templates_list, making the tool's role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides direct usage routing: 'Use estimates_proposal_templates_list to retrieve the templates that reference these types.' This tells an agent exactly when to choose this tool versus the related template-listing tool, leaving no room for inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_activitiesARead-onlyIdempotent
Read the incremental timesheet-activity export feed for cross-domain bulk synchronization. This is the same feed as settings_activities_export; use whichever name is available and do not fetch both. Continue immediately with continueFrom while hasMore is true; when false, retain it and wait before polling again. includeRecentChanges may repeat records.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive. The description adds meaningful behavior beyond that: duplicate feed warning, incremental synchronization semantics, continuation/polling behavior, and the fact that includeRecentChanges may repeat records. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences carry purpose, alias handling, pagination behavior, polling cadence, and deduplication caveat. Nothing is wasted and the most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an export feed with an output schema and strong annotations, the description covers all non-obvious operational details: duplicate endpoint, continuation token usage, hasMore handling, and record repetition. The agent has everything needed to call and consume the feed correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining that includeRecentChanges may repeat records and by describing the continuation loop. There is a minor ambiguity where 'continueFrom' is not the actual parameter name ('from' is), but the schema's own description of 'from' as a continuation token largely resolves this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental timesheet-activity export feed for cross-domain bulk synchronization.' It also explicitly identifies itself as the same feed as settings_activities_export, removing any ambiguity among the large sibling export toolset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit alternative guidance: 'use whichever name is available and do not fetch both.' It also provides a concrete polling and continuation protocol with continueFrom and hasMore, telling the agent exactly how to drive the feed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_activity_codesARead-onlyIdempotent
Read the incremental activity-code export feed for cross-domain bulk synchronization. This is the same feed as settings_activity_codes_export; use whichever name is available and do not fetch both. Continue immediately with continueFrom while hasMore is true; when false, retain it and wait before polling again. includeRecentChanges may repeat records.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/openWorld annotations, the description discloses incremental-feed behavior, continuation/pagination semantics, the need to wait after hasMore is false, and the fact that includeRecentChanges may produce duplicate records. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying a distinct piece of information: purpose, sibling alias, pagination protocol, and parameter caveat. The core action is front-loaded and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, incremental export tool with an output schema and no required parameters, this description covers purpose, alias avoidance, pagination loop behavior, and duplicate caveat. Nothing essential for correctly invoking and consuming the feed is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers both parameters with 100% description coverage, so the baseline is 3. The description adds value by warning that includeRecentChanges may repeat records, connecting that parameter to a behavioral consequence not stated in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb-resource pair ('Read the incremental activity-code export feed') and its purpose ('cross-domain bulk synchronization'), immediately distinguishing this from the many other export_* siblings. It also names the exact sibling alias (settings_activity_codes_export) and states they expose the same feed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says the tool is interchangeable with settings_activity_codes_export and instructs the agent to use whichever name is available and not fetch both. It also provides concrete polling direction: continue immediately while hasMore is true, otherwise retain the token and wait before polling again.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_adjustmentsARead-onlyIdempotent
Read the incremental adjustments export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals meaningful behavior beyond the readOnly/idempotent annotations: the feed must be polled with continuation tokens, hasMore=false means retain the token and wait, and includeRecentChanges may cause duplicate records. This is valuable operational context for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the primary purpose front-loaded and no filler. The phrasing around 'continueFrom' is slightly ambiguous because the input schema only lists 'from', which prevents a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, read-only annotations, and no required parameters, the description covers the essential sync loop: start position, pagination, polling cadence, and duplicate-risk behavior. The missing explicit link between continueFrom and the from parameter is the main gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds useful semantics: 'from' can be a date or omitted to start at the beginning, and includeRecentChanges may return records sooner but repeat them. It does not fully clarify how the returned continueFrom maps to the 'from' parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental adjustments export feed for bulk synchronization.' This clearly states what the tool does, though it does not explicitly distinguish itself from sibling tools like export_payroll_adjustments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear procedural context is provided: start with a date or omit 'from', follow continueFrom/hasMore for pagination, and wait before repolling after the feed is exhausted. Alternatives and exclusions are not named, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_appointment_assignmentsARead-onlyIdempotent
Read the incremental appointment assignments export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly, openWorld, idempotent, and non-destructive hints. The description adds meaningful behavioral detail beyond those: the incremental feed pagination protocol, the hasMore/continueFrom loop, and the caveat that includeRecentChanges can return repeat records. This is valuable context that is not inferable from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences cover purpose, pagination flow, and the includeRecentChanges tradeoff. Each sentence adds non-redundant information, and the most important usage guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the annotations cover safety and idempotency, the description is complete for an incremental export feed tool. It explains the full polling loop, how to start, and the one nuanced behavior that could surprise callers. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3, but the description enriches both parameters. It explains how to use 'from' to start at the beginning or resume, and adds the repeat-records caveat for includeRecentChanges that goes beyond the schema's 'include recent changes not yet committed'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Read the incremental appointment assignments export feed for bulk synchronization', using a specific verb and resource that clearly identifies the tool's purpose. It distinguishes this from sibling export tools by specifying 'appointment assignments' and 'incremental' feed semantics rather than a generic list operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage guidance: start with a date or omit 'from', continue with 'continueFrom' while 'hasMore' is true, and retain/wait when false. It does not explicitly name alternative tools or exclusion conditions, but the sequencing and polling context are clear enough for an agent to use it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_appointmentsARead-onlyIdempotent
Read the incremental appointments export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals important behavior beyond the readOnly/openWorld/idempotent annotations: the cursor-based continuation with 'hasMore', the need to wait before polling again, and that 'includeRecentChanges' may return duplicate records. This is valuable contextual transparency, though it leaves some details such as exact return shape to the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the tool's purpose, and each sentence adds necessary protocol detail. It is moderately dense with useful information, though the nested polling instructions could be slightly clearer; there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and annotations exist, the description sufficiently covers the main operational behaviors: starting the feed, continuing with the cursor, stopping and waiting, and handling uncommitted changes. It could be more explicit about passing the returned continuation token back into 'from', but overall the tool is well contextualized for an incremental export.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters, so baseline is 3. The description adds useful meaning: 'from' can be a date or omitted to start at the beginning, and 'includeRecentChanges' may return records sooner but with possible repeats. However, it references 'continueFrom' without explicitly showing it maps to the 'from' parameter, which is a minor clarity gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Read[s] the incremental appointments export feed for bulk synchronization,' which identifies the specific verb, resource, and purpose. This distinguishes it from sibling tools like export_appointment_assignments or dispatch_appointments_list by emphasizing the incremental feed for bulk sync.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage protocol: start with a date or omit 'from', continue while 'hasMore' is true, and wait when it becomes false. It does not explicitly name alternative tools or when-not-to-use cases, but the bulk-synchronization context and incremental-feed mechanics are clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_bookingsARead-onlyIdempotent
Read the incremental bookings export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, but the description adds meaningful behavioral context beyond them: the polling and continuation protocol involving hasMore and continueFrom, plus the caveat that includeRecentChanges may return records sooner but can repeat them. This discloses pagination and duplicate behavior that was not visible in structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, with the purpose front-loaded and the operational protocol in the second sentence. No filler or repetition; every clause contributes to the caller's ability to use the feed correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all essential operational aspects: initial start behavior, continuation token usage, polling/waiting semantics, and duplicate behavior of includeRecentChanges. An output schema is present, so return-value details do not need to be in the description. Nothing critical is missing for calling this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description enriches both: it explains that omitting 'from' starts at the beginning of the feed, and that includeRecentChanges may return records sooner at the cost of duplicates. This goes beyond the schema descriptions, though the added value is not extensive enough for a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and a specific resource ('incremental bookings export feed for bulk synchronization'), which clearly identifies both the operation and its scope. It differentiates from sibling tools like crm_bookings_list or export_appointments by emphasizing the bulk-sync export-feed nature, making the intended use unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives detailed, actionable usage guidance: start with a date or omit it, continue with continueFrom while hasMore is true, and wait before polling once hasMore is false. It clearly states the context ('for bulk synchronization') but does not explicitly name alternatives or exclusion conditions, stopping short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_business_unitsARead-onlyIdempotent
Read the incremental business units export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, idempotent, and non-destructive behavior. The description adds meaningful protocol details beyond annotations: continuation tokens, hasMore semantics, polling guidance, and the possibility of repeated records when includeRecentChanges is used. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with purpose, and every sentence carries operational value. It avoids fluff and presents the start/continue/polling sequence in a logical order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to enumerate return fields. It covers the essential protocol for correct incremental synchronization, including how to start, continue, stop, and handle eventual consistency. This is complete for a feed-reading tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds valuable nuance beyond the schema: 'from' can be omitted to start at the beginning of the feed, and includeRecentChanges may return records sooner but can repeat them. This directly helps an agent decide how to set each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Read the incremental business units export feed for bulk synchronization.' It clearly distinguishes this tool from the many export_* siblings by identifying the resource and the incremental-feed nature, so an agent can select it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: start with a date or omit from, continue with continueFrom while hasMore is true, wait before polling after hasMore is false, and understand includeRecentChanges caveats. It does not explicitly name alternative tools, but the usage protocol is sufficiently clear for this feed endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_callsARead-onlyIdempotent
Read the incremental calls export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, idempotentHint, and openWorldHint annotations, the description discloses the incremental feed behavior: continuation via continueFrom, the hasMore loop, waiting before polling again, and the potential for duplicate records with includeRecentChanges. This adds meaningful behavioral detail not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and each sentence contributes actionable guidance about the pagination and polling flow. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a rich output schema, annotations covering safety/idempotency, and only two parameters, the description provides sufficient guidance for an agent to invoke the tool correctly and understand the incremental export lifecycle, including continuation and polling behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description adds value by explaining that 'from' can be a date or omitted to start at the beginning, and that includeRecentChanges may return records sooner but can repeat them, which goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Read the incremental calls export feed for bulk synchronization.' It clearly identifies the tool's purpose, though it does not explicitly differentiate itself from the many sibling export_* tools beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context for bulk synchronization and explains the starting point ('Start with a date or omit from'). It does not explicitly mention alternatives or when-not-to-use, but the usage pattern is specific enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_customersARead-onlyIdempotent
Read the incremental customers export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly, idempotent, and non-destructive annotations, the description discloses important feed behavior: records may be repeated when includeRecentChanges is used, and polling should pause when hasMore is false. This gives the agent accurate expectations about duplicate data and pacing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three focused sentences with no filler. It front-loads the purpose, then gives a compact but complete usage algorithm, and closes with a caveat about duplicate records. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low parameter count and the presence of an output schema, the description covers the essential operational details: how to start, how to continue, when to stop, and a known data-quality caveat. Nothing critical is missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters, but the description adds valuable semantics: 'from' is explained as a starting point with an optional date or continuation token, and continueFrom/hasMore behavior is tied to the pagination flow. The includeRecentChanges caveat about repeats goes well beyond the schema's 'Include recent changes not yet committed.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental customers export feed for bulk synchronization.' It clearly identifies this as an incremental export tool for customers, which distinguishes it from sibling export tools like export_customers_contacts and from query-style tools like crm_customers_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational guidance: start with a date or omit from, follow continueFrom while hasMore is true, and wait before polling again when hasMore is false. It does not explicitly name alternative tools or exclusion conditions, but the context of incremental bulk synchronization makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_customers_contactsARead-onlyIdempotent
Read the incremental customers contacts export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that the tool is read-only, idempotent, open-world, and non-destructive. The description adds genuinely useful behavioral context: feed continuation semantics, the `hasMore` polling loop, and the duplicate-record caveat for `includeRecentChanges`. It omits rate-limit specifics, but the annotations lower the burden here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with purpose, and every sentence contributes. The continuation/polling clause is slightly run-on and uses 'it' a bit vaguely, but the overall structure is efficient for the amount of protocol it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full parameter schema coverage, the description does not need to enumerate return fields. It covers initialization, pagination, polling, and the `includeRecentChanges` caveat. The missing explicit connection between the returned `continueFrom` and the `from` parameter is the main completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since the schema already documents both parameters, the baseline is 3. The description adds value by explaining the default behavior when `from` is omitted and warning that `includeRecentChanges` may repeat records. There is slight ambiguity because the returned `continueFrom` is not explicitly mapped to the `from` parameter for the next call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence identifies a specific verb ('Read'), a specific resource ('incremental customers contacts export feed'), and the intended use case ('bulk synchronization'). This is strong enough to distinguish it from direct CRM list/read endpoints and from other export feeds by the customers-contacts scope and incremental-feed nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit usage protocol: start by providing a date or omitting `from`, continue while `hasMore` is true, retain the token and wait when false, and it explains the trade-off of `includeRecentChanges`. It does not name alternatives or exclusion cases, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_employeesARead-onlyIdempotent
Read the incremental employee export feed for cross-domain bulk synchronization. This is the same feed as people_employees_export; use whichever name is available and do not fetch both. Continue immediately with continueFrom while hasMore is true; when false, retain it and wait before polling again. includeRecentChanges may repeat records.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, open-world, and non-destructive. The description adds valuable behavioral context beyond that: it is an incremental feed, has continuation/pagination semantics, requires waiting before re-polling, and includeRecentChanges may produce duplicate records. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all dense with useful information. The core purpose is front-loaded, followed by the alias warning and the polling/duplication caveats. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is an incremental export feed with rich annotations and an output schema. The description covers the essential operational concerns: alias equivalence, polling continuation, waiting behavior, and duplicate-record risk. Nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantic context for includeRecentChanges by warning that it may repeat records, and it explains the continuation flow with continueFrom/hasMore, which complements the 'from' parameter description. It does not fully rewrite param docs, but it improves the agent's operational understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read'), a specific resource ('incremental employee export feed'), and its purpose ('cross-domain bulk synchronization'). It also names the sibling alias people_employees_export and clarifies the two are the same feed, so an agent can distinguish it from the many other export_* siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative (people_employees_export), says to use whichever name is available, and instructs not to fetch both. It also gives concrete polling guidance: continue immediately with continueFrom while hasMore is true, and retain and wait when hasMore is false. This is direct, actionable usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_equipmentARead-onlyIdempotent
Read the incremental equipment export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, open-world, and idempotent. The description goes well beyond that by explaining the incremental feed mechanics: continuation tokens, hasMore polling behavior, waiting before re-polling, and the duplicate risk introduced by includeRecentChanges. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the core purpose, and every clause earns its place. It is somewhat run-on, packing multiple protocol steps into one long sentence, but it remains appropriately sized for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, full schema coverage, and presence of an output schema, the description covers the essential behavioral loop for calling the tool correctly. The only notable gap is the lack of explicit guidance distinguishing this feed from export_installed_equipment, which could matter during tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description adds valuable semantic detail: from can be a date or omitted to start at the beginning, includeRecentChanges returns records sooner but may repeat them, and continueFrom should be fed back into the next call. Minor ambiguity remains around the relationship between the output continueFrom token and the from parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Read the incremental equipment export feed') and its intended purpose ('bulk synchronization'). It is distinct enough to identify the resource, but the sibling list includes export_installed_equipment, and the description does not explicitly differentiate between equipment and installed equipment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete usage protocol: start with a date or omit from, continue using continueFrom while hasMore is true, retain the token and wait when false, and warns about includeRecentChanges behavior. However, it does not explicitly state when to choose this tool over other export_* alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_gross_pay_itemsARead-onlyIdempotent
Read the incremental gross pay items export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, open-world, and idempotent. The description adds valuable behavioral details beyond that: the feed's continuation mechanism, the `hasMore` flag, the need to retain the token, and the repeat-record tradeoff of `includeRecentChanges`. This is exactly the kind of runtime behavior an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler. Key information is front-loaded: what the tool is for, how to begin, how to continue, and the caveat about recent changes. Every sentence provides actionable guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations and the presence of an output schema, the description covers the full call pattern: starting, iterating, polling, and handling repeatable records. Nothing critical is missing for an agent to invoke and consume this incremental export feed correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds operational meaning by explaining that `from` can be a date or omitted to start at the beginning of the feed, and clarifies the behavioral tradeoff of `includeRecentChanges`. It also introduces `continueFrom`/`hasMore` context that helps interpret the response, going beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Read the incremental gross pay items export feed') and names its purpose ('for bulk synchronization'). This clearly differentiates it from sibling tools like payroll_gross_pay_items_list by indicating it is an incremental feed rather than a plain list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a concrete polling protocol: start with a date or omit `from`, continue with `continueFrom` while `hasMore` is true, retain the token and wait when false. It also warns about `includeRecentChanges` returning repeated records, giving the agent actionable guidance on how to use the feed correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_installed_equipmentARead-onlyIdempotent
Read the incremental installed equipment export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable behavioral context beyond that: the feed is incremental, continuation is driven by hasMore, and includeRecentChanges may repeat records. This is meaningful and consistent with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each earning its place: purpose, continuation protocol, and includeRecentChanges caveat. The most important usage information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The complexity is moderate (incremental cursor feed), and the description covers the complete polling lifecycle: initial start, continuation, waiting, and the repeat-record caveat. With an output schema present and annotations covering safety, this is nearly complete; the only minor gap is not clarifying how the response's continueFrom value is passed back into the from parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra meaning by stating that omitting from starts at the beginning of the feed and that includeRecentChanges trades freshness for possible duplicates. The only slight weakness is using 'continueFrom' without explicitly mapping it back to the from parameter, though schema already identifies from as a continuation token.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental installed equipment export feed for bulk synchronization.' It clearly identifies the tool as an incremental export feed for installed equipment, which distinguishes it from the many sibling export_* tools (e.g., export_equipment) and from dispatch_installed_equipment_list/get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit polling protocol: start with a date or omit from to start at the beginning, continue while hasMore is true, wait before polling again when false, and be aware includeRecentChanges returns records sooner but may repeat them. It does not explicitly name alternatives or exclusion conditions, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_inventory_billsARead-onlyIdempotent
Read the incremental inventory bills export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations by explaining the incremental feed semantics: hasMore/continueFrom continuation, the need to retain the token when hasMore is false, and the risk of repeated records when includeRecentChanges is used. This goes well beyond the readOnly/idempotent annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences cover the essential feed protocol without wasted words. The most important action (read the feed for synchronization) is front-loaded, and the parameter semantics are explained compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for an incremental export feed: it explains starting, continuing, polling, and the trade-off of includeRecentChanges. The output schema is present, so the description does not need to enumerate return fields, and the annotations cover safety and idempotency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds important behavioral meaning to the parameters: 'from' can be a date or continuation token and can be omitted to start at the beginning, and 'includeRecentChanges' trades off sooner records against possible duplicates. This materially helps correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Read'), a specific resource ('incremental inventory bills export feed'), and a clear purpose ('bulk synchronization'). This makes it easy to distinguish from the many sibling export_* feed tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage guidance for the feed protocol: how to start, when to continue, when to retain the continuation token, and when to wait before polling again. It does not explicitly discuss alternatives or exclusions, but the resource is distinct among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_invoice_itemsARead-onlyIdempotent
Read the incremental invoice items export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this readOnly, idempotent, and non-destructive; the description adds valuable feed-specific behavior: continuation semantics, hasMore polling, retaining the cursor, and the repeat-risk of includeRecentChanges. This gives an agent more than the annotation labels alone could convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all dense with operational guidance and no filler. The most important fact (read feed for bulk sync) is front-loaded, followed by the polling lifecycle.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the full consumption loop for an incremental export feed: start, continue, poll, and handle recent changes. Combined with readOnly/idempotent annotations and the presence of an output schema for return fields, an agent has enough to call and drive this feed correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description is bonus, and it adds meaning: 'from' can be a date or token and can be omitted to start at the beginning; includeRecentChanges may return records sooner but duplicates them. The only minor wrinkle is that continueFrom is referenced but not defined in the input schema, likely an output cursor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb ('Read'), a precise resource ('incremental invoice items export feed'), and a purpose ('for bulk synchronization'). The 'invoice items' scope distinguishes it from sibling export feeds such as export_invoices and export_invoice_templates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear context for use (bulk synchronization) and a detailed polling/continuation protocol: start from a date or omit from, follow hasMore, retain continueFrom when done, and handle repeatable recent changes. It does not explicitly name alternative tools or give when-not-to-use conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_invoicesARead-onlyIdempotent
Read the incremental invoices export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/openWorld/destructive annotations, it discloses non-obvious feed behavior: continuation tokens, hasMore polling, waiting when the feed is exhausted, and possible duplicate records with includeRecentChanges. This materially helps an agent reason about repeated calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences front-load the purpose and avoid fluff. The middle sentence is a long run-on and parameter names aren't formatted (e.g., from, continueFrom), which makes the polling instruction slightly harder to parse than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated incremental feed, it covers the full call lifecycle and duplicate behavior, and output schema/annotations fill in the rest. A more complete description would explicitly say to pass the returned continueFrom value as the from argument on subsequent requests.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds real usage meaning: omitting from starts at the beginning, includeRecentChanges trades recency for duplicates. The slight ambiguity is that continueFrom is described as something to continue with but the description never explicitly maps it to the from parameter on the next call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies the tool as reading the incremental invoices export feed for bulk synchronization, with a specific verb, resource, and use case. It does not explicitly contrast itself with any sibling export/list endpoint, so it stops short of full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit context and operational steps: start with a date or omit the from parameter, follow hasMore/continueFrom, and wait before polling again. It doesn't state when not to use this tool or name an alternative, which keeps it at 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_invoice_templatesARead-onlyIdempotent
Read the incremental invoice templates export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description reveals important feed behavior: incremental continuation via hasMore/continueFrom, the need to wait before polling again, and the tradeoff that includeRecentChanges may return records sooner but can repeat them. This is valuable behavioral context an agent could not infer from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with its purpose, with no filler. Slight referential ambiguity in 'when false retain it' and the unlinked continueFrom term keep it from being perfectly clear and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety, the description handles the core export lifecycle well: initial start, continuation, polling pause, and duplicate risk. Minor missing details are the explicit continueFrom-to-from mapping and any guidance on polling intervals, but the description is otherwise sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes both parameters. The description adds meaningful behavior: omitting from starts at the beginning, and includeRecentChanges can cause duplicates. However, it references continueFrom without explicitly mapping it back to the from parameter, leaving a small inference gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental invoice templates export feed for bulk synchronization.' This clearly distinguishes it from sibling export feeds like export_invoices or export_invoice_items, and its synchronization purpose is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear polling protocol: start with a date or omit from, continue with continueFrom while hasMore is true, and wait when hasMore is false. It does not explicitly mention alternatives or exclusions among the many other export tools, so it stops short of a 5, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_job_canceled_logsARead-onlyIdempotent
Read the incremental job canceled logs export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, open-world, and non-destructive, and the description adds substantial operational behavior beyond that: the hasMore/continueFrom polling loop, the instruction to retain the token and wait, and the caveat that includeRecentChanges can return records sooner but may repeat them. This is exactly the kind of feed-specific behavioral detail an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient, with the core purpose front-loaded and the usage protocol following in compact, imperative form. There is no fluff or repetition of schema or annotation information; every clause adds actionable guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no required parameters, an output schema already present, and minimal input schema, the description covers the essential operational lifecycle: initial call, continuation, polling behavior, and the special-case caveat for includeRecentChanges. Nothing critical for an agent to invoke and poll this feed correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description meaningfully extends both parameters: 'from' is explained as a start date or omitted to begin at the feed's beginning, with continuation handled via continueFrom, and includeRecentChanges is given a real tradeoff ('may return records sooner but can repeat them'). This goes well beyond the schema's simple field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental job canceled logs export feed for bulk synchronization.' This precisely identifies the tool as a feed-style export for canceled job logs, distinguishing it from the one-off list tool (dispatch_jobs_canceled_logs_list) and the broader set of export_* siblings by the 'incremental' and 'bulk synchronization' framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes when this tool applies: bulk/incremental synchronization of job canceled logs. It gives concrete consumption instructions (start with a date or omit from, continue with continueFrom while hasMore is true, wait when hasMore is false). It does not explicitly name alternative tools or say when not to use it, but the bulk-feed context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_job_historyARead-onlyIdempotent
Read the incremental job history export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent, openWorld, non-destructive), the description discloses real behavioral nuances: records can repeat when includeRecentChanges is used, continueFrom must be retained between polls, and there is an implied polling cadence ('wait before polling again'). This is exactly the kind of context annotations cannot express, and nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero filler: purpose is front-loaded, the polling protocol is compressed into the second sentence, and the parameter caveat is the third. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering the safety profile, the description covers the essential protocol for a paginated incremental feed. The only meaningful gap is the implicit continueFrom-to-`from` handoff; minor details like record ordering or token validity are absent but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning: omitting `from` starts at the beginning of the feed, and includeRecentChanges trades faster availability for possible record repetition. It does not, however, clarify the relationship between the response's continueFrom and the `from` parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb ('Read'), a specific resource ('incremental job history export feed'), and its purpose ('for bulk synchronization'). Among the large set of export_* siblings, the 'incremental feed' qualifier clearly separates this from plain list/export tools like export_jobs or export_job_notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description fully specifies the polling loop: start with a date or omit `from` to begin at the feed's start, continue with continueFrom while hasMore is true, and retain it and wait when false. It does not explicitly name alternatives or when-not-to-use conditions, and it never states that the returned continueFrom should be passed back as the `from` parameter — inferable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_job_notesARead-onlyIdempotent
Read the incremental job notes export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and idempotent, and the description adds meaningful behavioral details: how to start the feed, how to continue using continueFrom and hasMore, when to retain the token and wait, and the caveat that includeRecentChanges may repeat records. This goes well beyond the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the first states purpose, the second explains the continuation and polling flow, and the third covers the includeRecentChanges tradeoff. Every sentence earns its place and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is an output schema and the annotations already convey safety and idempotency, the description provides all necessary operational guidance: feed start, continuation, polling, and duplicate-record caveat. Nothing critical is missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters fully, so the baseline is 3. The description adds extra value by explaining that omitting from starts at the beginning of the feed and that includeRecentChanges may return records sooner but with possible duplicates, clarifying practical behavior beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the incremental job notes export feed for bulk synchronization, identifying both the specific resource and the operation. It is readily distinguishable from sibling tools like export_jobs or export_job_history because it is explicitly scoped to job notes and an export feed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: use this for bulk synchronization, and it explains the feed consumption protocol with from, continueFrom, hasMore, and polling. It does not explicitly name alternatives or exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_jobsARead-onlyIdempotent
Read the incremental jobs export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It reveals feed behavior beyond the annotations: the need to continue with continueFrom while hasMore is true, waiting when hasMore is false, and the risk that includeRecentChanges repeats records. This complements the readOnly/idempotent hints without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences pack the purpose, iteration protocol, and a caveat with no filler. The main instruction is front-loaded before the parameter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the full lifecycle of using the feed: how to start, when to continue, when to wait, and the key caveat about includeRecentChanges. With the output schema presumably documenting hasMore and continueFrom, nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds practical parameter semantics: from may be a date or omitted to start at the beginning, and includeRecentChanges trades potential duplicates for sooner results. This is meaningful extra context beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Read the incremental jobs export feed for bulk synchronization.' This clearly distinguishes it from sibling exports like export_job_notes and export_job_history, which target different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context and operational guidance: start with a date or omit from, poll while hasMore is true, retain and wait when false. It does not explicitly name alternatives or exclusion conditions, but the bulk-synchronization purpose and pagination protocol make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_job_splitsARead-onlyIdempotent
Read the incremental job splits export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses feed-specific behavior beyond the annotation set: pagination via hasMore, continuation token usage, and a non-obvious warning that includeRecentChanges 'may return records sooner but can repeat them'. It also advises polling backoff by telling the caller to 'wait before polling again'. This adds valuable context on top of the readOnlyHint/idempotentHint annotations, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with each earning its place: the first states purpose, the second defines the full pagination and polling sequence, and the third adds a necessary caveat. It is front-loaded, clear, and contains no filler or redundant restatement of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers initialization, continuation, polling behavior, and the includeRecentChanges caveat, which is sufficient for a read-only incremental export tool. The output schema can document the exact response fields, so not restating them is acceptable. The main gap is that it never explicitly says to pass the returned continueFrom value as the 'from' parameter on the next request, though it is strongly implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema description coverage is 100%, the baseline is 3, but the description adds meaningful usage semantics: 'from' can be a date or omitted to start at the beginning, and 'includeRecentChanges' trades timeliness for possible duplicates. The only ambiguity is that 'continueFrom' is not explicitly mapped back to the 'from' parameter, though context implies it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb, 'Read', a specific resource, 'incremental job splits export feed', and an explicit purpose, 'for bulk synchronization'. The name plus description clearly differentiates it from sibling list tools like dispatch_job_splits_list and export_jobs by positioning it as an incremental feed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete, sequenced usage protocol: 'Start with a date or omit from', 'continue immediately with continueFrom while hasMore is true', and 'when false retain it and wait before polling again'. It provides clear context on how to paginate and poll, but it does not name alternative tools or specify when not to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_leadsARead-onlyIdempotent
Read the incremental leads export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world behavior. The description adds substantial behavioral detail beyond those annotations: the incremental feed semantics, token-based continuation, polling cadence, and the repeat-records caveat for includeRecentChanges. This gives an agent a realistic model of how the feed behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler. The first sentence establishes purpose, the second explains pagination/continuation, and the third warns about duplicate records. Information is front-loaded and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a feed-based export tool with an output schema and rich annotations, the description covers the essential protocol: how to start, how to continue, when to stop polling, and the repeat-record caveat. An agent has enough context to invoke and iterate correctly without ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the behavioral role of 'from' (start at beginning if omitted) and 'includeRecentChanges' (sooner results but possible duplicates), which goes beyond the schema's basic property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental leads export feed for bulk synchronization.' This clearly identifies the tool as a read-only feed for leads and distinguishes it from sibling export feeds like export_customers or export_appointments by naming the entity (leads) and the mode (incremental feed).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete operational guidance: start with a date or omit from, continue with continueFrom while hasMore is true, retain the token and wait before polling again when hasMore is false, and understand includeRecentChanges trade-offs. It does not explicitly compare against alternatives like crm_leads_list, but the 'bulk synchronization' context makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_locationsARead-onlyIdempotent
Read the incremental locations export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses the feed protocol (hasMore, continuation token) and the repeat-records caveat for includeRecentChanges. These are non-obvious behaviors an agent needs to know to synchronize correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler, and the feed semantics are front-loaded. Minor grammatical awkwardness ('omit from to start') and the undefined-in-schema 'continueFrom' wording keep it from a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read tool with an output schema and safety annotations, the description covers the end-to-end polling loop. It would be more complete with an explicit statement of how 'continueFrom' maps to the 'from' parameter, though the schema partially covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already defines 'from' and 'includeRecentChanges'. The description adds operational meaning: 'from' can be a date or omitted for feed start, and includeRecentChanges trades up-to-dateness for possible duplicates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Read') and a precise resource ('incremental locations export feed'), and states the intended use case ('bulk synchronization'). This clearly distinguishes it from the many sibling export_* tools by naming the location entity and its incremental-feed nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains how to paginate the feed: start with a date or omit 'from', continue with 'continueFrom' while 'hasMore' is true, and retain/wait when false. It does not explicitly name alternative tools or exclusion conditions, but it gives enough context for the bulk-sync scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_locations_contactsARead-onlyIdempotent
Read the incremental locations contacts export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses key feed behaviors: incremental continuation via continueFrom/hasMore, the need to retain the token when the feed is exhausted, and the risk that includeRecentChanges returns records that may repeat. This materially helps an agent predict response behavior without calling the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences front-load the tool's purpose then deliver the continuation algorithm and a warning about includeRecentChanges. No filler is present and the structure matches the order an agent needs: what, how to start, how to continue, edge-case behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only feed tool with an output schema present, the description covers the only non-schema behavior an agent needs: initialization, continuation, termination, and the includeRecentChanges caveat. Nothing essential about calling the tool correctly is left ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, and the description adds useful semantics beyond the schema: omitting from starts at the beginning, and includeRecentChanges may return data sooner but with possible duplicates. This goes beyond the schema's 'Continuation token or date string' and 'not yet committed' wording.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb, resource, and use case: 'Read the incremental locations contacts export feed for bulk synchronization.' It clearly conveys what the tool does, though it does not explicitly contrast it with sibling export feeds such as export_locations or export_customers_contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides concrete operational guidance: start with a date or omit from for the beginning, follow continueFrom while hasMore is true, and stop polling when hasMore is false. It does not name alternative tools, but the when-to-use is clear from the bulk synchronization context and feed semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_materialsARead-onlyIdempotent
Read the incremental materials export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and openWorldHint, but the description adds meaningful behavioral detail: the feed can be started from a date or from the beginning, continuation uses hasMore/continueFrom, and includeRecentChanges may return duplicates. This goes beyond what annotations and the schema alone reveal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core purpose, explain the full pagination lifecycle without extraneous content. Every sentence contributes operational guidance an agent needs to use the feed correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk-sync export feed, the description covers initialization, continuation, terminal behavior, and the duplicate risk of includeRecentChanges. Since an output schema exists, the description does not need to enumerate return fields, and the guidance is complete enough to drive correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining that 'from' can be omitted to start at the beginning and that includeRecentChanges can cause records to repeat. The only slight weakness is that 'continueFrom' is mentioned without explicitly stating that it should be passed back as the 'from' parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental materials export feed for bulk synchronization.' It clearly identifies the tool as an export/read operation for materials, and the 'incremental' qualifier distinguishes it from other export_* siblings like export_inventory_bills or export_services.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context for when and how to use this tool: start with a date, omit from for the beginning, continue as long as hasMore is true, and wait before polling when hasMore is false. It does not explicitly exclude alternatives or name sibling tools, but the purpose and pagination protocol make its intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_membershipsARead-onlyIdempotent
Read the incremental memberships export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior; the description adds meaningful behavioral detail beyond that: pagination semantics, polling/waiting, and the duplicate risk of includeRecentChanges. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler. The purpose is front-loaded, and the remaining sentences pack the entire pagination protocol into minimal words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides everything needed to use the feed correctly: how to start, continue, stop, when to wait, and the consistency caveat. With an output schema present, return-structure details do not need to be repeated in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers both parameters fully, and the description supplements this by explaining how to use 'from' as a date or omitted start point and the trade-off of includeRecentChanges (sooner but repeatable). Minor ambiguity: it references 'continueFrom' while the input schema uses 'from', though the intended feed-back loop is inferable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read the incremental memberships export feed for bulk synchronization.' The 'incremental ... feed' wording clearly distinguishes it from static membership list or other export tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit, actionable protocol: start with a date or omit from, follow continueFrom while hasMore is true, then retain and wait. It clearly states the intended use case (bulk synchronization), though it does not explicitly name alternatives or when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_membership_status_changesARead-onlyIdempotent
Read the incremental membership status changes export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnly/openWorld/idempotent annotations by explaining feed continuation, polling behavior, and the fact that includeRecentChanges may return records sooner but can repeat them. This is important operational behavior an agent must know to avoid data loss or duplicate processing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the tool's purpose, followed by the exact feed-consumption algorithm and a caveat about includeRecentChanges. There is no filler or repetition of structured metadata.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an incremental export feed, the description covers the full lifecycle: initial start, continuation, termination/polling behavior, and optional recent-uncommitted changes. Since an output schema exists, return shape details are already available, so the description is appropriately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though the schema already documents both parameters, the description adds meaningful operational semantics: omitting from starts at the beginning, continuation should use the returned token, and includeRecentChanges trades freshness for possible repeats. The only minor gap is that continueFrom is not explicitly mapped to the schema's from parameter, but the schema's 'continuation token' language makes that inferable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool reads an incremental export feed of membership status changes for bulk synchronization. The verb 'read' plus the specific resource and intent distinguish it from list-oriented sibling tools such as memberships_status_changes_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete consumption protocol: start with a date or omit from, continue with continueFrom while hasMore is true, retain the token and wait when false. It does not explicitly name alternative tools for one-off queries, but the bulk-sync context makes the intended usage unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_membership_typesARead-onlyIdempotent
Read the incremental membership types export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, idempotent, and non-destructive behavior. The description adds valuable behavioral context beyond the annotations: it explains the incremental feed loop, the use of 'hasMore', and the possibility that 'includeRecentChanges' may return duplicate records. This is useful transparency for an agent planning a sync operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three dense sentences with no filler. It front-loads the core purpose and then delivers the essential protocol details. Every sentence earns its place by contributing operational information needed to use the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the annotations cover safety, the description covers the main operational loop: starting, continuing, stopping, and polling. It lacks explicit details about error handling, ordering guarantees, or precise wait times, but these are not essential for basic correct invocation. The slight 'continueFrom' ambiguity prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters with 100% coverage. The description adds meaningful guidance: 'from' can be a date or omitted to start at the beginning, and 'includeRecentChanges' may return records sooner but can repeat them. One minor gap is that 'continueFrom' is mentioned but not explicitly connected to the 'from' input parameter, leaving a small ambiguity about how to pass the token back.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb-resource pair: 'Read the incremental membership types export feed for bulk synchronization.' It clearly identifies the resource as 'membership types' which distinguishes it from sibling tools like export_memberships and export_membership_status_changes. The purpose is immediately obvious without needing to inspect the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on how to start, continue, and pause polling: start with a date or omit 'from', continue with 'continueFrom' while 'hasMore' is true, and retain the token when false. It also explains the trade-off of 'includeRecentChanges'. It does not name alternative tools or explicitly state when not to use this tool, but the resource-specific purpose makes the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_paymentsARead-onlyIdempotent
Read the incremental payments export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/destructive annotations, it discloses incremental-feed behavior, continuation via continueFrom/hasMore, polling discipline, and the fact that includeRecentChanges may return duplicate records. The only weakness is not mapping continueFrom explicitly back to the from parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-load the purpose and then pack the necessary iteration/polling protocol without extra filler. Every sentence contributes to correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent incremental feed with an output schema and only two documented parameters, the description covers start, continuation, polling, and duplicate-repetition semantics. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema already covers both params (100% coverage), but the description adds operational value: omitting from starts at the beginning, and includeRecentChanges trades recency for possible duplicates. Minor ambiguity: 'continue immediately with continueFrom' refers to a term not in the schema rather than explicitly saying to pass it as from.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource ('payments export feed') and the intended use ('bulk synchronization'), and uses the verb 'Read'. This clearly distinguishes it from the large family of sibling export_* tools by resource and feed semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit protocol: start with a date or omit from to begin at feed start, continue while hasMore is true, retain the token and wait before polling when false. It establishes when to use the tool (bulk synchronization) but doesn't mention alternatives 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.
export_payroll_adjustmentsARead-onlyIdempotent
Read the incremental payroll adjustments export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds substantial behavioral context beyond that: the continuation token protocol, hasMore semantics, the need to wait before re-polling, and the fact that includeRecentChanges may return duplicate records. This is rich and non-obvious behavior clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences with no filler. It front-loads the core purpose, then immediately provides the essential polling algorithm and caveat. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an incremental export feed tool with annotations and an output schema, the description covers the full lifecycle: how to start, how to continue, how to know when to stop, and when to poll again. The includeRecentChanges caveat is also disclosed. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters with 100% coverage, giving a baseline of 3. The description adds meaningful semantics by explaining how to use 'from' as a starting point or omit it, and by clarifying that includeRecentChanges returns records sooner but may repeat them. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Read'), a specific resource ('incremental payroll adjustments export feed'), and the purpose ('bulk synchronization'). It distinguishes itself from ordinary list/get endpoints by emphasizing the incremental feed nature, though it does not explicitly call out sibling alternatives like export_adjustments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear, actionable usage guidance: start with a date or omit it, continue with continueFrom while hasMore is true, and retain the token when false before polling again. It also explains the tradeoff of includeRecentChanges. However, it does not explicitly mention when not to use this tool or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_payroll_settingsARead-onlyIdempotent
Read the incremental payroll settings export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds substantial behavioral context beyond that: incremental feed semantics, continuation token handling, polling/wait behavior, and the fact that records may repeat when `includeRecentChanges` is used. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: two sentences cover purpose, start condition, continuation, termination, waiting behavior, and a caveat. The main purpose is front-loaded, and every sentence adds useful information without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema covers return fields, and annotations cover the read-only/idempotent safety profile, the description fully covers the operational details an agent needs: how to begin, how to continue, when to stop, when to wait, and when duplicates may occur. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds extra meaning by explaining how to start with `from` and by warning that `includeRecentChanges` can cause repeated records. This goes beyond the schema without being redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental payroll settings export feed for bulk synchronization.' This clearly identifies what the tool does and distinguishes it from the many sibling export_* feeds by naming the exact resource. There is no ambiguity about its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit usage protocol: start with a date or omit `from`, continue with `continueFrom` while `hasMore` is true, and wait after retaining it when false. It also documents the tradeoff of `includeRecentChanges`. It does not name alternative tools explicitly, but the polling and continuation guidance is complete enough to use it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_project_notesARead-onlyIdempotent
Read the incremental project notes export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and non-destructive behavior, so the description adds meaningful extra context: the feed is incremental, pagination uses continueFrom/hasMore, hasMore false means wait before polling again, and includeRecentChanges may return records sooner but can repeat them. This is valuable behavioral detail beyond what annotations and schema alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three dense, purposeful sentences. The first sentence front-loads what the tool does and why, the second provides the pagination runbook, and the third flags an important edge-case behavior. There is no filler or redundant repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the full lifecycle of an incremental feed: starting, continuing, waiting, and the recent-changes duplication caveat. Return shape is left to the output schema, which is reasonable. The main gap is that it never explicitly states that continueFrom from the output should be passed back into the from parameter, so an agent must infer that mapping.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are already described in the input schema, so the baseline is 3. The description adds further semantic value by explaining that from is optional and can be omitted to start at the beginning, and by revealing the duplicate-risk tradeoff of includeRecentChanges. It could be stronger by clarifying the continuation token format and the default value of includeRecentChanges.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Read'), a specific resource ('the incremental project notes export feed'), and the intended purpose ('for bulk synchronization'). It does not explicitly differentiate from sibling feeds such as export_projects or dispatch_projects_notes_list, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational instructions: start from a date or omit from to begin, continue with continueFrom while hasMore is true, retain the token and wait before polling when hasMore is false, and understand includeRecentChanges can return duplicates. It provides clear context for using this feed, though it does not name alternatives or explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_projectsARead-onlyIdempotent
Read the incremental projects export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent, openWorld), the description discloses key feed behaviors: pagination via continueFrom, the hasMore loop, polling cadence, and the fact that includeRecentChanges can return duplicate records. This is substantial behavioral context that an agent needs to use the tool correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but not bloated; each sentence contributes to the protocol. The main purpose is front-loaded, followed by continuation and polling mechanics. Minor structural polish could improve readability, but there is no wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema available and annotations already indicating safety and idempotency, the description fully covers the incremental feed consumption protocol. It explains initialization, continuation, termination, polling, and the semantics of the optional parameter, leaving no critical gap for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the description does not need to restate parameter basics. It adds value by explaining that omitting 'from' starts at the beginning of the feed and that includeRecentChanges trades timeliness for duplication, which goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb ('Read'), a specific resource ('incremental projects export feed'), and an explicit purpose ('bulk synchronization'). It clearly distinguishes this from ordinary project listing endpoints and other export feeds by focusing on incremental, continuation-based reading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit operational guidance: start with a date or omit from, continue immediately with continueFrom while hasMore is true, and wait before polling again when hasMore is false. It does not name alternative non-incremental tools or explicitly state when not to use this tool, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_purchase_ordersARead-onlyIdempotent
Read the incremental purchase orders export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag read-only, idempotent, open-world behavior, and the description adds the non-obvious feed mechanics: the hasMore/continueFrom loop, pause-and-poll behavior, and the duplicate/early-return caveat for includeRecentChanges. This is exactly the behavioral context an agent needs beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: purpose first, then the start/continue/termination algorithm, then the important caveat. Every sentence carries operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter incremental feed with an output schema and clear annotations, the description covers how to start, how to page, when to stop, and what caveat to expect. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning: 'from' can be omitted to start at the beginning, and includeRecentChanges may return records sooner but can repeat them. It does not explicitly map the response's continueFrom value back to the from parameter, but the schema already documents from as a continuation token.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental purchase orders export feed for bulk synchronization.' It clearly identifies this as the incremental bulk-export variant among many purchase-order and export siblings, so an agent can distinguish it from inventory_purchase_orders_get/list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context (bulk synchronization) and concrete polling instructions: start with a date or omit from, continue with continueFrom while hasMore is true, and retain/wait when hasMore is false. It does not explicitly name alternatives or say when not to use the feed, so it falls short of the highest bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_recurring_service_typesARead-onlyIdempotent
Read the incremental recurring service types export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds meaningful behavioral context beyond those: the feed cursor protocol (hasMore/continueFrom iteration), the instruction to retain the token and wait before re-polling, and the caveat that includeRecentChanges can return records sooner but may repeat them. This reveals at-least-once delivery semantics and polling behavior that annotations cannot express. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler, with the core purpose front-loaded in the first clause and the polling protocol following in logical order. Every sentence contributes operational information, and the density is appropriate for the complexity of an incremental-feed tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a feed tool with an output schema (presumably documenting hasMore/continueFrom), full parameter coverage, and safety covered by annotations, the description is nearly complete. The polling loop, token retention, and duplicate-record caveat are all covered. The only gap is specificity around the retry/wait behavior — 'wait before polling again' leaves the wait duration unspecified, and there is no rate-limit guidance, which is useful for bulk-sync feeds.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value beyond the schema. For 'from', it clarifies initialization semantics ('Start with a date or omit from to start at the beginning of the feed'), which the schema's 'Continuation token or date string' leaves ambiguous. For includeRecentChanges, it adds the behavioral tradeoff of sooner-return but duplicate records, giving the agent more than the schema's terse 'Include recent changes not yet committed.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Read the incremental recurring service types export feed') and names the purpose ('bulk synchronization'), which clearly distinguishes it from the sibling list/get endpoints like memberships_recurring_service_types_list and memberships_recurring_service_types_get. The 'incremental export feed' phrasing immediately signals this is the bulk-sync variant, not a plain read endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear operational context: start with a date or omit 'from', continue with the returned token while hasMore is true, and retain it and wait when hasMore is false. This is actionable when-to-invoke guidance. However, it does not explicitly contrast this tool with the alternative single-record/list siblings, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_returnsARead-onlyIdempotent
Read the incremental returns export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses the feed's incremental behavior, the continuation protocol, and the important caveat that includeRecentChanges may return records sooner but can repeat them. This is exactly the kind of behavioral context an agent needs to avoid polling mistakes and handle duplicates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences cover purpose, startup, continuation, backoff, and duplicate behavior with no filler. The most important action ('Start with a date or omit from') is front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and annotations are available, the description provides everything needed to drive the incremental loop correctly: initial state, continuation condition, waiting behavior, and the duplicate-risk caveat. It is complete for a bulk synchronization feed tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3, but the description adds real value by explaining how to initialize from, how to continue using the feed token, and what includeRecentChanges trades off. The only weakness is that 'continueFrom' is mentioned without explicitly stating that its returned value should be passed back as the from parameter, which could confuse an agent at first read.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental returns export feed for bulk synchronization.' This clearly identifies the tool as a bulk-export reader for returns and distinguishes it from the many other export_* siblings by domain. It could be slightly stronger if it named an alternative or said whether this covers inventory returns rather than financial returns, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit operational guidance: start with a date or omit from to begin at the start, follow continueFrom while hasMore is true, and retain the token and wait before polling again when hasMore is false. This clearly conveys the polling/continuation context. It does not explicitly state when not to use this tool or mention a sibling alternative, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_service_agreementsARead-onlyIdempotent
Read the incremental service agreements export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description discloses key feed behaviors: starting from the beginning, continuing with continueFrom while hasMore is true, retaining the token when false, waiting before polling, and the duplicate risk with includeRecentChanges. This is valuable operational context not available in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences deliver the purpose, the pagination/continuation protocol, and the caveat about includeRecentChanges. Every sentence earns its place, and the purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and annotations cover safety/idempotency, the description covers the entire polling lifecycle: initial start, continuation, retention, waiting, and duplicate behavior. This is sufficient for an agent to invoke and iterate on the feed correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds meaningful semantics: 'from' can be omitted to start at the beginning or used as a continuation, and 'includeRecentChanges' may return records sooner but can repeat them. This goes well beyond the bare schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read', the resource 'incremental service agreements export feed', and the purpose 'for bulk synchronization'. This distinguishes it from simple list/get siblings by emphasizing the feed-style incremental export behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context that this tool is for bulk synchronization via an incremental feed. It does not explicitly name alternatives or state when not to use the tool, but the purpose and feed protocol are clear enough to guide correct use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_servicesARead-onlyIdempotent
Read the incremental services export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds meaningful behavioral detail beyond that: the incremental feed protocol with hasMore, continueFrom, polling guidance, and the caveat that includeRecentChanges may return duplicate records. This significantly improves an agent's ability to invoke it correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences deliver a complete usage loop without any filler. The main action is front-loaded, and every sentence provides necessary operational or behavioral information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema available, the description does not need to detail return values. It covers the full consumption protocol, including start, continuation, termination, polling, and the includeRecentChanges caveat, making it complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents both parameters, so the baseline is 3. The description adds value by explaining how 'from' initializes the feed and how includeRecentChanges affects result recency and duplication, which is not stated in the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the incremental services export feed for bulk synchronization.' This clearly distinguishes it from the many sibling export_* tools by naming the resource type and the feed purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit operational guidance: start with a date or omit from, continue using continueFrom while hasMore is true, retain the token and wait when false, and understand includeRecentChanges trade-offs. It does not explicitly name alternatives or exclusion criteria, but the 'services' scope makes the intended use clear within the export family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_tag_typesARead-onlyIdempotent
Read the incremental tag-type export feed for cross-domain bulk synchronization. This is the same feed as settings_tag_types_export; use whichever name is available and do not fetch both. Continue immediately with continueFrom while hasMore is true; when false, retain it and wait before polling again. includeRecentChanges may repeat records.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals key behavioral details beyond the annotations: incremental continuation semantics, the instruction to wait before polling again, and the caveat that includeRecentChanges may repeat records. The readOnlyHint, idempotentHint, and openWorldHint annotations are consistent with the described read-only incremental feed behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler: purpose, alias handling, polling behavior, and duplicate caveat are all covered. The most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations and presence of an output schema, the description covers the necessary operational context: what the feed is, how to avoid duplicate fetching, how to paginate, and how to handle uncommitted changes. Nothing essential is missing for correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents 'from' and 'includeRecentChanges'. The description adds valuable meaning by explaining the continuation flow via 'continueFrom' and 'hasMore' and warning that includeRecentChanges may cause duplicate records. However, it does not explicitly connect the output field 'continueFrom' back to the input parameter 'from'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Read the incremental tag-type export feed for cross-domain bulk synchronization.' It also explicitly distinguishes itself from the sibling tool settings_tag_types_export by noting it is the same feed, so an agent can identify what this tool is for without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit alternative guidance: 'This is the same feed as settings_tag_types_export; use whichever name is available and do not fetch both.' It also provides a clear polling protocol with continueFrom and hasMore, including what to do when hasMore is false.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_techniciansARead-onlyIdempotent
Read the incremental technicians export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, and the description adds valuable stateful semantics about incremental feeds: continuation tokens, immediate polling while hasMore is true, waiting when false, and possible repeated records with includeRecentChanges. This goes well beyond the annotations and clearly describes the tool's behavioral contract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with three sentences covering purpose, invocation sequence, and a caveat. Minor phrasing ambiguities, such as 'omit from' and 'when false retain it', prevent it from being perfectly clear and earning a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the full lifecycle of consuming an incremental feed: start, continue, pause/wait, and the effect of includeRecentChanges. An output schema exists, so return fields need not be enumerated, but the description does not explicitly state that the returned continueFrom should be passed back as the 'from' parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds extra meaning by explaining that omitting 'from' starts at the beginning and that includeRecentChanges may return records sooner but can repeat them. However, it references 'continueFrom' as if it were a parameter, while the schema only exposes 'from', making the token-to-parameter mapping slightly ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Read'), resource ('technicians export feed'), and purpose ('bulk synchronization'), making the tool's function clear. It does not explicitly contrast itself with sibling tools like export_employees or people_employees_export, so it lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear operational guidance: start with a date or omit 'from', continue with the token while hasMore is true, retain and wait when hasMore is false, and understand that includeRecentChanges can return duplicates. It does not mention alternative tools or exclusion conditions, but the use case is well contextualized.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_timesheet_codesARead-onlyIdempotent
Read the incremental timesheet codes export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description goes further by disclosing pagination semantics (hasMore/continueFrom) and the non-obvious caveat that includeRecentChanges can return records sooner but may repeat them. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. The core purpose is front-loaded, and each sentence delivers actionable behavior (how to start, continue, wait, and handle includeRecentChanges).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the full polling lifecycle: starting, continuing while hasMore is true, retaining and waiting when false, and the includeRecentChanges caveat. Since an output schema exists, return-value details are not the description's burden. For an incremental feed tool, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters (100% coverage), so the baseline is 3. The description adds practical semantics by explaining that 'from' can be a date or omitted to start at the beginning of the feed, and that includeRecentChanges is a tradeoff between receiving records sooner and seeing duplicates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read'), a specific resource ('incremental timesheet codes export feed'), and a purpose ('bulk synchronization'). It does not explicitly name sibling alternatives like payroll_timesheet_codes_list, but the 'incremental export feed' language helps distinguish it from list-style endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit polling instructions: start with a date or omit from, continue with continueFrom while hasMore is true, wait when hasMore is false, and warns about includeRecentChanges behavior. This is clear invocation context, though it never explicitly names alternatives for one-off reads, so it stops short of when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_transfersARead-onlyIdempotent
Read the incremental transfers export feed for bulk synchronization. Start with a date or omit from to start at the beginning of the feed, continue immediately with continueFrom while hasMore is true, and when false retain it and wait before polling again. includeRecentChanges may return records sooner but can repeat them.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token or date string for incremental export | |
| includeRecentChanges | No | Include recent changes not yet committed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals behavior beyond the annotations: incremental feed semantics, continuation-token polling, the hasMore loop, and the fact that includeRecentChanges can return duplicate records. This is exactly the kind of operational nuance that an agent needs to call the tool correctly and interpret results safely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry a complete pagination algorithm without waste. The key start condition is front-loaded, and the tradeoff around includeRecentChanges is stated in a compact final clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the annotations declare read-only, idempotent, non-destructive behavior, the description covers everything needed: how to start, how to advance, when to stop, and how to handle the optional parameter's duplication risk. Nothing essential is missing for an agent to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by explaining that omitting from starts at the beginning and that the continuation token should be passed along. It also clarifies that includeRecentChanges may return records sooner but at the cost of possible repeats. The only small gap is that 'continueFrom' is referenced as a concept rather than being explicitly tied to the 'from' parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Read the incremental transfers export feed for bulk synchronization,' which names a specific verb, resource (transfers), and intent. This clearly differentiates it from the many other export_* sibling tools by focusing on the transfers feed and its bulk-sync purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit operational guidance: start with a date or omit from, continue with continueFrom while hasMore is true, retain the token when false and wait before polling again, and notes the tradeoff of includeRecentChanges. It does not explicitly mention when to prefer this over sibling export or list tools, but the feed-specific language makes the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
intel_campaign_performanceARead-onlyIdempotent
Compare marketing campaigns over the selected date range by combining all fetched call, booking, job, and invoice pages. Returns calls, bookings, booked-call conversion, attributed revenue, and revenue per call; campaignId narrows the analysis to one known campaign. The metrics reflect the wrapper's cross-source attribution logic, and partial source failures are returned in _warnings.
Examples:
"Which marketing campaigns are working?" -> startDate="2026-01-01", endDate="2026-03-10"
"How many calls are we getting from Google Ads?" -> startDate="2026-01-01", endDate="2026-03-10", campaignId=
"What's our call-to-booking rate?" -> startDate="2026-01-01", endDate="2026-03-10"
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max campaigns to analyze (default 20, max 50). | |
| endDate | Yes | End date (YYYY-MM-DD) | |
| startDate | Yes | Start date (YYYY-MM-DD) | |
| campaignId | No | Single campaign (omit for all) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the readOnly/idempotent annotations: it combines all fetched call, booking, job, and invoice pages, relies on the wrapper's cross-source attribution logic, and reports partial source failures in _warnings. This is useful operational context that the annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently front-loaded with purpose, outputs, and key behavioral caveats, followed by three illustrative examples. The examples are relevant and earned; only minor redundancy exists between the prose and examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema is present and all parameters are documented in the input schema, the description covers the important non-schema context: attribution behavior, warning reporting, campaign filtering, and use-case examples. It is adequately complete for an analytics wrapper tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value for campaignId by explaining it 'narrows the analysis to one known campaign' and demonstrates startDate/endDate usage in examples, but does not add substantial semantics beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific action and resource: 'Compare marketing campaigns over the selected date range' and enumerates concrete outputs (calls, bookings, conversion, attributed revenue, revenue per call). It clearly distinguishes this from raw marketing list endpoints and from other intel_* analytics siblings by focusing on campaign-level comparison with cross-source attribution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The natural-language examples provide clear contexts: campaign comparison, source-specific call volume, and call-to-booking rate. There is no explicit statement of when not to use it or which alternative to choose, but the examples and 'campaignId narrows the analysis' give strong implied usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
intel_csr_performanceARead-onlyIdempotent
Summarize CSR-attributed jobs from Report 162 for the selected date range. Returns booked-job counts, revenue, average ticket, campaign and job-type mixes, rankings, and team averages; an optional business-unit name narrows matching report rows. Report execution is cached briefly and may wait for per-report/client spacing; unavailable source data is identified in _warnings.
Examples:
"How are our CSRs performing this month?" -> startDate="2026-03-01", endDate="2026-04-01"
"Show CSR booking revenue for last quarter" -> startDate="2025-10-01", endDate="2026-01-01"
"Which CSR is booking the most revenue for plumbing?" -> startDate="2026-01-01", endDate="2026-03-10", businessUnitName="Plumbing"
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | End date (YYYY-MM-DD) | |
| startDate | Yes | Start date (YYYY-MM-DD) | |
| businessUnitId | No | Filter by business unit ID | |
| businessUnitName | No | Filter by business unit name (resolved via cache, e.g. 'HVAC'). Alternative to businessUnitId. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds valuable behavioral context beyond that: report execution is cached briefly, may wait due to per-report/client spacing, and unavailable source data is surfaced in _warnings. This gives the agent realistic expectations about latency and error reporting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a front-loaded purpose and metric list, one sentence on execution behavior, then three directly relevant examples. Every sentence contributes useful information, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to document return fields. It covers the source report, the date-window requirement, optional business-unit filtering, caching and spacing delays, and warning behavior, which is complete for both selection and invocation. The annotations handle the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The examples add real meaning above the schema by showing that endDate is exclusive, as this month maps to 2026-03-01 through 2026-04-01, and last quarter maps to 2025-10-01 through 2026-01-01. This clarifies date-range semantics that the schema alone does not state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description leads with a specific verb and resource: Summarize CSR-attributed jobs from Report 162. It then enumerates the exact metrics returned, such as booked-job counts, revenue, average ticket, mixes, rankings, and team averages, making its purpose unmistakable and distinguishable from the many intel_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The natural-language examples provide clear trigger scenarios, such as asking about CSR performance for a month, quarter, or specific business unit. It does not explicitly name sibling alternatives or state when not to use this tool, but the CSR-attributed scope and examples give sufficient context for when it applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
intel_daily_snapshotARead-onlyIdempotent
Build a one-day operational snapshot in the configured tenant timezone from all fetched appointment, job, invoice, payment, estimate, and call pages plus Report 163 for the next day. Returns appointment progress, daily invoiced revenue and collections, sold-estimate value, call outcomes, highlights, and at most 20 upcoming jobs; truncation and partial source failures appear in _warnings. Results are cached for 60 seconds.
Examples:
"How did today go?" -> date="2026-03-10"
"Give me yesterday's numbers" -> date="2026-03-09"
"What happened on Monday?" -> date="2026-03-09"
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date to snapshot (YYYY-MM-DD, defaults to today) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive, and the description adds meaningful behavior beyond that: 60-second caching, configured tenant timezone, _warnings for truncation and partial source failures, and the 20-job cap. This is exactly the kind of contextual disclosure that helps an agent reason about the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded: capability, return summary, caveats, then examples, with no filler. The phrase 'plus Report 163 for the next day' is slightly awkward and could be clearer, which prevents a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only aggregation tool with one optional parameter and an output schema, the description covers inputs, outputs, limits, failure behavior, and caching. Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents date with format and default behavior, and schema coverage is 100%. The description adds concrete example values with natural-language equivalents, which helps an agent correctly map user intent to the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb/resource ('Build a one-day operational snapshot') and enumerates the source domains and returned metrics, so it is clearly not a tautology. It does not explicitly compare itself to sibling tools like intel_revenue_summary, but the broad multi-source scope makes its purpose identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The examples map natural-language questions to the date parameter, which implies this tool is for daily business-review questions. However, there is no explicit guidance about when to use it versus the overlapping intel_* tools or when not to use it, leaving selection partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
intel_estimate_pipelineARead-onlyIdempotent
Analyze all fetched estimate pages as an open, sold, and dismissed pipeline, with value, conversion, close speed, age buckets, and open estimates older than 30 days. startDate and endDate bound estimate creation timestamps; when both are supplied, Report 172 adds technician sales metrics. soldById filters both sources. Partial source failures are returned in _warnings.
Examples:
"What's our close rate on estimates?" -> startDate="2026-01-01", endDate="2026-03-10"
"Show me stale estimates over 30 days" -> returns staleEstimates automatically
"How is Andrew doing on sales?" -> soldById=<Andrew's ID>
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | Filter estimates created before this date | |
| soldById | No | Filter by salesperson/technician | |
| startDate | No | Filter estimates created after this date |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds valuable runtime behavior beyond annotations: partial source failures are surfaced in _warnings, soldById filters both sources, and providing both dates triggers technician sales metrics. It also notes automatic stale-estimate handling. No contradiction with the readOnly/idempotent annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then parameter behavior, then three illustrative examples. Every sentence adds value without repeating the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering the safety profile, the description sufficiently covers what the tool does, how parameters interact, and how partial failures are flagged. Minor ambiguity around 'all fetched estimate pages' and lack of explicit sibling routing are the only notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description enriches parameter meaning: startDate/endDate are creation-timestamp bounds, both dates together enable Report 172 metrics, and soldById applies across both sources. Examples also demonstrate concrete parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific analytical verb ('Analyze') and a concrete resource (estimate pages) with clear dimensions: open, sold, and dismissed pipeline, value, conversion, close speed, age buckets, and stale estimates. It is distinguishable from raw estimate list/export tools, though it does not explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides natural-language examples that map user intents to parameter values, and clearly explains conditional behavior (Report 172 only when both dates are supplied). It implies when to use this tool, but does not explicitly contrast it with alternatives like estimates_list or other intel tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
intel_invoice_trackingARead-onlyIdempotent
Track invoice email delivery for the selected date range by combining and deduplicating Reports 2281 and 2282. Returns sent and not-sent counts, send rate, invoice amount and balance impact, and unsent breakdowns by business unit and technician; an optional business-unit filter applies to both reports. Report calls may wait for per-report/client spacing, and partial source failures are returned in _warnings.
Examples:
"What percent of invoices were sent this week?" -> startDate="2026-03-02", endDate="2026-03-09"
"Which techs are not sending invoices?" -> startDate="2026-01-01", endDate="2026-03-10"
"Show invoice send rate for plumbing last month" -> startDate="2026-02-01", endDate="2026-03-01", businessUnitName="Plumbing"
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | End date (YYYY-MM-DD) | |
| startDate | Yes | Start date (YYYY-MM-DD) | |
| businessUnitId | No | Filter by business unit ID | |
| businessUnitName | No | Filter by business unit name (resolved via cache, e.g. 'HVAC'). Alternative to businessUnitId. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the tool as read-only, idempotent, and non-destructive. The description adds real behavioral value: it merges and dedupes two reports, may wait for per-report/client spacing, and returns partial source failures in _warnings. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well structured: purpose first, output summary second, operational caveats third, then targeted examples. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description supplies everything else an agent needs: source reports, output categories, filter semantics, latency behavior, failure handling, and example invocations. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are already documented. The description adds meaningful context by clarifying that the optional business-unit filter applies to both source reports, and the examples provide realistic values and natural-language mappings for startDate, endDate, and businessUnitName.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Track invoice email delivery') and resource (Reports 2281 and 2282), then lists concrete outputs such as sent/not-sent counts, send rate, and breakdowns. This clearly distinguishes it from the many sibling intel_* analytics tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The first sentence and examples give clear context for when to use this tool: invoice delivery and send-rate questions over a date range, optionally filtered by business unit. It does not explicitly name alternatives or say when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
intel_labor_costARead-onlyIdempotent
Summarize employee regular, overtime, double-overtime, and total hours from Report 166 for the selected date range. When the tenant report exposes GrossPay, the tool also derives cost and effective hourly rate; otherwise those fields are unavailable rather than estimated. Report execution may wait for per-report/client spacing, and source failures are returned in _warnings.
Examples:
"What labor hours were reported this month?" -> startDate="2026-03-01", endDate="2026-04-01"
"Show overtime hours by employee for Q1" -> startDate="2026-01-01", endDate="2026-04-01"
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | End date (YYYY-MM-DD) | |
| startDate | Yes | Start date (YYYY-MM-DD) | |
| technicianId | No | Filter by technician ID | |
| businessUnitId | No | Filter by business unit ID | |
| technicianName | No | Filter by technician name (resolved via cache, e.g. 'John'). Alternative to technicianId. | |
| businessUnitName | No | Filter by business unit name (resolved via cache, e.g. 'HVAC'). Alternative to businessUnitId. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses valuable behaviors: cost fields depend on whether the tenant report exposes GrossPay, fields are 'unavailable rather than estimated,' execution may wait for report/client spacing, and source failures surface in _warnings. This gives the agent realistic expectations that annotations alone could not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly structured: core purpose first, conditional behavior second, execution/warning caveats third, then two useful examples. Every sentence earns its place, and the examples are compact rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the source report, conditional derivation behavior, execution wait time, and warning conventions. An output schema exists, so return fields do not need to be spelled out. It does not directly discuss optional filters or grouping shape, but the schema descriptions and examples largely compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters. The description adds value by demonstrating date-range semantics through examples (month and Q1 boundaries), which clarifies that endDate acts as an exclusive bound. This is meaningful enrichment beyond the schema's basic YYYY-MM-DD descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Summarize'), a specific source ('Report 166'), and the exact metrics covered (regular, overtime, double-overtime, total hours). It also clarifies when cost/effective hourly rate are derived versus unavailable, which distinguishes it from raw payroll list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The examples give concrete natural-language-to-parameter mappings ('What labor hours were reported this month?' -> startDate/endDate), which gives an agent clear context for when to invoke it. However, it never explicitly names an alternative tool or states when not to use this tool, so it misses the highest bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
intel_lookupARead-onlyIdempotent
Look up technicians, business units, payment types, or membership types for use in intelligence-tool filters. Returns matching IDs and names from a 30-minute in-process cache; search performs a case-insensitive name match, while omission returns the available cached set.
Examples:
"What are our business units?" -> type="business-units"
"Find technician named John" -> type="technicians", search="John"
"List all payment types" -> type="payment-types"
"What membership types do we have?" -> type="membership-types"
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Type of reference data to look up | |
| search | No | Search by name (partial match). Omit to list all. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds meaningful behavior beyond that: results come from a 30-minute in-process cache, matching is case-insensitive, search is a partial name match, and omitting search returns the full cached set. This gives an agent accurate expectations about freshness and matching behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: the core behavior and purpose come first, followed by a concise cache/freshness statement, then four crisp examples that map naturally phrased questions to parameter values. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (two parameters, one enum) and has an output schema, so the description does not need to describe return fields. It covers accepted types, search behavior, cache behavior, and example invocations, which is sufficient for an agent to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the schema already documents both parameters. The description adds value with concrete natural-language-to-parameter examples and the behavior detail that matching is case-insensitive, which is not in the schema. It reinforces rather than merely repeats the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Look up') and explicitly names the four resource types it covers, plus the purpose ('for use in intelligence-tool filters'). The examples reinforce the intended scope and make it clearly distinct from the many list/report siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states that this tool returns filter candidates for intelligence tools and demonstrates how to phrase requests for each type. It does not explicitly name alternatives or exclusions, but the 'for use in intelligence-tool filters' framing gives enough contextual guidance for an agent to choose it over export/list siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
intel_membership_healthARead-onlyIdempotent
Summarize membership activity from Report 182 and business-unit membership opportunities and conversions from Report 178 for the selected date range. Returns active-at-end counts, sales, cancellations, expirations, renewals, other status movements, and conversion metrics; it does not calculate a cohort retention rate. includeServiceRevenue adds tenant-wide invoice service revenue for the period, which is not membership-attributed. Partial source failures are returned in _warnings.
Examples:
"How are memberships doing this year?" -> startDate="2026-01-01", endDate="2026-03-10"
"Show membership status movements last quarter" -> startDate="2025-10-01", endDate="2026-01-01"
"How many new signups vs cancellations?" -> startDate="2026-01-01", endDate="2026-03-10"
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | End date (YYYY-MM-DD) | |
| startDate | Yes | Start date (YYYY-MM-DD) | |
| includeServiceRevenue | No | Include tenant-wide totalServiceRevenue by fetching every available invoice page for the period. Default: false. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive, and the description adds substantial behavioral context beyond that: it identifies source reports, clarifies that includeServiceRevenue adds tenant-wide revenue not attributed to memberships, and discloses that partial source failures surface in _warnings. This gives an agent a realistic model of edge behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: it opens with the core action and result set, adds caveats in the second sentence, and closes with three compact, useful examples. Every sentence contributes meaning without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return-value details are already covered. The description supplies the remaining needed context: date-range semantics, required parameters, optional service-revenue behavior, exclusions, and partial-failure reporting. An agent has enough information to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all parameters with descriptions, including the boolean semantics of includeServiceRevenue. The tool description adds value by mapping natural-language examples to startDate/endDate values and by clarifying that includeServiceRevenue is tenant-wide and not membership-attributed, which is not fully captured in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Summarize'), a clear resource ('membership activity from Report 182... and opportunities/conversions from Report 178'), and a date range scope. It lists the exact metrics returned and explicitly calls out what it does not calculate ('does not calculate a cohort retention rate'), which helps distinguish it from raw membership export or list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The examples provide clear user-intent mappings to parameters ('How are memberships doing this year?' -> startDate='2026-01-01'...), which implies when the tool should be used. However, the description does not explicitly state when to use this tool over alternatives like export_memberships, memberships_status_changes_list, or other intel_* tools, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
intel_revenue_summaryARead-onlyIdempotent
Summarize Report 175 revenue and Report 179 sales for the selected date range, optionally filtered to one business unit. Returns completed, non-job, adjustment, and total revenue plus opportunities, conversion, and sales metrics by business unit; the aggregate reflects returned report rows and is not certified as an all-company total or as matching every tenant dashboard configuration. includeProductivityMetrics adds Report 177 metrics, and includeCollections fetches all payment pages for the period. Report calls are cached briefly and serialized per report/client with at least 65 seconds between starts; a failed source is identified in _warnings and its affected metrics may be empty.
Examples:
"What was our total revenue last month?" -> startDate="2026-02-01", endDate="2026-03-01"
"How much did HVAC bring in this quarter?" -> startDate="2026-01-01", endDate="2026-04-01", businessUnitName="HVAC"
"Revenue year to date" -> startDate="2026-01-01", endDate="2026-03-10"
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | End date (YYYY-MM-DD) | |
| startDate | Yes | Start date (YYYY-MM-DD) | |
| businessUnitId | No | Filter by business unit ID | |
| businessUnitName | No | Filter by business unit name (resolved via cache, e.g. 'HVAC'). Alternative to businessUnitId. | |
| includeCollections | No | Include payments received during the selected period. Default: false. | |
| includeProductivityMetrics | No | Include business-unit productivity metrics from Report 177: revenue per hour, billable efficiency, upsold work, tasks per opportunity, and recalls. Default: false. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive, and the description adds substantial behavioral context: aggregate totals are not certified as all-company figures, calls are cached and serialized with a 65-second gap, failures surface in _warnings, and affected metrics may be empty. This goes well beyond the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: main purpose, return-metric summary, caveat about aggregate certification, optional feature explanations, caching/failure behavior, and practical examples. It is front-loaded with the core purpose and uses examples to anchor parameter usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the annotations cover safety, the description is complete: it names source reports, metric categories, optional filters, failure behavior, caching semantics, and provides runnable examples. An agent has enough to select and invoke the tool correctly without significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters, so the baseline is 3, but the description adds value by clarifying includeProductivityMetrics adds Report 177 metrics, includeCollections fetches all payment pages, and businessUnitName supports natural-language filters like 'HVAC'. The examples also give concrete date-format usage for startDate and endDate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Summarize Report 175 revenue and Report 179 sales...' and clearly states the optional business-unit filter. It also distinguishes the tool from the many intel_* siblings by naming exact reports and metric groups, so an agent can tell what this tool does without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool through natural-language examples mapping to date ranges and an optional business unit. It does not explicitly name alternatives or exclusion conditions, but the examples and report-specific language provide enough guidance for typical revenue-summary queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
intel_technician_scorecardARead-onlyIdempotent
Build a technician scorecard for the selected date range from ServiceTitan technician reports. Returns revenue, converted jobs, opportunities, conversion, productivity, recalls, upsells, and lead-generation metrics; includeExtendedMetrics adds membership and tech/marketing-lead sales reports. Filter by technician or business unit when comparing a subset, and use limit to bound ranked results. Report calls may wait for per-report/client spacing, and partial source failures are returned in _warnings.
Examples:
"How are our techs performing this month?" -> startDate="2026-03-01", endDate="2026-04-01"
"Show me Andrew's numbers for Q1" -> startDate="2026-01-01", endDate="2026-04-01", technicianName="Andrew"
"Who is our top performer this year?" -> startDate="2026-01-01", endDate="2026-03-10"
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max technicians to analyze (default 25, max 50) | |
| endDate | Yes | End date (YYYY-MM-DD) | |
| startDate | Yes | Start date (YYYY-MM-DD) | |
| technicianId | No | Single technician (omit for all) | |
| businessUnitId | No | Filter by business unit | |
| technicianName | No | Single technician by name (resolved via cache, e.g. 'John'). Alternative to technicianId. | |
| businessUnitName | No | Filter by business unit name (resolved via cache, e.g. 'HVAC'). Alternative to businessUnitId. | |
| includeExtendedMetrics | No | Include memberships sold and sales from technician and marketing leads by running Reports 171, 173, and 174. Default: false. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, and non-destructive. The description adds useful runtime context: report calls may wait for per-report/client spacing, and partial source failures are returned in _warnings. This goes beyond the schema and annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and metrics, then moves to filter/limit guidance, behavioral warnings, and examples. Every sentence adds value; there is no redundant repetition of schema defaults or annotation facts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and rich annotations, the description covers purpose, filtering, limit usage, latency, and failure reporting. The only small gap is that the ranking order for 'top performer' is not specified, but the output schema and example queries mostly compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning by explaining that includeExtendedMetrics runs Reports 171, 173, and 174, that filters are for comparing a subset, and that limit bounds ranked results. The examples also show how startDate and endDate are intended to be combined with optional filters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Build') and resource ('technician scorecard') and enumerates the returned metrics: revenue, converted jobs, opportunities, conversion, productivity, recalls, upsells, and lead-generation metrics. This clearly identifies the tool's function and differentiates it from sibling intel_* and people_* tools that focus on revenue summaries, membership health, or employee performance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: selected date range, optional technician/business-unit filters for subset comparison, and limit for bounding ranked results. Includes three concrete example queries mapping natural language to parameters. However, it does not explicitly name alternatives or conditions when not to use this tool, so exclusion guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_purchase_order_markups_getARead-onlyIdempotent
Retrieve a purchase order markup by its ServiceTitan ID. Returns the single upstream record without pagination; use inventory_purchase_order_markups_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Purchase order markup ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, idempotent, and non-destructive behavior. The description adds useful context about single-record return and absence of pagination, which is not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The core action is front-loaded, and the alternative routing is placed in the second sentence without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter retrieval tool with a complete output schema and strong annotations, the description provides all necessary context: what it retrieves, how to identify the record, that no pagination is involved, and where to go when the ID is unavailable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the 'id' parameter is already well-documented by the schema. The description adds the 'ServiceTitan ID' qualifier, which slightly reinforces the identifier meaning but does not significantly expand parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Retrieve'), resource ('purchase order markup'), and lookup key ('ServiceTitan ID'). Explicitly distinguishes itself from the list sibling by noting it returns a single record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing guidance: use inventory_purchase_order_markups_list when the ID is unknown. This clearly identifies when to use this tool versus the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_purchase_order_markups_listARead-onlyIdempotent
List one requested page of purchase-order markup definitions, filterable by IDs and created or modified timestamps. Use inventory_purchase_order_markups_get for one known markup ID; use inventory_purchase_orders_list for purchase-order transactions.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated purchase order markup IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, From, To, Percent | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful pagination and filterability context but does not disclose response shape or any pagination edge behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the operation and scope, and the second provides routing guidance. Information is efficiently front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose, pagination, filterability, and sibling differentiation, and the output schema and annotations cover the rest. It is complete enough for a read-only list tool, though it does not address every potential sibling overlap (e.g., pricebook_materials_markup_list).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 56%, so the schema handles most parameters. The description adds high-level semantics for the timestamp filters and IDs, helping to explain what the four undocumented timestamp fields do, but it does not detail before/on-or-after semantics or pagination defaults. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('purchase-order markup definitions'), and a precise scope ('one requested page'), which distinguishes it from the more general purchase-order list tool. It also names the two closest sibling tools and the conditions that select them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to inventory_purchase_order_markups_get when a single known markup ID is needed and to inventory_purchase_orders_list for purchase-order transactions. This gives clear when-to-use guidance and names alternatives directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_purchase_orders_getARead-onlyIdempotent
Retrieve a purchase order by its ServiceTitan ID. Returns the single upstream record without pagination; use inventory_purchase_orders_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Purchase order ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds value by clarifying the return is a single upstream record and that pagination does not apply, which is behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler, and the most important scoping information (single record, no pagination) is front-loaded before the alternative tool is mentioned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with an output schema, read-only annotations, and clear sibling routing, the description fully equips an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents the 'id' parameter as 'Purchase order ID'. The description reinforces that this is a ServiceTitan ID but does not add additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a clear resource ('a purchase order by its ServiceTitan ID'), and explicitly contrasts with inventory_purchase_orders_list. An agent can tell exactly what this tool does and how it differs from the list variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use inventory_purchase_orders_list when the ID is unknown, providing both the appropriate context and the named alternative. This gives 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.
inventory_purchase_orders_listARead-onlyIdempotent
List one requested page of issued purchase orders using IDs, number, status, technician, job, project, and order or sent-date filters. Use inventory_purchase_orders_get for one known order and inventory_purchase_orders_requests_list for requests that precede issued orders.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated purchase order IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| jobId | No | Filter by job ID | |
| jobIds | No | Comma-separated job IDs | |
| number | No | Filter by purchase order number | |
| status | No | Filter by purchase order status | |
| pageSize | No | Records per page (default 50) | |
| projectId | No | Filter by project ID | |
| dateBefore | No | Filter by purchase order date before this value | |
| sentBefore | No | Filter by sent-on date before this value | |
| includeTotal | No | Include total count in response | |
| technicianId | No | Filter by technician ID | |
| createdBefore | No | ||
| dateOnOrAfter | No | Filter by purchase order date on or after this value | |
| sentOnOrAfter | No | Filter by sent-on date on or after this value | |
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral context beyond those: it returns a single requested page and focuses specifically on issued purchase orders rather than requests. It does not deeply discuss result limits or response shape, but output schema covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The core function and filter scope come first, and sibling routing comes second. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter list tool with an output schema and strong annotations, the description is complete enough for correct selection: it states pagination, filter scope, and the main sibling distinctions. It could be slightly more precise about created/modified filters or the meaning of 'issued,' but the schema and sibling names fill most gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers most parameter descriptions, so the baseline is solid. The description adds semantic grouping by naming the filter dimensions ('IDs, number, status, technician, job, project, and order or sent-date filters') and clarifies that date filters split into order-date and sent-date. It does not mention created/modified filters, but the schema already documents those reasonably.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), a clear resource ('issued purchase orders'), and states the scope ('one requested page') plus the available filter dimensions. It clearly distinguishes itself from inventory_purchase_orders_get and inventory_purchase_orders_requests_list, which are the closest siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use this tool versus alternatives: use inventory_purchase_orders_get for one known order and inventory_purchase_orders_requests_list for requests preceding issued orders. This is direct, actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_purchase_orders_requests_listARead-onlyIdempotent
Search purchase-order requests with the exposed identifiers, status, date, technician, job, and paging filters. These are requests that may precede a purchase order; use inventory_purchase_orders_list for issued purchase orders.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated purchase order request IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| jobId | No | Filter by job ID | |
| jobIds | No | Comma-separated job IDs | |
| pageSize | No | Records per page (default 50) | |
| projectId | No | Filter by project ID | |
| dateBefore | No | Filter by request date before this value | |
| includeTotal | No | Include total count in response | |
| technicianId | No | Filter by technician ID | |
| createdBefore | No | ||
| dateOnOrAfter | No | Filter by request date on or after this value | |
| requestNumber | No | Filter by purchase order request number | |
| requestStatus | No | Filter by purchase order request status | |
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the tool as read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds useful behavioral context by clarifying the lifecycle relationship between purchase-order requests and issued purchase orders, and by framing the tool as a filtered search operation. It does not contradict the annotations and provides enough additional framing beyond the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states what the tool does and the key filter areas, and the second clarifies the domain concept and points to the alternative tool. The most important differentiating information is front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter filtered list tool with a strong annotation set and an output schema, the description gives sufficient context to select the tool and understand its domain role. It identifies the resource, explains its relationship to purchase orders, and routes to the sibling for issued orders. It could be slightly more explicit about the full filter scope, but the schema fills that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 76%, so the schema handles most parameter semantics itself. The description adds only high-level categories (identifiers, status, date, technician, job, paging) rather than specific parameter details, which is acceptable but not additive beyond the schema. The few parameters without descriptions (e.g., createdBefore, modifiedBefore) are not individually clarified by the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') and identifies the exact resource ('purchase-order requests'), then enumerates the filter dimensions: identifiers, status, date, technician, job, and paging. It also distinguishes this tool from inventory_purchase_orders_list by clarifying these are requests that may precede an issued purchase order. This makes the tool's purpose unambiguous and differentiates it from its closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool: when dealing with purchase-order requests that may precede a purchase order. It also names the alternative (inventory_purchase_orders_list) for issued purchase orders, providing a clear routing decision between the two related tools. No inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_purchase_order_types_listARead-onlyIdempotent
List one requested page of purchase-order type definitions, with active-state and created or modified timestamp filters. Use this catalog to interpret order classifications; use inventory_purchase_orders_list for issued purchase-order records.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety expectations. The description adds useful behavioral context by explaining the resource is a catalog of type definitions and that pagination plus active/timestamp filtering are supported. It does not contradict annotations and adds meaningful context beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core purpose is front-loaded, and the sibling differentiation is placed at the end without bloating the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with an output schema, annotations, and a well-documented input schema, the description supplies the necessary conceptual context: this returns purchase-order type definitions, supports requested-page and filter semantics, and is the correct alternative to inventory_purchase_orders_list. Nothing critical is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 56%, so the schema documents several parameters clearly (page, sort, active, pageSize, includeTotal). The description broadly mentions active-state and created/modified timestamp filters, which helps orient an agent to the filter groups, but it does not add detail about the semantics of the four undocumented date-time parameters (e.g., inclusivity or defaults). The parameter names and schema formats carry most of the meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists purchase-order type definitions, with scoping to one requested page and active/timestamp filters. It also distinguishes itself from inventory_purchase_orders_list by clarifying that it is a catalog for interpreting classifications, not issued records. This is a specific verb+resource statement with clear sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this catalog to interpret order classifications and directs agents to inventory_purchase_orders_list for issued purchase-order records. This gives a clear when-to-use/when-not-to-use decision, which is especially valuable given the large sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_receipts_listARead-onlyIdempotent
List one requested page of inventory receipt transactions using IDs, number, vendor, purchase order, bill, business unit, inventory location, sync status, and received-date filters. Use inventory_purchase_orders_list for originating orders and inventory_returns_list for outbound vendor returns.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated receipt IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| billId | No | Bill ID filter | |
| number | No | Receipt number filter | |
| batchId | No | Batch ID filter | |
| pageSize | No | Records per page (default 50) | |
| vendorIds | No | Comma-separated vendor IDs | |
| includeTotal | No | Include total count in response | |
| syncStatuses | No | Comma-separated sync statuses | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| receivedBefore | No | Received-on timestamp upper bound | |
| businessUnitIds | No | Comma-separated business unit IDs | |
| createdOnOrAfter | No | ||
| purchaseOrderIds | No | Comma-separated purchase order IDs | |
| modifiedOnOrAfter | No | ||
| receivedOnOrAfter | No | Received-on timestamp lower bound | |
| customFieldsFields | No | Custom field name/value filters | |
| vendorInvoiceNumber | No | Vendor invoice number filter | |
| customFieldsOperator | No | Operator for custom field filters | |
| inventoryLocationIds | No | Comma-separated inventory location IDs |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the pagination trait ('one requested page') and available filter dimensions, which is useful but not rich behavioral context such as default ordering or response envelope behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler. Purpose and filter scope are front-loaded in the first sentence; sibling routing is in the second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a list tool of this complexity: annotations carry the safety profile, an output schema documents return values, and the description covers purpose, pagination, filters, and sibling routing. Minor omissions (default sort behavior, custom-field filtering capability) are already documented in the schema, so nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83% (>80%), so baseline 3 applies with the schema carrying the detail. The description adds a concise high-level grouping of filter categories (IDs, number, vendor, purchase order, bill, business unit, inventory location, sync status, received-date) that maps onto the schema params, but provides no syntax or format details beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('inventory receipt transactions'), and the pagination scope ('one requested page'). It enumerates the filter dimensions and names sibling tools it is not (inventory_purchase_orders_list, inventory_returns_list), so an agent can distinguish it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing: 'Use inventory_purchase_orders_list for originating orders and inventory_returns_list for outbound vendor returns.' This tells the agent exactly when NOT to use this tool and which sibling to select instead, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_returns_listARead-onlyIdempotent
List one requested page of inventory return transactions using IDs, number, vendor, job, inventory location, sync status, return dates, and external-data filters. Use inventory_return_types_list for the separate return-type catalog; use inventory_transfers_list for movement between inventory locations.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated return IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| jobId | No | Job ID filter | |
| active | No | Filter by active status | True |
| number | No | Return number filter | |
| batchId | No | Batch ID filter | |
| pageSize | No | Records per page (default 50) | |
| vendorIds | No | Comma-separated vendor IDs | |
| includeTotal | No | Include total count in response | |
| syncStatuses | No | Comma-separated sync statuses | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| businessUnitIds | No | Comma-separated business unit IDs | |
| externalDataKey | No | External data key | |
| purchaseOrderId | No | Purchase order ID filter | |
| referenceNumber | No | Reference number filter | |
| createdOnOrAfter | No | ||
| returnDateBefore | No | Return date before this UTC timestamp | |
| modifiedOnOrAfter | No | ||
| customFieldsFields | No | Custom field name/value filters | |
| externalDataValues | No | External data values | |
| returnDateOnOrAfter | No | Return date on or after this UTC timestamp | |
| customFieldsOperator | No | Operator for custom field filters | |
| inventoryLocationIds | No | Comma-separated inventory location IDs | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by emphasizing pagination ('one requested page') and naming filter dimensions, but it does not go into response shape, rate limits, or edge cases. That is acceptable but not exceptional given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The primary action is stated first, followed by the most relevant sibling disambiguation. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 26-parameter read-only tool, the description is complete enough: it states purpose, pagination behavior, filter categories, and sibling alternatives. The output schema covers return-value details, and annotations cover safety, so nothing critical is missing for an agent to select and invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high at 85%, so the schema carries most parameter documentation. The description adds value by grouping the many parameters into meaningful filter categories—IDs, number, vendor, job, inventory location, sync status, return dates, and external-data filters—which helps an agent map its intent to the correct parameters without reading all 26 schema entries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-plus-resource statement: 'List one requested page of inventory return transactions', then enumerates the major filter dimensions. It also names the two closest siblings and distinguishes them, making it immediately clear this is the transaction-list tool, not the return-type catalog or transfer list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: 'Use inventory_return_types_list for the separate return-type catalog; use inventory_transfers_list for movement between inventory locations.' This tells the agent when to choose an alternative and which alternative to choose, exactly what the usage-guidelines dimension asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_return_types_listARead-onlyIdempotent
List one requested page of inventory return-type definitions, with active-state and created or modified timestamp filters. Use this catalog to interpret return classifications; use inventory_returns_list for actual return transactions.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Return type name filter | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| pageSize | No | Records per page (default 50) | |
| activeOnly | No | When true, return only active return types | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context beyond those hints: it is paginated ('one requested page'), supports active-state and timestamp filtering, and is a lookup/catalog rather than a transaction endpoint. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary function is front-loaded, and the second sentence earns its place by distinguishing this tool from inventory_returns_list. Every part serves a clear purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-required-parameter, read-only catalog list with a rich output schema, the description fully covers what the tool is for, the kinds of filtering available, and where to go for transactional data. An agent has enough context to invoke it correctly without additional explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, with the four date-time parameters lacking descriptions. The description groups them as 'created or modified timestamp filters,' adding some semantic clarity, but it does not explain individual parameter behavior, defaults, or edge cases. This is adequate but not a strong compensation for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List one requested page of inventory return-type definitions.' It also explicitly distinguishes this tool from inventory_returns_list by positioning it as the catalog for interpreting return classifications, so an agent can immediately tell it apart from the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool ('Use this catalog to interpret return classifications') and names the alternative for actual transactions ('use inventory_returns_list for actual return transactions'). This provides clear routing guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_transfers_listARead-onlyIdempotent
List one requested page of inventory transfers using IDs, number, status, transfer type, source and destination locations, dates, sync status, and external-data filters. Use this for stock moved between locations; use inventory_returns_list for stock returned to a vendor.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated transfer IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| number | No | Transfer number filter | |
| batchId | No | Batch ID filter | |
| pageSize | No | Records per page (default 50) | |
| statuses | No | Comma-separated transfer statuses | |
| dateBefore | No | Transfer date before this UTC timestamp | |
| includeTotal | No | Include total count in response | |
| syncStatuses | No | Comma-separated sync statuses | |
| createdBefore | No | ||
| dateOnOrAfter | No | Transfer date on or after this UTC timestamp | |
| toLocationIds | No | Comma-separated to-location IDs | |
| modifiedBefore | No | ||
| externalDataKey | No | External data key | |
| fromLocationIds | No | Comma-separated from-location IDs | |
| referenceNumber | No | Reference number filter | |
| transferTypeIds | No | Comma-separated transfer type IDs | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| customFieldsFields | No | Custom field name/value filters | |
| externalDataValues | No | External data values | |
| customFieldsOperator | No | Operator for custom field filters | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, non-destructive, and open-world. The description adds the single-page behavior ('one requested page') and lists the filter families, which is useful beyond the annotations. It does not discuss auth or response defaults, but those are less critical given the annotations and output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core action and scope are front-loaded, and the second sentence efficiently provides a routing rule for a closely related sibling tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 24 optional parameters, a rich schema, an output schema, and safety annotations, the description provides solid orientation: what the tool lists, how pagination behaves, the main filter families, and when to choose the sibling returns tool. It does not mention bulk-export alternatives like export_transfers or custom-field filters, but the schema fills those gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents most parameters. The description condenses the many filters into broad categories such as status, transfer type, locations, dates, and external data, but it adds little detail beyond the schema and omits custom-field filters. This is adequate but not a strong value-add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List one requested page of inventory transfers.' It also enumerates the main filter dimensions and explicitly distinguishes the tool from inventory_returns_list, so an agent can clearly tell what this tool does and what it is not for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives direct, actionable usage guidance: use this tool for stock moved between locations, and use inventory_returns_list when stock is returned to a vendor. This is an explicit when/when-not statement with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_vendors_getARead-onlyIdempotent
Retrieve a vendor by its ServiceTitan ID. Returns the single upstream record without pagination; use inventory_vendors_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Vendor ID | |
| externalDataKey | No | External data key used with externalDataValues | |
| externalDataValues | No | External data values used with externalDataKey | |
| externalDataApplicationGuid | No | External data application GUID for lookup |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful context beyond those annotations: it returns a single upstream record with no pagination. This gives the agent important expectations about the response shape and avoids any assumption that a list will be returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the primary action, and wastes no words. It states the key behavior (single record, no pagination) and the alternative branch in the second sentence without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema is present, annotations comprehensively describe the operation's safety and idempotence, and the description covers the core invocation path and the correct fallback to inventory_vendors_list. Nothing essential for selecting or invoking this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description reinforces that 'id' is the ServiceTitan ID, matching the schema's 'Vendor ID,' but adds no additional semantic detail for the optional external data parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Retrieve a vendor by its ServiceTitan ID.' It also explicitly distinguishes itself from inventory_vendors_list by noting this returns a single record without pagination, so an agent can immediately recognize what this tool does and how it differs from its sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: use inventory_vendors_list to search when the ID is unknown. This clearly implies the intended use case is when the ID is already known, and names the alternative tool directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_vendors_listARead-onlyIdempotent
List one requested page of inventory vendors using IDs, active state, created or modified timestamps, and external-data mapping filters. Use inventory_vendors_get for one known vendor; use inventory_purchase_orders_list for purchase-order records.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Collection of vendor IDs to filter by | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| externalDataKey | No | External data key used with externalDataValues | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| externalDataValues | No | External data values used with externalDataKey | |
| externalDataApplicationGuid | No | External data application GUID for lookup |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safe-read nature is covered. The description adds behavioral context by clarifying that the tool returns a single requested page rather than all vendors, and it summarizes the filter groups. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The first sentence front-loads the action, resource, pagination, and filter categories; the second sentence provides alternative routing. It earns its place entirely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list endpoint with an output schema, rich annotations, and 13 well-schemaed parameters, the description is sufficient. It covers the essential behavioral point (one page), lists filter categories, and disambiguates from sibling tools. Remaining details like defaults and sorting are already present in the input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 69%, and the description adds value by grouping parameters into meaningful categories: IDs, active state, created/modified timestamps, and external-data mapping. This is especially helpful for the four date-time parameters that lack individual schema descriptions. Page, pageSize, and sort are well-documented in the schema, so the description does not need to repeat them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'List one requested page of inventory vendors' and names the filter dimensions. It also distinguishes itself from inventory_vendors_get (single known vendor) and inventory_purchase_orders_list (purchase-order records), leaving no ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use alternatives: 'Use inventory_vendors_get for one known vendor; use inventory_purchase_orders_list for purchase-order records.' This is direct routing guidance that helps the agent pick the right tool among related inventory endpoints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_warehouses_listARead-onlyIdempotent
List one requested page of warehouse definitions using IDs, active state, created or modified dates, and external-data mapping filters. Use this to resolve warehouse and inventory-location identifiers; use inventory transfers or purchase orders for stock movement and procurement.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated warehouse IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| externalDataKey | No | External data key | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| externalDataValues | No | External data values | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is read-only, idempotent, and non-destructive, so the description does not need to repeat safety traits. It adds the useful behavioral fact that the operation returns a single requested page of definitions rather than an unpaginated dump, but it does not go deeper into rate limits, expansion behavior, or open-world response characteristics. This is adequate but not especially rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the core operation and filter categories; the second sentence provides routing guidance to alternatives. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations cover safety and the output schema covers return shape, the description sufficiently explains what the tool does, how it filters, and when it should be chosen over similar inventory tools. It is complete enough for an agent to select and invoke the tool correctly without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents 9 of 13 parameters with meaningful descriptions, and the parameter names are mostly self-explanatory. The description adds value by grouping the filters into categories ('IDs, active state, created or modified dates, and external-data mapping filters'), which helps an agent understand the intended filter families. However, it does not explain the less obvious parameters like includeTotal, createdBefore vs createdOnOrAfter, or pageSize defaults beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a read-only paginated list operation for warehouse definitions and enumerates the main filter dimensions (IDs, active state, dates, external-data mapping). It also differentiates the tool from related inventory operations by naming inventory transfers and purchase orders as the correct tools for stock movement and procurement, so an agent can distinguish it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool ('resolve warehouse and inventory-location identifiers') and when to use alternatives instead ('use inventory transfers or purchase orders for stock movement and procurement'). This provides direct routing guidance and a clear exclusion condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_attributed_leads_getARead-onlyIdempotent
Search attributed leads within a required UTC time window, optionally filtered by lead type. Returns one page of leads linked to marketing attribution activity.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| toUtc | Yes | End date/time in UTC for the filtering period | |
| fromUtc | Yes | Start date/time in UTC for the filtering period | |
| leadType | No | Lead type filter | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower. The description adds value beyond them by disclosing pagination behavior ('Returns one page') and that the result set is specifically attribution-linked, which complements openWorldHint rather than contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler; the core action and mandatory constraint are front-loaded, followed by the optional filter and the return behavior. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter search tool with a full output schema, the description covers the essentials: required window, optional filter, and paged response. Minor gaps remain—no guidance on default page size or what 'attributed' means exactly—but the schema documents defaults and the output schema renders return-value explanation unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real semantic value on top by flagging which parameters actually matter: the UTC time window is required and leadType is optional, and 'one page' orients the paging parameters (page, pageSize). This helps an agent decide parameter usage without digging into the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') with a clearly scoped resource ('attributed leads') and immediately states the two defining constraints: a required UTC time window and an optional lead-type filter. The closing phrase 'linked to marketing attribution activity' distinguishes this from generic lead tools among the siblings (crm_leads_list, export_leads) and from the other marketing_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than stated: an agent can infer this is the tool for time-window-based searches of attributed leads, and the mention of paging signals it returns one page rather than a bulk export. However, it never names an alternative (e.g., export_leads, crm_leads_list, marketing_calls_*) or states when not to use it, leaving routing to inference in a sibling list of 200+ tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_calls_getARead-onlyIdempotent
Retrieve one Marketing Calls v2 call record by numeric ID, including the call details returned by ServiceTitan. Use a call-list tool when the ID is unknown, and the recording or voicemail tools for those media resources.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Call ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already provide readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, covering the main safety profile. The description adds that the call details come from ServiceTitan, which is mild context, but it does not disclose any additional behavioral traits such as error behavior, availability, or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, concise, and front-loaded with the primary action. Every sentence earns its place: the first defines the operation and scope, the second provides alternative routing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with a rich output schema and annotations already covering safety and idempotency, the description is complete. It also orients the agent toward the correct sibling tools when the ID is unknown or when media is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the single 'id' parameter with description 'Call ID', so schema coverage is 100%. The description only reinforces that the ID is numeric and identifies a call record, adding no significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a specific resource ('one Marketing Calls v2 call record'), and the identifier type ('numeric ID'). It also distinguishes itself from list and media tools, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use a call-list tool when the ID is unknown and to use recording or voicemail tools for those media resources. This gives clear routing guidance, especially given the many marketing call sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_calls_recording_getARead-onlyIdempotent
Request the audio recording for a known Marketing Calls v2 call ID. ServiceTitan documents an audio/mpeg stream, but this wrapper delivers client-decoded data through its standard JSON/text envelope; use a binary-capable API client when faithful audio bytes are required. Use marketing_calls_get for the call record itself.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Call ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnly/idempotent annotations by disclosing a critical behavioral trait: although ServiceTitan documents an audio/mpeg stream, this wrapper delivers client-decoded data through its JSON/text envelope. This tells the agent that raw binary fidelity is not guaranteed, which is exactly the kind of behavioral context needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the operation, the second gives the critical binary-format caveat, and the third routes to the sibling tool. The information is front-loaded and there is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with an output schema and annotations covering safety and idempotency, the description provides the missing operational details: the expected ID source, the JSON/text envelope behavior, and the sibling alternative. Nothing essential is left for the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single 'id' parameter at 100% coverage, so the baseline is 3. The description adds useful semantic context by specifying that the ID must be a known Marketing Calls v2 call ID, which clarifies the expected ID source beyond the generic schema text 'Call ID.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Request the audio recording for a known Marketing Calls v2 call ID.' It also distinguishes itself from marketing_calls_get by telling the agent to use that sibling for the call record itself, so the tool's purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for invocation ('for a known Marketing Calls v2 call ID'), explicitly names the alternative for related data ('Use marketing_calls_get for the call record itself'), and warns when this wrapper is not appropriate ('use a binary-capable API client when faithful audio bytes are required'). This is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_calls_v2_listARead-onlyIdempotent
Search calls through Marketing Calls v2 using its activeOnly flag, explicit orderBy and direction, numeric ID array, agents, campaign, duration, phone, or timestamps. Returns one page; prefer v3 unless these v2-specific filter or sorting semantics are required.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Specific call IDs | |
| page | No | Page number (starts at 1) | |
| agentId | No | Agent ID | |
| orderBy | No | Field used for ordering | |
| pageSize | No | Records per page (default 50) | |
| agentName | No | Agent name | |
| activeOnly | No | Return only active calls | |
| campaignId | No | Campaign ID | |
| minDuration | No | Minimum duration in seconds | |
| createdAfter | No | Created after UTC timestamp | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Created before UTC timestamp | |
| modifiedAfter | No | Modified after UTC timestamp | |
| modifiedBefore | No | Modified before UTC timestamp | |
| agentExternalId | No | Agent external ID | |
| agentIsExternal | No | Whether agent is external | |
| createdOnOrAfter | No | Created on or after UTC timestamp | |
| orderByDirection | No | Sort direction | |
| modifiedOnOrAfter | No | Modified on or after UTC timestamp | |
| phoneNumberCalled | No | Phone number called |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context: 'Returns one page' discloses that no automatic multi-page fetching occurs, and the version-scoping statement frames the tool's relationship to v3. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, roughly 40 words, with the action and resource front-loaded, the filter space compressed into a compact list, and pagination plus version routing closed out in the final clause. Every sentence earns its place with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 20-optional-parameter list tool with an output schema and rich safety annotations, the description covers purpose, filter scope, one-page pagination, and version selection. The main gap is that 'v2-specific semantics' is never concretely defined, and it does not differentiate from marketing_calls_get — though the 'list' naming and filter emphasis make that distinction recoverable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description groups parameters into semantic families (activeOnly, orderBy/direction, IDs, agents, campaign, duration, phone, timestamps), which helps orientation, but it adds no format, constraint, or interaction details beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb/resource pair ('Search calls through Marketing Calls v2') and enumerates the filter dimensions: activeOnly flag, explicit orderBy and direction, numeric ID array, agents, campaign, duration, phone, timestamps. It explicitly names the sibling marketing_calls_v3_list, making the scope boundary clear without opening any schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit routing rule: 'prefer v3 unless these v2-specific filter or sorting semantics are required,' which is direct guidance about when to choose this tool over its main sibling. 'Returns one page' also signals pagination expectations. However, the phrase 'v2-specific filter or sorting semantics' is somewhat circular — the agent must infer which of the listed filters are actually unique to v2.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_calls_v3_listARead-onlyIdempotent
Search calls through Marketing Calls v3 using comma-delimited IDs, caller number, active state, agents, campaign, duration, timestamps, or sort. Returns one page; prefer this for ordinary call search, and use v2 only for its numeric ID array, activeOnly, or orderBy contract.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited call IDs | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, ModifiedOn | |
| active | No | Filter by active status | True |
| agentId | No | Agent ID | |
| pageSize | No | Records per page (default 50) | |
| agentName | No | Agent name | |
| campaignId | No | Campaign ID | |
| minDuration | No | Minimum duration in seconds | |
| createdAfter | No | Created after UTC timestamp | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedAfter | No | Modified after UTC timestamp | |
| modifiedBefore | No | ||
| agentExternalId | No | Agent external ID | |
| agentIsExternal | No | Whether agent is external | |
| createdOnOrAfter | No | ||
| callerPhoneNumber | No | Caller phone number | |
| modifiedOnOrAfter | No | ||
| phoneNumberCalled | No | Phone number called |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds pagination behavior ('Returns one page') and clarifies v2's differing contract, which are useful details beyond the annotations. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core purpose and one-page behavior are front-loaded, followed by a concise recommendation that routes the agent away from the v2 sibling when appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema (20 optional parameters, 80% coverage), annotations covering safety, and an output schema, the description supplies what is missing: the intended use case, pagination note, and v2-vs-v3 selection guidance. Return-value details are already handled by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (80%), so the schema already documents each parameter in detail. The description groups filters into categories like 'comma-delimited IDs, caller number, active state, agents, campaign, duration, timestamps, or sort,' but this adds little semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Search') and resource ('calls through Marketing Calls v3') and enumerates the major filter dimensions. It also explicitly differentiates from marketing_calls_v2_list by naming the v2-only contract, so an agent can distinguish sibling list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing guidance: 'prefer this for ordinary call search, and use v2 only for its numeric ID array, activeOnly, or orderBy contract.' This tells the agent when to select this tool over its direct sibling and what conditions should route to v2.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_calls_voice_mail_getARead-onlyIdempotent
Request the voicemail audio for a known Marketing Calls v2 call ID. ServiceTitan documents an audio/mpeg stream, but this wrapper delivers client-decoded data through its standard JSON/text envelope; use a binary-capable API client when faithful audio bytes are required. Use marketing_calls_get for the call record itself.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Call ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, covering safety. The description adds valuable behavioral context by disclosing that while ServiceTitan documents an audio/mpeg stream, this wrapper returns client-decoded data via a JSON/text envelope, and that a binary-capable client is needed for raw bytes. This goes beyond the annotations and helps set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the main purpose, then provides the caveat about output format and the alternative tool. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and an output schema (though not shown), the description covers the essential usage details: what it does, the version context, the output envelope caveat, and the alternative tool. No critical information is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter with a description ('Call ID'), so baseline is 3. The description enhances this by specifying that the ID is a 'Marketing Calls v2 call ID', clarifying the exact version context. This adds meaning beyond the schema's simple description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Request the voicemail audio') and the resource ('a known Marketing Calls v2 call ID'), and it explicitly differentiates itself from marketing_calls_get by stating that tool retrieves the call record itself. This makes the tool's purpose unambiguous and distinguishes it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear alternative ('Use marketing_calls_get for the call record itself') and also advises on client requirements for binary fidelity. It does not explicitly state when not to use this tool, but the alternative and the caveat about binary bytes offer practical usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_campaign_costs_getARead-onlyIdempotent
Retrieve one campaign-cost record by cost ID. Use marketing_campaign_costs_list to search when the cost ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign cost ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds the single-record retrieval semantics, but no additional behavioral context such as return shape, error behavior, or data scope beyond what the annotations and output schema provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action and lookup key are front-loaded, and the alternative-tool routing is stated in a single follow-up sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, read-only getter with an output schema and strong annotations, this description is complete. An agent can confidently invoke it when it has a known cost ID and knows to fall back to the list tool otherwise.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the single parameter, already documenting 'id' as 'Campaign cost ID'. The description reinforces that this is a lookup by cost ID, but adds no new constraints, format details, or relationship context beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Retrieve one campaign-cost record') and identifies the exact lookup key ('by cost ID'). It also distinguishes itself from the list sibling by framing itself as the point-retrieval counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: when the cost ID is known. It names the alternative, marketing_campaign_costs_list, and gives the exact condition for using it instead — when the cost ID is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_campaign_costs_listARead-onlyIdempotent
Search campaign costs across campaigns by campaign ID, year, or month. Returns one page; use marketing_campaigns_costs_list when a specific campaign ID is the required path scope.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Date | |
| year | No | Cost year | |
| month | No | Cost month | |
| pageSize | No | Records per page (default 50) | |
| campaignId | No | Campaign ID | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context like 'Returns one page' and the cross-campaign scope, but does not go deeper into pagination behavior, ordering, or omitted-records semantics. This is solid but not rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, the core purpose is front-loaded, and the sibling distinction is packed into the second sentence. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list/search tool with a full input schema, an output schema, and annotations covering safety, the description covers the essential behavior, pagination signal, and the relevant sibling alternative. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 7 parameters. The description mentions campaign ID, year, and month, but these mirror the existing schema properties without adding new meaning, format details, or interaction notes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search campaign costs across campaigns by campaign ID, year, or month.' It clearly identifies the filtering dimensions and distinguishes itself from the sibling marketing_campaigns_costs_list by noting the path-scope difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides a when-to-use versus alternative guidance: 'use marketing_campaigns_costs_list when a specific campaign ID is the required path scope.' This tells the agent exactly when not to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_campaigns_costs_listARead-onlyIdempotent
List one page of costs for a required campaign ID, optionally filtered by year or month. Use marketing_campaign_costs_list for a broader cost search across campaigns.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Date | |
| year | No | Cost year | |
| month | No | Cost month | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, non-destructive, and idempotent behavior. The description adds useful behavioral context beyond annotations by noting pagination ('one page') and optional year/month filtering. It does not over-explain, and the output schema exists to cover return details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The core behavior is front-loaded, and the sibling distinction is provided in the second sentence. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 100% schema coverage, supportive annotations, and presence of an output schema, the description provides sufficient context for correct invocation. It communicates the essential scope, optional filters, pagination behavior, and names the relevant alternative without omitting critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters are already documented in the schema. The description reinforces that campaign ID is required and that year/month are optional filters, but it does not need to add further parameter-level meaning because the schema carries the full weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List'), a clear resource ('costs'), and the required scope ('for a required campaign ID'). It also explicitly contrasts with the sibling marketing_campaign_costs_list, so an agent can distinguish this per-campaign tool from the broader cross-campaign search tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this tool is for campaign-specific cost listing and explicitly points to marketing_campaign_costs_list when a broader cost search across campaigns is needed. This provides a direct when-to-use versus when-to-use-alternative signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_campaigns_getARead-onlyIdempotent
Retrieve one marketing campaign record by ID, including its configured campaign data. Use marketing_campaigns_list to search by name, phone number, active state, IDs, or date ranges.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds 'including its configured campaign data' as a payload expectation, but it does not disclose behaviors such as not-found handling, response envelope, or permission requirements. With annotations present, this is acceptable but not enriched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the primary purpose is stated first. The routing note is a single concise sentence that adds clear value without bloating the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only getter with an output schema and safety annotations, the description is complete. It covers what the tool does, how to use it, and when to choose the sibling list tool instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the single required 'id' parameter is documented as 'Campaign ID.' The description's 'by ID' adds no new semantic value beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Retrieve one marketing campaign record by ID.' It clearly distinguishes this get-by-ID tool from the list tool by naming the sibling and its different search capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the alternative: 'Use marketing_campaigns_list to search by name, phone number, active state, IDs, or date ranges.' This tells the agent that marketing_campaigns_get is for lookup by a single ID, while the sibling is for search and filtering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_campaigns_listARead-onlyIdempotent
Search campaigns by IDs, name, phone number, active state, or created and modified ranges. Returns one page; use marketing_campaigns_get for a known campaign ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited campaign IDs | |
| name | No | Campaign name filter | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name, CreatedOn, ModifiedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| campaignPhoneNumber | No | Campaign phone number filter |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, and the description aligns with those hints. The added 'Returns one page' clause discloses pagination behavior beyond the annotations, though it does not clarify how multiple filters combine.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The filter scope is front-loaded, followed by the return behavior and sibling routing, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter read-only list tool with an output schema and safety annotations, the description covers the essential searchable criteria, signals one-page responses, and routes known-ID lookups to marketing_campaigns_get. Minor omissions like exact date-range semantics and filter combination behavior are either self-evident from property names or not critical given the schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description adds a useful high-level grouping of the key filter parameters, including the four otherwise undocumented date-time fields under 'created and modified ranges.' It does not add detail for paging or sorting, but the schema already describes page, pageSize, sort, and includeTotal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action, 'Search campaigns', and enumerates the supported filter dimensions: IDs, name, phone number, active state, and created/modified ranges. It also explicitly distinguishes itself from marketing_campaigns_get by directing known-ID lookups to that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: use this tool for searching/filtering campaigns and use marketing_campaigns_get for a known campaign ID. It also notes that the tool returns one page, setting expectations for paginated list usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_client_side_data_getARead-onlyIdempotent
Retrieve tenant task reference data: employees, business units, priorities, statuses, types, sources, and resolutions. This Task Management client-side-data operation returns one unpaged response with no inputs; use it to populate task filters or forms, not for marketing analytics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds valuable behavioral detail beyond those annotations: it returns one unpaged response, takes no inputs, and is scoped to task reference data rather than analytics. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words: the first front-loads the resource and content, and the second gives the response shape and usage boundary. It avoids repeating schema or annotation details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, a rich annotation set, and an output schema present, the description fully covers purpose, usage boundary, and response shape (unpaged, no inputs). Nothing critical is missing for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters and the schema already documents all properties, so there is nothing for the description to add beyond saying 'no inputs.' The description reinforces that fact. Baseline 4 is appropriate for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve') and a specific resource ('tenant task reference data') with enumerated entity types. It also distinguishes itself from marketing and export siblings by identifying this as a Task Management client-side-data operation for filters/forms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('populate task filters or forms') and an explicit exclusion ('not for marketing analytics'). It does not name a concrete alternative sibling tool, but the usage boundary is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_client_specific_pricing_get_all_rate_sheetsARead-onlyIdempotent
Search client-specific pricing rate sheets by IDs, search term, or active state. Returns one page of pricing definitions; despite the legacy name, pagination still applies. Use the rate-sheet ID from this result when updating a sheet.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-delimited rate sheet IDs | |
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| searchTerm | No | Search term | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, open-world, and non-destructive. The description adds the useful behavioral note that despite the legacy name, this endpoint is paginated and returns one page, which is not inferable from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the core action, pagination caveat, and a downstream usage pointer with no filler. The key operation is front-loaded, and every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering the safety profile, the description covers what an agent needs: filter modes, pagination, and how to use the result. No essential calling detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the heavy lifting is done by the schema. The description groups the parameters into search dimensions (IDs, search term, active state) and mentions pagination, but it doesn't materially extend the schema's per-parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb 'Search' and names the resource 'client-specific pricing rate sheets', and it specifies three filter dimensions (IDs, search term, active state). It also clarifies the misleading legacy name by stating pagination still applies, which helps disambiguate the tool's actual behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the tool's context clear: it is for searching and paging through rate sheets, and it points to the next step of using the returned rate-sheet ID when updating a sheet. It does not name explicit alternatives or when-not-to-use conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_opt_in_outs_listARead-onlyIdempotent
Retrieve the tenant's marketing phone opt-out records from the v3 opt-in/out endpoint. This operation accepts no filters or pagination inputs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds a useful behavioral constraint: the operation accepts no filters or pagination inputs. This goes beyond the empty schema and prevents agents from expecting unsupported query parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The purpose is front-loaded and the no-filter constraint is stated clearly in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only, non-destructive operation with an output schema, the description is complete. It tells the agent exactly what data is returned and what limitations apply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. The description reinforces that no filters or pagination inputs exist, which adds meaningful guidance beyond the empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: retrieve the tenant's marketing phone opt-out records. It clearly distinguishes this tool from the many marketing_calls_* siblings by focusing on opt-out records rather than call logs or campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this tool when you need the tenant's marketing phone opt-out records. However, it does not explicitly name alternatives or state when not to use it, leaving some routing judgment to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_reviewsARead-onlyIdempotent
Search customer review records by text, rating, source, response type, review status, location, technician, campaign, and date ranges. Returns one page; use inclusion flags when reviews missing those associations must remain in the result.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort expression | |
| search | No | Search text | |
| toDate | No | Review date to | |
| sources | No | Review sources | |
| fromDate | No | Review date from | |
| pageSize | No | Records per page (default 50) | |
| toRating | No | To rating | |
| fromRating | No | From rating | |
| reportType | No | Report type | |
| campaignIds | No | Campaign IDs | |
| locationIds | No | Location IDs | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Created before timestamp | |
| responseTypes | No | Response types | |
| technicianIds | No | Technician IDs | |
| modifiedBefore | No | Modified before timestamp | |
| reviewStatuses | No | Review statuses | |
| createdOnOrAfter | No | Created on or after timestamp | |
| modifiedOnOrAfter | No | Modified on or after timestamp | |
| includeReviewsWithoutCampaign | No | Include reviews without campaign | |
| includeReviewsWithoutLocation | No | Include reviews without location | |
| includeReviewsWithoutTechnician | No | Include reviews without technician |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds valuable context beyond that, notably that the tool returns one page and that inclusion flags are needed to retain reviews missing campaign/location/technician associations. It does not fully explain sorting or date-range semantics, but the increment over annotations is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the resource and core filter dimensions; the second sentence explains an important behavioral nuance about inclusion flags. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 23 parameters, an output schema, and full schema descriptions, the description covers the primary search dimensions and the non-obvious inclusion-flag behavior. Remaining gaps like the meaning of reportType and the interaction of date filter parameters are largely covered by the schema. The tool is sufficiently complete for an agent to invoke it correctly, though a brief note on date-range semantics would improve it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, establishing a baseline of 3. The description groups many parameters into semantic dimensions (text, rating, source, response type, review status, location, technician, campaign, date ranges) and introduces the purpose of inclusion flags. However, it does not clarify ambiguous parameters such as 'reportType', 'sort', or the relationship between createdDates and review dates, so it does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search' and the resource 'customer review records', and enumerates the main filter dimensions (text, rating, source, response type, review status, location, technician, campaign, date ranges). It is distinct from sibling tools like marketing_calls_list or marketing_campaigns_list, but does not explicitly name an alternative or draw a contrast, so it falls just short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It only mentions that one page is returned and advises using inclusion flags when unreferenced reviews must remain, which is more behavioral guidance than usage routing. There is no mention of when not to use it or which sibling tool would be preferable in other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_scheduler_scheduler_performanceARead-onlyIdempotent
Retrieve one scheduler's performance metrics over a required session-created time window. Returns the scheduler performance response for that exact ID and period; use marketing_scheduler_schedulersessions for individual sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Scheduler ID | |
| sessionCreatedBefore | Yes | Session created before timestamp | |
| sessionCreatedOnOrAfter | Yes | Session created on or after timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, non-destructive behavior, so the description only needs to add context beyond that. It adds the exact-ID/period scoping, but doesn't describe response shape or edge cases; output schema covers response shape, so this is acceptable but not highly informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences front-load the action and resource, then add the disambiguation to a sibling. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover safety/idempotence, output schema covers the return payload, and the description covers scope and the key sibling distinction. Nothing else is needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, giving baseline 3. The description adds value by framing the two date fields as a required 'session-created time window' and reinforcing that the id must exactly identify the scheduler, which helps an agent understand the relationship between parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Retrieve'), a precise resource ('one scheduler's performance metrics'), and a required temporal scope ('session-created time window'). It also distinguishes itself from marketing_scheduler_schedulersessions by noting that sibling handles individual sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names marketing_scheduler_schedulersessions as the tool for individual sessions, which tells an agent when not to choose this tool. The 'exact ID and period' phrasing also clarifies that this tool is for a single scheduler's aggregate metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_scheduler_schedulersARead-onlyIdempotent
List one page of marketing scheduler records, optionally filtered by created or modified timestamps. Use marketing_scheduler_scheduler_performance for metrics about one known scheduler.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds the pagination limitation ('one page') and the filtering dimensions ('created or modified timestamps'), which are behavioral traits not expressed in the annotations. With an output schema present, the return shape does not need to be explained here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary purpose is stated first, and the routing to the alternative tool appears second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, optionally filtered list tool with an output schema and strong annotations, the description covers the key call decision: list schedulers here, get metrics from performance. It leaves timestamp filter semantics largely to schema property names and does not disambiguate from the closely named marketing_scheduler_schedulersessions sibling, so a small completeness gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 43%, leaving the four timestamp parameters undocumented in the schema. The description partially compensates by saying results are 'optionally filtered by created or modified timestamps', but it does not map those filters to specific parameter names or explain boundary semantics. Pagination parameters are already documented in the schema, so the description adds only modest value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List one page of marketing scheduler records'. It clearly identifies this as a paginated list endpoint and distinguishes it from the performance sibling by saying metric lookups belong on marketing_scheduler_scheduler_performance. There is no ambiguity about what object this tool operates on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence explicitly names the alternative tool and the condition for choosing it: 'Use marketing_scheduler_scheduler_performance for metrics about one known scheduler.' This gives an agent a clear decision rule: use this tool for listing/filtering scheduler records, and the sibling for metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketing_scheduler_schedulersessionsARead-onlyIdempotent
List one page of sessions for a known scheduler, optionally filtered by created or modified timestamps. Use scheduler performance when aggregated metrics are needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Scheduler ID | |
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to repeat those. It adds modest context by noting pagination and timestamp filtering, but does not disclose details like sort order, filter inclusivity, or response boundaries beyond what the schema and output schema likely cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary action and pagination behavior are front-loaded, and the alternative tool is mentioned in the second sentence without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, paginated list tool with a rich output schema and strong annotations, the description is mostly sufficient. It covers the core purpose and the main alternative, but could be slightly more complete by addressing how to handle an unknown scheduler ID.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%; page, pageSize, includeTotal, and id are documented in the schema. The description adds value by grouping the four timestamp parameters as 'created or modified timestamps,' but it does not clarify the exact semantics of before/on-or-after bounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a concrete resource ('one page of sessions for a known scheduler'), and optional filtering behavior. It also differentiates from the sibling marketing_scheduler_scheduler_performance by noting that aggregated metrics belong there.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use the tool: listing sessions for a known scheduler. It also names an explicit alternative for aggregated metrics ('Use scheduler performance'), but does not mention how to discover a scheduler ID if unknown, such as via marketing_scheduler_schedulers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_custom_fields_listARead-onlyIdempotent
List one requested page of membership custom-field definitions using created and modified timestamp filters. Use this for field metadata; use memberships_list for customer membership records and their field values.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name, CreatedOn, ModifiedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. On top of that, the description adds behavioral context: each call returns a single requested page and supports created/modified timestamp filters, which is useful beyond the basic safety profile. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the core operation front-loaded and the sibling distinction in the second sentence. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an optional-parameter read-only list endpoint with an output schema and safety annotations, this is complete: it states pagination, filters, resource type, and the right alternative. The schema handles default page size, sort fields, and output shape, so the description does not need to repeat them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 50% schema description coverage, the timestamp parameters are otherwise undocumented; the description gives them collective meaning as 'created and modified timestamp filters' and clarifies the pagination intent with 'one requested page.' It does not spell out before/on-or-after boundary semantics, but the parameter names and date-time format carry most of that load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List one requested page of membership custom-field definitions' — this is a paginated metadata-listing operation, not a record read. It also distinguishes itself from memberships_list, so an agent can tell the two apart immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit selection criteria: 'Use this for field metadata; use memberships_list for customer membership records and their field values.' This names the closest alternative and states exactly when each tool is appropriate, with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_getARead-onlyIdempotent
Retrieve a single customer membership by its ServiceTitan ID. Returns the single upstream record without pagination; use memberships_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Customer membership ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnly, idempotent, non-destructive, and open-world behavior, so the description doesn't need to repeat those. It adds value by clarifying that the tool returns a single upstream record without pagination, which is useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the primary action and resource, then adds the key pagination detail and alternative tool in a compact way. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single required parameter, full schema coverage, an output schema, and comprehensive annotations, the description covers everything needed to invoke the tool correctly. The alternative-tool routing and no-pagination note make it fully contextually complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the 'id' parameter as 'Customer membership ID', so the baseline is 3. The description adds the important semantic detail that the ID is the ServiceTitan ID, distinguishing it from other ID types and clarifying what value to pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a clear resource ('a single customer membership'), and the lookup key ('ServiceTitan ID'), making the tool's purpose immediately obvious. It also explicitly differentiates itself from memberships_list by noting that this returns a single record rather than a search result.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool versus memberships_list: use this when the ID is known, and use memberships_list to search when the ID is unknown. This is actionable routing with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_listARead-onlyIdempotent
List one requested page of customer membership records using membership and customer IDs, status, active state, billing frequency, duration, and created or modified timestamps. Use memberships_get for one known sold membership and memberships_types_list for reusable membership-plan definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated membership IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| status | No | Filter by membership status | |
| duration | No | Filter by membership duration in months | |
| pageSize | No | Records per page (default 50) | |
| customerIds | No | Comma-separated customer IDs | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| billingFrequency | No | Filter by membership billing frequency | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the read-only safety profile is covered. The description adds only the 'one requested page' pagination trait and the customer-membership scope, which is useful but not rich behavioral context like defaults, response limits, or completeness behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the action and filter dimensions, the second routes to the two most relevant alternatives. Every clause earns its place, and the core behavior is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema, 13 optional parameters, and strong annotations, the description is largely complete: it defines the resource scope, the paginated nature, and sibling routing. Minor gaps such as not mentioning defaults or the bulk export alternative are not critical because the schema and sibling list provide that context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 69%, so the description partly compensates by grouping the filter surface: membership and customer IDs, status, active state, billing frequency, duration, and created/modified timestamps. This is particularly helpful for the four datetime parameters, which lack individual schema descriptions, and gives agents a concise map of the query dimensions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'List one requested page of customer membership records,' and enumerates the available filter dimensions. It also explicitly differentiates itself from memberships_get (one known sold membership) and memberships_types_list (reusable membership-plan definitions), so an agent can distinguish it from nearby siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives direct routing guidance: use memberships_get when you need one known sold membership, and memberships_types_list for reusable plan definitions. This is an explicit when-to-use-alternatives statement, leaving little room for ambiguity about which tool to select.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_recurring_service_events_listARead-onlyIdempotent
List one requested page of recurring-service events using event IDs, status, job, location, and created or modified timestamp filters. Use memberships_recurring_services_get for the parent service record; use job tools for a job referenced by an event.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated recurring service event IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| jobId | No | Filter by job ID | |
| status | No | Filter by recurring service event follow-up status | |
| pageSize | No | Records per page (default 50) | |
| locationId | No | Filter by location ID | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that the operation returns one requested page and supports timestamp/status/job/location/ID filters, but it does not disclose ordering, pagination conventions, or time-zone semantics. This is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the operation and filter scope, then add routing guidance. Every sentence earns its place with no repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with an output schema and safety annotations, the description covers the page, filter dimensions, and the most relevant sibling routing. It does not describe the event concept or the exact parent-service list alternative, but nothing essential is missing for invoking the tool. The 11 optional parameters make this a slightly complex tool, and the description handles that reasonably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 64% schema description coverage, the schema documents most parameters, and the description adds a useful summary of the filter dimensions (IDs, status, job, location, created/modified timestamps). The four date-only parameters still rely on their format field plus the description's generic timestamp mention, so the description does not fully compensate for the gap. Overall it adds modest meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('List ... recurring-service events') and names the main filter dimensions, so an agent can tell this is a paginated events-list operation. It routes to memberships_recurring_services_get for the parent record, but does not explicitly contrast this events list with memberships_recurring_services_list, so sibling differentiation is only partial. Still, the core purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent to use memberships_recurring_services_get when it needs the parent service record and job tools when the event references a job, providing useful exclusions. It does not enumerate every alternative or state a precise condition for when this list is preferred, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_recurring_services_getARead-onlyIdempotent
Retrieve a recurring service by its ServiceTitan ID. Returns the single upstream record without pagination; use memberships_recurring_services_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Recurring service ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior. The description adds useful behavioral context by stating it 'Returns the single upstream record without pagination,' which goes beyond what annotations convey and is not redundant with the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long and front-loads the core purpose. Every clause earns its place: the action, the record scope, the no-pagination behavior, and the alternative tool for unknown IDs. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-ID retrieval tool with a rich output schema and complete annotations. The description covers the key decision point (known ID vs. search) and the absence of pagination. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description clarifies that the 'id' is a ServiceTitan ID, which adds slight context, but the schema already describes the parameter as 'Recurring service ID' with integer type. The added semantic value is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: retrieving a specific recurring service by its ServiceTitan ID. It also differentiates itself from the list variant by noting it returns a single record without pagination, so an agent can distinguish this get tool from its sibling search tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool vs. the alternative: 'use memberships_recurring_services_list to search when the ID is unknown.' This is a clear routing condition that leaves no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_recurring_services_listARead-onlyIdempotent
List one requested page of customer-location recurring services using service, membership, and location IDs, active state, and created or modified timestamps. Use memberships_recurring_services_get for one known service and memberships_types_recurring_service_items_list for plan-level service configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated recurring service IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| locationIds | No | Comma-separated location IDs | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| membershipIds | No | Comma-separated customer membership IDs | |
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: pagination semantics ('one requested page') and the scope of filtering (customer-location recurring services by timestamps and IDs). It does not explain defaults like page size or active=True, but the schema covers pageSize and active defaults.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both load-bearing: the first front-loads the verb, resource, and filter scope; the second handles sibling disambiguation. There is no repetition of schema content or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter read-only list tool with an output schema and rich annotations, the description covers the critical selection criteria: what it lists, its pagination behavior, and how it differs from the two most confusable siblings. It does not explicitly differentiate from memberships_recurring_service_events_list or the recurring service types tools, but the naming and the explicit two-sibling routing make confusion unlikely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 64%, with the four timestamp parameters (createdBefore, createdOnOrAfter, modifiedBefore, modifiedOnOrAfter) having no schema descriptions. The description's phrase 'created or modified timestamps' at least signals that these filters exist, but it does not distinguish before/on-or-after semantics or the date-time format. It also summarizes the ID and active-state filters without adding detail beyond the schema. This is a partial compensation, not a full one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('List one requested page of customer-location recurring services') and specifies the key filter dimensions (service, membership, and location IDs, active state, created/modified timestamps). It explicitly distinguishes itself from two siblings, memberships_recurring_services_get and memberships_types_recurring_service_items_list, so an agent can tell them apart without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives explicit routing guidance: use memberships_recurring_services_get for one known service and memberships_types_recurring_service_items_list for plan-level configuration. This states when to prefer the alternatives, which is exactly what an agent needs to choose among the memberships_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_recurring_service_types_getARead-onlyIdempotent
Retrieve a recurring service type by its ServiceTitan ID. Returns the single upstream record without pagination; use memberships_recurring_service_types_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Recurring service type ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds useful behavioral detail about returning a single record without pagination, but does not go beyond that to discuss error behavior, rate limits, or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary action is front-loaded, and the critical alternative/usage guidance is placed immediately after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read operation with an output schema and annotations covering safety, the description is complete. It tells the agent what the tool does, when to use it, and how to route to the list alternative when needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single id parameter is already documented in the schema. The description adds the context that this is a ServiceTitan ID, which is mildly helpful, but it does not add substantial syntax, format, or validation detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Retrieve') and resource ('a recurring service type by its ServiceTitan ID'). It also distinguishes itself from the list sibling by emphasizing it returns a single record without pagination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides the decision rule: use this tool when the ID is known, and use memberships_recurring_service_types_list when the ID is unknown. This directly names the alternative and the condition for choosing it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_recurring_service_types_listARead-onlyIdempotent
List one requested page of recurring-service type definitions using IDs, membership type, recurrence type, duration type, active state, and created or modified timestamps. Use memberships_recurring_service_types_get for one known type and memberships_recurring_services_list for customer-location service instances.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated recurring service type IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name, CreatedOn, ModifiedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| durationType | No | Filter by duration type | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| recurrenceType | No | Filter by recurrence type | |
| createdOnOrAfter | No | ||
| membershipTypeId | No | Filter by membership type ID | |
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is handled. The description adds meaningful behavior beyond annotations: the tool returns one requested page rather than a full set, and it filters across several dimensions including ID and timestamp ranges.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The main action and scope are front-loaded, and the sibling routing is a compact second sentence that earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is complete for a read-only list call: rich annotations, an output schema, and clean sibling routing cover operational behavior. A minor gap is not mentioning the related export_recurring_service_types sibling as an option for bulk export, but pagination and filter coverage are otherwise sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 69%, above the high-coverage threshold, so the schema carries most parameter detail. The description summarizes parameter categories (IDs, membership type, recurrence, duration, active state, timestamps) that slightly help disambiguate the timestamp parameters lacking schema descriptions, but it does not add meaningfully beyond the schema for most parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource ('List one requested page of recurring-service type definitions') and lists the key filter dimensions. It then explicitly distinguishes itself from memberships_recurring_service_types_get (one known type) and memberships_recurring_services_list (customer-location instances), so an agent can tell it apart from siblings without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the singleton tool for retrieving a known type and the related list tool for service instances, giving concrete selection criteria. No exclusion or alternative guidance is missing for the obvious sibling choices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_service_agreements_getARead-onlyIdempotent
Retrieve a service agreement by its ServiceTitan ID. Returns the single upstream record without pagination; use memberships_service_agreements_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Service agreement ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral context beyond annotations by stating it 'Returns the single upstream record without pagination,' which clarifies the return shape and eliminates pagination expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary action and scope are front-loaded, and the routing to the list tool is included without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter getter with a full output schema and strong annotations, this description is complete. It covers what the tool returns, the key scoping detail (no pagination), and when to use the alternative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by specifying the ID is the 'ServiceTitan ID' and that it identifies an 'upstream record,' giving the parameter domain context beyond the generic 'Service agreement ID' in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Retrieve a service agreement by its ServiceTitan ID.' It clearly distinguishes itself from the sibling list tool by stating it returns the single upstream record, so an agent can immediately tell this is the point-getter variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative: 'use memberships_service_agreements_list to search when the ID is unknown.' This gives the agent a direct decision rule for when to use this tool versus its sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_service_agreements_listARead-onlyIdempotent
List one requested page of customer service agreements using agreement, customer, business-unit, status, and created or modified timestamp filters. Use memberships_service_agreements_get for a known agreement; use memberships_list for customer membership sales rather than agreement records.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated service agreement IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name, CreatedOn, ModifiedOn, StartDate, EndDate | |
| status | No | Filter by service agreement status | |
| pageSize | No | Records per page (default 50) | |
| customerIds | No | Comma-separated customer IDs | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| businessUnitIds | No | Comma-separated business unit IDs | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context beyond these annotations: it returns 'one requested page' and enumerates the available filter dimensions, which helps set caller expectations for pagination and filtering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary behavior and pagination scope are front-loaded, and the alternative-tool routing is placed second. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent list tool with an output schema and annotations covering safety, the description is complete: it states the resource, paging behavior, filtering options, and sibling-tool boundary. No critical invocation information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, so the schema documents most parameters. The description adds a useful high-level grouping of filters (agreement, customer, business-unit, status, timestamp) but does not add detail beyond what the schema already provides, and the four timestamp parameters remain schematically undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List one requested page of customer service agreements.' It also names the sibling tools it is not (memberships_service_agreements_get and memberships_list), making the tool's scope distinguishable without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use memberships_service_agreements_get when a known agreement is needed and memberships_list for customer membership sales 'rather than agreement records.' This gives clear routing guidance and an explicit exclusion, so an agent knows when not to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_status_changes_listARead-onlyIdempotent
Retrieve the status-change history attached to one required customer membership ID. Use memberships_get for the current membership record or memberships_list when the membership ID must be discovered first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Customer membership ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description only needs to add behavioral context, which it does by specifying the required input scope and that the result is historical changes rather than the current record. It is consistent with the annotations, and the output schema covers return details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action front-loaded and the alternative routing in the second sentence. No filler or redundant restatement of schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-required-parameter read-only history tool with an output schema and robust annotations, this is complete. The agent knows what input is required, what the tool returns, and which sibling tools cover neighboring use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the only parameter with 100% coverage, so the description adds no new parameter meaning. The phrase 'one required customer membership ID' only reinforces what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact action and resource: retrieving status-change history for a required membership ID. The phrase 'attached to one required customer membership ID' clearly distinguishes it from current-record tools and bulk export tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes to memberships_get when the current membership record is needed and to memberships_list when the ID must be discovered first. This gives clear when-to-use guidance and names alternatives directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_types_discounts_listARead-onlyIdempotent
Retrieve discounts configured for one known membership type ID. These are type-level benefits, not the tenant pricebook discount-and-fee catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Membership type ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the description does not need to repeat those. The description adds conceptual context about type-level versus pricebook-level discounts but does not disclose additional behavioral traits such as pagination, authorization requirements, or response shape, which is acceptable given the rich annotations and output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tightly written sentences with no filler. The core action and resource are front-loaded, and the clarifying contrast with the pricebook catalog is placed immediately after, making the intent easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only list tool with a full input schema, an output schema, and comprehensive annotations, the description is complete. It provides the necessary scoping distinction from the pricebook catalog, and nothing critical is missing for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single parameter with 100% coverage: 'id' is an integer and 'Membership type ID'. The description reinforces that the ID must be a known membership type, adding marginal context beyond the schema, but does not need to compensate for any schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a specific resource ('discounts configured for one known membership type ID'), and clarifies the scope as type-level benefits. It also distinguishes itself from the tenant pricebook discount-and-fee catalog, helping an agent tell it apart from related list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one known membership type ID' clearly signals that the caller must already have a membership type ID rather than using this tool to discover types. The contrast with 'tenant pricebook discount-and-fee catalog' gives useful exclusion guidance, though it does not explicitly name an alternative tool or spell out when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_types_duration_billing_listARead-onlyIdempotent
Retrieve duration and billing configurations under one required membership-type ID. Use this for plan-level term and billing choices; use memberships_types_get for the parent plan and memberships_list for customer memberships.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Membership type ID | |
| active | No | Filter by active status | True |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the scoping constraint of requiring one membership-type ID, but no extra behavioral details such as pagination or response semantics; these are partially covered by the output schema and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first front-loads the action and scope, the second gives routing guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only two-parameter tool with a full output schema and annotations covering safety, the description is complete. It tells the agent what the tool retrieves, its required scope, and how it differs from the most relevant siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters, including the active enum and default. The description reinforces that one membership-type ID is required but adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Retrieve') and resource ('duration and billing configurations') scoped to a required membership-type ID. It names sibling tools memberships_types_get and memberships_list, clearly distinguishing this tool from adjacent membership-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to use this tool ('plan-level term and billing choices') and routes alternatives: memberships_types_get for the parent plan and memberships_list for customer memberships. This removes ambiguity in a large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_types_getARead-onlyIdempotent
Retrieve a membership type by its ServiceTitan ID. Returns the single upstream record without pagination; use memberships_types_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Membership type ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral detail beyond that: it returns a single upstream record and is not paginated. It does not cover not-found/error behavior, but the annotations and expected get-by-id semantics make that a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler: the primary purpose is first, and the alternative is mentioned only where it helps route the agent. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter get-by-id tool with an output schema and strong annotations, the description is complete. It states behavior, scoping, and the relevant sibling in just two sentences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage for the single id parameter is 100% ('Membership type ID'), so the schema already documents the parameter. The description's 'ServiceTitan ID' phrase adds slight specificity but does not materially expand parameter semantics; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (retrieve), a resource (a membership type), and the key identifier (ServiceTitan ID). It also explicitly contrasts with memberships_types_list, making the tool's role unambiguous among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use when the ID is known and you need a single record. It explicitly directs unknown-ID searches to memberships_types_list, which is an ideal when-to-use/when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_types_listARead-onlyIdempotent
List one requested page of membership-type definitions using IDs, active state, billing frequency, duration, and created or modified timestamps; includeDurationBilling controls embedded billing details. Use memberships_types_get for one known plan and memberships_list for memberships sold to customers.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated membership type IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| duration | No | Filter by membership duration in months | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| billingFrequency | No | Filter by billing frequency | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| includeDurationBilling | No | Include duration billing items in each result |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the core safety profile is covered. The description adds behavioral context beyond that by noting the page-level return behavior and that includeDurationBilling controls embedded billing details. This meaningfully supplements the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first front-loads the action, resource, and filtering dimensions; the second gives crisp sibling routing. Every part earns its place, and the most important selection guidance appears immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, annotations cover the read-only/idempotent behavior, there are no required parameters, and the description handles pagination and sibling differentiation, nothing essential is missing for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents most parameters, but the description adds an orienting summary of the filtering dimensions: IDs, active state, billing frequency, duration, and created/modified timestamps. It also clarifies the behavioral role of includeDurationBilling. While not every uncovered parameter gets individual prose, the description does add value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a specific resource ('membership-type definitions'), and the page-level scope ('one requested page'). It also distinguishes this tool from the closely related memberships_types_get and memberships_list by naming what each of those is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes the agent: use memberships_types_get for one known plan and memberships_list for memberships sold to customers. This gives clear when-to-use guidance and names the key alternatives, so the agent can choose correctly without opening sibling schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memberships_types_recurring_service_items_listARead-onlyIdempotent
Retrieve the recurring-service items configured under one required membership-type ID. Use memberships_types_get for the parent plan; use memberships_recurring_services_list for recurring services scheduled for customer locations.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Membership type ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds a useful scoping distinction between membership-type-configured items and location-scheduled services, but it does not disclose pagination, response envelope, or auth requirements. That is acceptable given the annotations, but the description itself does not go beyond them significantly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence states the action and object, and the second sentence provides necessary sibling-tool disambiguation. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter list endpoint with a rich annotation set and an output schema, the description is complete. It explains what is returned, the required scope, and how this tool differs from the most relevant sibling tools. Nothing essential is missing for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the only parameter 'id' with type integer and description 'Membership type ID,' giving 100% schema coverage. The description repeats that the ID is a required membership-type ID but adds little semantic detail beyond what the schema provides, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object: 'Retrieve the recurring-service items configured under one required membership-type ID.' It clearly identifies the resource and scope, and the second sentence explicitly differentiates it from the parent-plan and customer-location tools, so an agent can distinguish it from siblings without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: 'Use memberships_types_get for the parent plan; use memberships_recurring_services_list for recurring services scheduled for customer locations.' This tells the agent exactly when to use this tool versus the closest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_employees_payrolls_listARead-onlyIdempotent
List one requested page of payroll periods for a required employee, with status, active-state, and date filters. Use payroll_payrolls_list for a tenant-wide search.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| active | No | Active filter | |
| status | No | Payroll status | |
| pageSize | No | Records per page (default 50) | |
| employeeId | Yes | Employee ID | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Filter payrolls created before this timestamp | |
| modifiedBefore | No | Filter payrolls modified before this UTC timestamp | |
| endedOnOrBefore | No | Filter payrolls ended on or before this UTC timestamp | |
| createdOnOrAfter | No | Filter payrolls created on or after this timestamp | |
| startedOnOrAfter | No | Filter payrolls started on or after this UTC timestamp | |
| approvedOnOrAfter | No | Filter payrolls approved on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Filter payrolls modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful context about pagination ('one requested page') and the requirement for an employee, which goes slightly beyond the structured annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the core function and scope are stated first, followed by the routing guidance for the sibling tool. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with full schema coverage, rich annotations, and an output schema, provides everything an agent needs to know to invoke this tool correctly. The only notable addition—the tenant-wide alternative—is already present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already documented. The description's mention of 'status, active-state, and date filters' groups the filters but does not add meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), a specific resource ('payroll periods for a required employee'), and scoping details ('one requested page', filters). It clearly distinguishes itself from payroll_payrolls_list, the tenant-wide sibling, so an agent can select it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative tool (payroll_payrolls_list) and the condition that should trigger it ('for a tenant-wide search'), leaving no ambiguity about when to use this tool versus its sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_gross_pay_items_listARead-onlyIdempotent
List one requested page of gross-pay line items, optionally scoped by employee, payroll IDs, or pay date range. Use this to inspect pay components rather than payroll-period summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| employeeId | No | Employee ID | |
| payrollIds | No | Comma-delimited payroll IDs | |
| employeeType | No | Employee type | |
| includeTotal | No | Include total count in response | |
| dateOnOrAfter | No | Filter items on or after this UTC timestamp | |
| dateOnOrBefore | No | Filter items on or before this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context: it returns one requested page and supports optional scoping, which helps the agent understand this is not a full unconstrained export.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the core action plus key scoping options are front-loaded. The contrast with payroll-period summaries earns its place and helps disambiguate the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, detailed return-value documentation is not needed. The description sufficiently covers the tool's purpose and main scoping choices. Minor gaps include not stating what happens when no filters are provided or whether a page parameter is expected, but the schema and annotations mitigate this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter meaning. The description summarizes parameter groups (employee, payroll IDs, pay date range) but does not add meaningful semantics beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('gross-pay line items'), and explicitly frames it as inspecting pay components rather than payroll-period summaries. This clearly differentiates it from payroll summary tools and related sibling tools like payroll_payrolls_list or export_gross_pay_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this tool to inspect pay components rather than payroll-period summaries. It also names the key scoping dimensions (employee, payroll IDs, pay date range), though it does not explicitly name alternative sibling tools or state when NOT to use this tool beyond the summary contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_payroll_adjustments_getARead-onlyIdempotent
Retrieve one payroll adjustment by its required ID. Use payroll_payroll_adjustments_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Payroll adjustment ID | |
| employeeType | No | Employee type |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is well covered. The description adds matching context about retrieving a single record by ID but does not disclose additional behavior such as not-found handling or effects of the optional employeeType parameter. This is adequate for a simple read-only getter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two tight sentences with no filler. It front-loads the core operation first and then gives the necessary routing instruction to the list alternative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, complete schema documentation, rich annotations, output schema, and explicit sibling routing, nothing essential is missing. The description is sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so id and employeeType are already well documented in the input schema. The description only reinforces that the ID is required and does not add new semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Retrieve one payroll adjustment' by ID. It clearly distinguishes this from the sibling list tool by explicitly naming payroll_payroll_adjustments_list for the case where the ID is unknown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool versus the alternative: use this when the ID is known, and use payroll_payroll_adjustments_list to search when the ID is unknown. This provides a clear selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_payroll_adjustments_listARead-onlyIdempotent
List one requested page of payroll adjustments, optionally filtered by employee IDs and posted timestamp. Use payroll_payroll_adjustments_get for one known adjustment ID.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| employeeIds | No | Comma-delimited employee IDs | |
| includeTotal | No | Include total count in response | |
| postedOnOrAfter | No | Filter adjustments posted on or after this UTC timestamp | |
| postedOnOrBefore | No | Filter adjustments posted on or before this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is established. The description adds a useful pagination caveat ('one requested page') and filter scope, but does not provide deeper behavioral context such as defaults or edge cases; however, the output schema and annotations cover most of this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no filler. The first states the action and scope, and the second routes to the exact alternative, making it efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 100% parameter schema coverage, strong safety annotations, an output schema, and an explicit sibling pointer, the description is complete enough for correct selection and invocation. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All six parameters have descriptions in the input schema, so the schema carries the full semantic load. The free-text description mentions 'employee IDs and posted timestamp' filters and 'page' implicitly, but adds little beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('List') with a clear resource ('payroll adjustments') and scope ('one requested page'), and explicitly names the sibling for fetching a single known adjustment. This makes it easy to distinguish from the get tool and other list endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description directly states when to use the sibling alternative: 'Use payroll_payroll_adjustments_get for one known adjustment ID.' It also clarifies that this tool is for paginated listing with optional filters, giving agents enough context to choose between list and get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_payroll_settings_employee_getARead-onlyIdempotent
Retrieve payroll settings for one employee by the required employee ID. Use payroll_payroll_settings_list to search across workers when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| employeeId | Yes | Employee ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds little behavioral detail beyond the annotations, but does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences with no filler. The primary action is stated first, and the alternative tool guidance is included without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-parameter read-only lookup with robust annotations and an output schema. The description fully covers what the agent needs to select and invoke the tool correctly, including the key alternative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the only parameter, employeeId, is already described as 'Employee ID'. The description reinforces that the ID is required but does not add meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: retrieve payroll settings for exactly one employee by employee ID. It also differentiates from the sibling list tool by noting this is the individual lookup variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: use payroll_payroll_settings_list to search across workers when the ID is unknown. This directly helps the agent choose between the two closely related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_payroll_settings_listARead-onlyIdempotent
List one requested page of payroll-setting records across employees and technicians, with active, employee-type, created, and modified filters. Use the employee or technician get tool when a worker ID is known.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| employeeType | No | Employee type | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, non-destructive operation. The description adds pagination and filter-scope context, but it does not disclose additional behavioral details like response shape, limits, or rate-limit implications. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. The first sentence states the tool's purpose and filters, and the second sentence provides a clear alternative. Information is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with all-optional parameters, an output schema, and safety annotations, the description is largely complete. It could have also mentioned the relationship to export_payroll_settings, but the core invocation and scope are clearly covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions the main filter families such as active, employee-type, created, and modified, which helps orient the agent. However, individual parameter meanings are mostly left to the schema, and schema coverage is only 56%, so description value is moderate but not comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the resource ('payroll-setting records'), the scope ('across employees and technicians'), and the pagination intent ('one requested page'). It also distinguishes itself from per-worker get tools by telling the agent to use the employee or technician get tool when a worker ID is known.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: use the employee or technician get tool when a worker ID is known. It does not explicitly compare against export_payroll_settings or other list siblings, but the provided guidance is sufficient for the main selection decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_payroll_settings_technician_getARead-onlyIdempotent
Retrieve payroll settings for one technician by the required technician ID. Use payroll_payroll_settings_list to search across workers when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| technicianId | Yes | Technician ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the scoping constraint that the fetch is for exactly one technician, but does not describe response format or any additional behavior. With annotations doing the heavy lifting, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and scope, then a helpful pointer to the alternative. Every sentence earns its place and there is no redundant or vague phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with a required field, 100% schema description coverage, an output schema, and annotations covering safety, the description provides all necessary operational context. The alternative routing is also included, so an agent has what it needs to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter, technicianId, with a description of 'Technician ID' at 100% coverage. The description only reinforces that the ID is required and identifies the technician; it adds no additional semantic detail such as format, source, or validation. Baseline 3 is appropriate when the schema already documents the parameter fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a specific resource ('payroll settings'), and a specific scope ('for one technician by the required technician ID'). It distinguishes this tool from the sibling list tool by emphasizing that it targets one technician, so an agent can tell it apart from related payroll endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative tool, payroll_payroll_settings_list, and gives the exact condition for choosing it: when the technician ID is unknown. This is clear routing guidance and leaves little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_payrolls_listARead-onlyIdempotent
List one requested page of payroll periods across employees, with employee type, status, active-state, and date filters. Use the employee- or technician-specific payroll tools when that worker ID is known.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| active | No | Active filter | |
| status | No | Payroll status | |
| pageSize | No | Records per page (default 50) | |
| employeeType | No | Employee type | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Filter payrolls created before this timestamp | |
| modifiedBefore | No | Filter payrolls modified before this UTC timestamp | |
| endedOnOrBefore | No | Filter payrolls ended on or before this UTC timestamp | |
| createdOnOrAfter | No | Filter payrolls created on or after this timestamp | |
| startedOnOrAfter | No | Filter payrolls started on or after this UTC timestamp | |
| approvedOnOrAfter | No | Filter payrolls approved on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Filter payrolls modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and open-world behavior. The description adds useful behavioral context beyond those annotations: the tool returns only one requested page and supports named filter categories, which helps the agent understand its scope and pagination semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary function and pagination style are front-loaded, and the routing guidance to sibling tools is placed in the second sentence without repeating schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 100% schema coverage, rich annotations, and an output schema, the description covers the essential selection and invocation details: pagination, scope, filter families, and when to use an alternative tool. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter in detail. The description adds a helpful high-level grouping ('employee type, status, active-state, and date filters'), but it does not add meaning beyond what the parameter names and descriptions already convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), names the resource ('payroll periods across employees'), and summarizes the available filters. It also distinguishes itself from the employee- and technician-specific payroll tools, so an agent can tell it apart without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use the employee- or technician-specific payroll tools when a worker ID is known, which gives a clear routing condition. It also implies this tool is for broader, unfiltered-by-worker listing, which is exactly the selection guidance needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_technicians_payrolls_listARead-onlyIdempotent
List one requested page of payroll periods for a required technician, with status, active-state, and date filters. Use payroll_payrolls_list for a tenant-wide search.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| active | No | Active filter | |
| status | No | Payroll status | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| technicianId | Yes | Technician ID | |
| createdBefore | No | Filter payrolls created before this timestamp | |
| modifiedBefore | No | Filter payrolls modified before this UTC timestamp | |
| endedOnOrBefore | No | Filter payrolls ended on or before this UTC timestamp | |
| createdOnOrAfter | No | Filter payrolls created on or after this timestamp | |
| startedOnOrAfter | No | Filter payrolls started on or after this UTC timestamp | |
| approvedOnOrAfter | No | Filter payrolls approved on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Filter payrolls modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that the tool is read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond that: it is page-scoped, requires a technician, and supports multiple filter categories. This is a small but meaningful disclosure of how the tool behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the tool's function and scope, the second gives the key alternative. The most important scoping information is front-loaded for quick agent scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema (100% parameter coverage), existing output schema, and annotations covering safety, the description completes the picture for selection and invocation. It communicates the required technician scope, pagination behavior, filter availability, and the tenant-wide alternative without needing to restate the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter. The description only groups parameters into categories like status, active-state, and date filters, which adds mild orientation but no new semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('List'), a specific resource ('one requested page of payroll periods for a required technician'), and the available filters (status, active-state, date). It also explicitly distinguishes itself from the tenant-wide sibling payroll_payrolls_list, so an agent can tell the tools apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly says when to use this tool: for a required technician's payroll periods. It also explicitly names the alternative, payroll_payrolls_list, for tenant-wide searches, giving the agent a direct routing decision between the two.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_timesheet_codes_getARead-onlyIdempotent
Retrieve one timesheet code by its required ID. Use payroll_timesheet_codes_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Timesheet code ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description only adds that it returns a single record by ID and points to the list tool when searching, but does not disclose not-found behavior or error semantics beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The primary action and requirement are front-loaded, and the alternative tool is given in a single follow-up sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-ID retrieval with a full output schema and rich annotations, the description is complete. It states what the tool does, when to use it, and when to use the sibling list tool, leaving no critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% because the only parameter 'id' is documented as 'Timesheet code ID'. The description adds no additional semantic detail about the parameter beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), resource ('timesheet code'), and the identifying condition ('by its required ID'). It clearly distinguishes this tool from the sibling list tool by name, so an agent can tell them apart without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use payroll_timesheet_codes_list when the ID is unknown, which is a clear when-to-use versus alternative directive. The phrase 'by its required ID' implies this tool is for when the ID is already known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_timesheet_codes_listBRead-onlyIdempotent
Retrieve one requested page of timesheet codes. Use the available filters to narrow results and request subsequent pages explicitly.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds one useful behavioral trait beyond annotations: the caller must explicitly request each page and should not expect automatic iteration. No contradiction exists, but the description does not add much additional behavioral context beyond paging.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact two-sentence definition with the core action front-loaded and no redundant phrasing. Every clause adds useful information: the resource, page semantics, filtering capability, and explicit pagination expectation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated read-only list tool with an output schema and safety-bearing annotations, the description conveys the essential paging behavior and filter availability. However, given the large sibling set and the presence of four loosely documented date params, the description could usefully mention sort/filter semantics or point to export/get alternatives for other retrieval needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 56%, and the description merely says to use 'available filters' without identifying which filters matter or how date-based filters behave. The schema describes page, sort, active, pageSize, and includeTotal, but the four date parameters remain semantically undocumented, and the description does not compensate for that gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Retrieve'), a resource ('timesheet codes'), and a key scope ('one requested page'), so an agent can tell this is a paginated list operation. It does not explicitly contrast with sibling tools like payroll_timesheet_codes_get or export_timesheet_codes, but the page-focused wording makes the listing role clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives tactical guidance on using filters and requesting pages, but it does not explain when to choose this tool over nearby alternatives such as payroll_timesheet_codes_get for a single code or export_timesheet_codes for bulk retrieval. No exclusions or alternative-selection conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_timesheets_job_listARead-onlyIdempotent
List one requested page of timesheets attached to a required job. Use this when the job ID is known; use payroll_timesheets_jobs_list to search across optional comma-delimited job IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| jobId | Yes | Job ID | |
| endedOn | No | Filter by ended-on date/time | |
| pageSize | No | Records per page (default 50) | |
| startedOn | No | Filter by started-on date/time | |
| includeTotal | No | Include total count in response | |
| technicianId | No | Technician ID | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false). The description adds pagination scoping ('one requested page'), which is behavioral context beyond the annotations, but does not detail filtering behavior, totals, or response shape. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: the first states the core purpose and scope, the second routes to the sibling alternative. The most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent, paginated list with an output schema and safety annotations, the description is nearly complete for selection and invocation. The only notable gap is the absence of any description for the four date-filter parameters, which the schema only partially mitigates through names and formats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 67% of parameters, so most of the semantic burden is carried by the schema. The description adds only marginal param-level meaning by anchoring jobId as the required discriminator; the four undocumented date filters (createdBefore, modifiedBefore, createdOnOrAfter, modifiedOnOrAfter) are not compensated for, though their names and formats are largely self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List), resource (timesheets attached to a job), and scope (one requested page, required job). Explicitly names payroll_timesheets_jobs_list as the sibling for multi-job searches, making the distinction unambiguous without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Use this when the job ID is known.' Names the alternative tool (payroll_timesheets_jobs_list) and the exact condition that selects it (searching across optional comma-delimited job IDs). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_timesheets_jobs_listARead-onlyIdempotent
List one requested page of job timesheets across jobs, optionally filtered by comma-delimited job IDs. Use payroll_timesheets_job_list when retrieving timesheets for one required job.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| jobIds | No | Comma-delimited job IDs | |
| endedOn | No | Filter by ended-on date/time | |
| pageSize | No | Records per page (default 50) | |
| startedOn | No | Filter by started-on date/time | |
| includeTotal | No | Include total count in response | |
| technicianId | No | Technician ID | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful scoping context ('across jobs', 'one requested page') but does not disclose further behavioral details such as response size limits or how filters interact. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The core action and scope are front-loaded, and the sibling distinction is given in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich input schema, an output schema, and annotations covering read-only and idempotent behavior, the description provides enough context for an agent to invoke the tool correctly. It names the key filter, clarifies pagination, and routes single-job requests to the right sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, which is moderate. The description reinforces the jobIds parameter by saying 'comma-delimited job IDs' and clarifies pagination with 'one requested page,' but it does not add meaning to the four undocumented date parameters or other fields. The schema still carries most of the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List one requested page of job timesheets across jobs.' It clearly distinguishes this tool from payroll_timesheets_job_list by framing this as the multi-job variant and noting the single-job sibling. An agent can select correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative tool and the condition that selects it: 'Use payroll_timesheets_job_list when retrieving timesheets for one required job.' This implies this tool is for retrieving timesheets across multiple jobs, giving the agent an actionable routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
payroll_timesheets_non_job_listARead-onlyIdempotent
List one requested page of non-job timesheets, optionally filtered by employee, employee type, dates, or active state. These records are not attached to jobs; use the job timesheet tools for job labor.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| employeeId | No | Employee ID | |
| employeeType | No | Employee type | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the description does not need to restate safety. It adds useful behavioral context by noting the tool returns a single page and that records are not job-attached, which clarifies scope beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The core action and scope are front-loaded, and the differentiation from job timesheet tools is placed at the end without redundant elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety, the description is complete enough for an agent to select and invoke the tool for non-job timesheet listing. It names the page/filtering behavior and clearly separates this tool from job-related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 64%, and the description summarizes filter groups ('employee, employee type, dates, or active state') at a high level. However, it does not add detailed semantics for the four undocumented date parameters, leaving some burden on parameter names and formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('non-job timesheets') and describes pagination ('one requested page') and optional filters. It also explicitly distinguishes the tool from job timesheet tools, making its scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use the tool ('List one requested page of non-job timesheets') and explicitly directs users away from it for job labor: 'use the job timesheet tools for job labor.' This provides clear when/when-not guidance and points to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
people_employees_exportARead-onlyIdempotent
Read the incremental employee export feed for People synchronization. This is the same feed as export_employees; use whichever name is available and do not fetch both. Continue immediately with continueFrom while hasMore is true; when false, retain it and wait before polling again. includeRecentChanges may repeat records.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token from previous response or custom start date | |
| includeRecentChanges | No | Prioritize recent changes in the export stream |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, but the description adds substantial behavioral context beyond them: the feed is incremental, it shares a source with export_employees (fetching both would duplicate work), records may repeat when includeRecentChanges is set, and the continuation-token polling loop. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler. The purpose is front-loaded, deduplication guidance comes second, and the polling protocol and caveat close it out. Every sentence carries operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return-value documentation is not needed, and annotations cover the safety profile. The description covers deduplication, polling, and duplicate-record behavior. Slight gap: the 'continueFrom' vs. 'from' parameter-name mismatch is not reconciled, which could cause an agent to look for a non-existent parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both 'from' and 'includeRecentChanges' have descriptions), so the baseline is 3. The description adds real value beyond the schema by explaining how the token drives the polling loop and by warning that includeRecentChanges may produce duplicate records. Minor deduction for using the term 'continueFrom' when the schema parameter is named 'from' — the mapping is implied but not explicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause states a specific verb and resource ('Read the incremental employee export feed for People synchronization') and explicitly disambiguates from the near-identical sibling export_employees ('This is the same feed as export_employees'). An agent can distinguish this tool from its 90+ siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance ('use whichever name is available and do not fetch both'), a precise polling protocol ('Continue immediately with continueFrom while hasMore is true; when false, retain it and wait before polling again'), and a behavior caveat ('includeRecentChanges may repeat records'). This is textbook when/how-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
people_employees_getARead-onlyIdempotent
Retrieve one employee by its required ID. Use people_employees_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Employee ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the cardinality ('one employee') and dependency on ID, but it does not disclose behavior beyond that, such as error handling or existence semantics. Given the annotation coverage, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The primary action is front-loaded, and the sibling guidance is placed exactly where it is useful. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only fetch with a comprehensive annotation set and an output schema, the description covers what the tool does and when to use the alternative. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the only parameter, id, is already documented as 'Employee ID'. The description repeats that the ID is required but adds no new semantic details beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: retrieve one employee by its required ID. It names the resource (employee), the action (retrieve), and the key constraint (ID required), and it distinguishes itself from the sibling people_employees_list without needing to inspect the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use the sibling people_employees_list instead: when the ID is unknown. This is direct, actionable routing guidance that prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
people_employees_listARead-onlyIdempotent
List one requested page of employees, optionally filtered by IDs, user IDs, name, active state, or dates. Use the get tool for one known ID or the export feed for synchronization.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated employee IDs (max 50) | |
| name | No | Filter employees by name (case-insensitive contains) | |
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| userIds | No | Comma-separated user IDs (max 50) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful pagination context ('one requested page') and summarizes available filters, but it does not disclose defaults, limits, or date semantics. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The core action and filters are front-loaded, and the sibling routing is stated second. It earns its keep without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 optional parameters and an output schema, the description gives enough orientation for an agent to use the tool correctly. Pagination behavior and alternatives are mentioned, though date-filter semantics and default page size are left implicit and rely on the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 64%, so the description partially compensates by naming filter categories that map to parameters: IDs, user IDs, name, active state, and dates. However, it does not add meaningful semantics beyond the schema's own parameter names and descriptions, especially for the undocumented date fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('employees'), and a precise scope ('one requested page'). It enumerates the filter dimensions and explicitly contrasts with the get and export sibling tools, making its purpose immediately distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use the get tool for one known ID and the export feed for synchronization, providing direct routing guidance. This tells an agent when to prefer the list tool and when to choose an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
people_performance_getARead-onlyIdempotent
Retrieve one requested page of marketing performance metrics for a UTC period, segmented by campaign, ad group, or keyword. Use this to compare acquisition performance at one selected grain.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| toUtc | Yes | End of filtering period in UTC | |
| fromUtc | Yes | Start of filtering period in UTC | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| performanceSegmentationType | Yes | Performance segmentation type |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds behavioral context beyond annotations by stating it returns only 'one requested page' rather than all results, and that metrics are segmented by campaign, ad group, or keyword. This is useful, though it doesn't elaborate on pagination loop behavior, so a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and scope, followed by a one-sentence use case. There is no filler or repetition of schema details, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, rich annotations, and 100% parameter coverage, the description does not need to explain return shape or parameter syntax. It covers pagination scope, UTC period filtering, and segmentation. A small gap is not pointing to a sibling for broader or aggregate campaign analytics, but overall context is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters with descriptions. The description adds no new parameter-level details beyond mapping 'UTC period' to fromUtc/toUtc and segmentation to performanceSegmentationType; it doesn't clarify page/pageSize/includeTotal beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Retrieve'), names the resource ('marketing performance metrics'), and narrows scope to a UTC period and one segmentation grain. It clearly describes what is returned ('one requested page') and the intended use, but it does not explicitly name or contrast sibling tools like intel_campaign_performance, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Directly provides a use case: 'Use this to compare acquisition performance at one selected grain.' This tells an agent when the tool is appropriate. It doesn't mention exclusions or when to use a sibling like intel_campaign_performance, so it earns a 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
people_technicians_getARead-onlyIdempotent
Retrieve one technician by its required ID. Use people_technicians_list to search when the technician ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Technician ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to restate safety. It adds no additional behavioral detail such as not-found handling or response shape, but the output schema and annotations cover the main concerns. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the core action first and the routing guidance second. No filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool, the description plus annotations and output schema are sufficient. It tells the agent exactly what is retrieved, by what key, and where to go if the key is unknown.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the id parameter is documented as 'Technician ID'. The description only says 'required ID', adding no meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation — retrieving one technician — and the required identifier. It clearly distinguishes from the sibling list tool by framing retrieval as ID-based lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the alternative people_technicians_list and gives the exact condition for choosing it: when the technician ID is unknown. This gives an agent a clear routing rule with no inference needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
people_technician_shifts_getARead-onlyIdempotent
Retrieve one technician shift by its required ID. Use people_technician_shifts_list to search when the shift ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Technician shift ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds only the known-ID requirement and the list alternative, but no additional behavioral context such as error handling or response shape. This meets the minimum bar but does not go beyond it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with zero filler. The core retrieval purpose is front-loaded, and the routing guidance to the list sibling is placed second, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter get-by-ID tool, the description, annotations, and output schema together cover everything needed to invoke it correctly. The known-ID vs. search guidance completes the context without missing details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'id' parameter is already described as 'Technician shift ID'. The description's mention of 'required ID' adds no substantive meaning beyond the schema's required field, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Retrieve one technician shift'), identifies the exact resource, and scopes it by ID. It also names the sibling list tool, making differentiation from people_technician_shifts_list immediate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool versus the alternative: use people_technician_shifts_get when the ID is known, and people_technician_shifts_list to search when the ID is unknown. This removes ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
people_technician_shifts_listARead-onlyIdempotent
List one requested page of technician shifts, including normal, on-call, and time-off shifts. Filter by technician, time bounds, text, type, or active state; use the get tool for one known shift ID.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, ModifiedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| shiftType | No | Shift type filter | |
| includeTotal | No | Include total count in response | |
| noteContains | No | Filter shifts by note substring | |
| technicianId | No | Technician ID filter | |
| createdBefore | No | ||
| titleContains | No | Filter shifts by title substring | |
| endsOnOrBefore | No | Return shifts ending on or before this UTC timestamp | |
| modifiedBefore | No | ||
| startsOnOrAfter | No | Return shifts starting on or after this UTC timestamp | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, lowering the burden on the description. The description adds useful behavioral context by noting pagination ('one requested page'), the shift categories returned, and the available filter dimensions without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence communicates purpose, scope, filter capabilities, and the alternative tool with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and comprehensive annotations, the description covers the essential decisions: what is listed, how it is paginated, what filters exist, and when to switch to the get tool. No critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 73%, and many parameters already have descriptions. The description adds high-level semantic grouping ('technician, time bounds, text, type, or active state') that helps the agent map parameter families to intent, especially for the four undocumented timestamp parameters which fall under 'time bounds'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a concrete resource ('one requested page of technician shifts'), and enumerates the shift types included ('normal, on-call, and time-off'). It also distinguishes this from the get tool for a single known shift ID, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: use this when you need a paginated, filterable list of shifts, and use the get tool when you already know a specific shift ID. This is an explicit when-to-use vs alternative statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
people_technicians_listARead-onlyIdempotent
List one requested page of technicians, optionally filtered by IDs, user IDs, name, active state, or dates. Use the get tool for one known ID or the export feed for synchronization.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated technician IDs (maximum 50) | |
| name | No | Filter technicians by name (case-insensitive contains) | |
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| userIds | No | Comma-separated user IDs (maximum 50) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, openWorld, idempotent, and non-destructive behavior. The description adds useful behavioral context beyond annotations by clarifying pagination semantics ('one requested page') and the optional filter dimensions. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The main behavior is front-loaded, and the alternative routing is stated in a separate, clearly purposeful sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated list with 11 parameters, an output schema, and strong annotations, the description covers the essential usage context: pagination, filtering, and routing to get/export alternatives. Parameter details and return shape are adequately handled by the schema and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 64%, so the description does not fully delegate parameter meaning to the schema. It usefully groups the filters into categories (IDs, user IDs, name, active state, dates) and notes optionality, but it does not explain the individual date-parameter semantics or add substantial detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the resource ('technicians'), and the core behavior (one requested page with optional filters). It also distinguishes itself from the get tool and export feed, which helps an agent tell it apart from sibling tools like people_technicians_get and export_technicians.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives explicit guidance on when to use alternatives: 'Use the get tool for one known ID or the export feed for synchronization.' This directly addresses when not to use this tool and names the alternative categories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
people_trucks_listARead-onlyIdempotent
List one requested page of inventory trucks, optionally filtered by IDs, active state, dates, or external-data mapping. externalDataKey and externalDataValues must be supplied together.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated truck IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| externalDataKey | No | External data key | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| externalDataValues | No | External data values | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is known. The description adds meaningful behavioral detail: pagination behavior, support for multiple filter categories, and the important constraint that externalDataKey and externalDataValues must be supplied together.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action and resource are front-loaded, followed by a compact enumeration of filters and a critical pairing constraint. Every word contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, annotations, and self-descriptive parameter names, the description covers the essential agent-facing concerns: what is listed, pagination, filter options, and the external-data pairing rule. It could explicitly state that filters are combinable, but this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds value beyond the schema by grouping parameters into conceptual filter categories (IDs, active state, dates, external-data mapping) and by exposing the dependency between externalDataKey and externalDataValues, which the schema does not state. The undocumented date parameters are at least covered by the 'dates' grouping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('inventory trucks'), and the page-based scope ('one requested page'). It also enumerates the main filtering dimensions, making the tool's purpose immediately distinguishable from the many sibling list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys when to use the tool: when a page of inventory trucks is needed, with optional filters. It does not explicitly name alternatives or exclusions, but the resource and behavior are unambiguous enough that an agent can select it correctly from the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricebook_categories_getARead-onlyIdempotent
Retrieve a pricebook category by its ServiceTitan ID. Returns the single upstream record without pagination; use pricebook_categories_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Category ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context beyond annotations by stating the tool returns a single upstream record and performs no pagination, which helps set return-shape expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary behavior is front-loaded, and the sibling routing guidance is placed in the second sentence without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter get-by-ID tool with an output schema and strong annotations, the description covers everything an agent needs: what it does, what to expect, and when to use the alternative list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single id parameter is documented in the schema. The description adds minor context by clarifying the ID is a ServiceTitan ID and that it must already be known, but the schema carries the main semantic burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieve a pricebook category by ServiceTitan ID. It also differentiates itself from the sibling pricebook_categories_list by noting this returns the single upstream record without pagination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool: when the ID is known. It also directs the agent to pricebook_categories_list when the ID is unknown, giving clear routing between the two sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricebook_categories_listARead-onlyIdempotent
List one requested page of pricebook categories using category type, active state, and created or modified timestamps. Use pricebook_categories_get for one known category ID; use the service, material, or equipment list tool for sellable items.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Name | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| categoryType | No | Category type filter | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior. The description adds the pagination constraint ('one requested page') and the available filter dimensions (category type, active state, created/modified timestamps), providing behavioral context beyond the structured hints. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first front-loads the action and filter scope, the second routes to the correct alternatives. There is no filler, and every clause adds decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich output schema, non-destructive annotations, and zero required parameters, the description covers what the tool does, which filters are relevant, and how it differs from siblings. The remaining details (defaults, sort patterns, page size) are already present in the input schema, so nothing critical for selecting or invoking the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 6 of 10 parameters. The description maps 'category type, active state, and created or modified timestamps' to the corresponding filters, including some context for the four timestamp parameters that lack schema descriptions. However, it does not explain individual date-time semantics, defaults, or pagination/sort options, so the added meaning is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List one requested page of pricebook categories', and it names the key filters. It also distinguishes the tool from pricebook_categories_get (for a single known ID) and the service/material/equipment list tools (for sellable items), so an agent can tell them apart without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing: use pricebook_categories_get for one known category ID, and use the service, material, or equipment list tool for sellable items. This clearly states when this tool is appropriate and when an alternative is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricebook_discounts_fees_getARead-onlyIdempotent
Retrieve a discount or fee by its ServiceTitan ID. Returns the single upstream record without pagination; use pricebook_discounts_fees_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Discount/Fee ID | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds useful context by stating the response is a single upstream record without pagination, which is not fully captured by the annotations. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core action and resource, then adds the key behavioral distinction and the alternative tool. Every element earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-record get tool, the description covers the essential purpose, the differentiation from the list sibling, and the lack of pagination. An output schema exists, so return-value details are already available, and the annotations cover the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters ('id' and 'externalDataApplicationGuid') already documented in the input schema. The description does not add parameter-level details beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve') and resource ('a discount or fee by its ServiceTitan ID'), making the tool's function immediately clear. It also distinguishes this get operation from the list sibling by emphasizing single-record retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to use pricebook_discounts_fees_list when the ID is unknown, providing clear routing guidance. It also notes that this endpoint returns a single record without pagination, which further clarifies when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricebook_discounts_fees_listARead-onlyIdempotent
List one requested page of pricebook discount and fee items using IDs, active state, created or modified timestamps, and external-data mappings. Use pricebook_discounts_fees_get for a known item; membership-type discounts are a separate plan-level benefit.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Code, DisplayName, CreatedOn, ModifiedOn, Price, MemberPrice, AddOnPrice, AddOnMemberPrice, MaterialsCost, PrimaryVendor, Cost, Manufacturer, Priority | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| externalDataKey | No | External data key filter | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| externalDataValues | No | External data values filter | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context by emphasizing pagination ('one requested page') and by narrowing scope around membership-type discounts. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action is front-loaded, and the routing guidance is packed into the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, detailed input schema, and annotations covering safety/idempotence, the description supplies the remaining decision-critical context: pagination, the alternative get tool, and the membership-type discount exclusion. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 69%, so the schema already documents most parameters. The description broadly groups filters (IDs, active state, timestamps, external-data mappings), but it does not add precise syntax, defaults, or semantics beyond what the schema provides. It gives a useful summary but not full compensation for the undocumented timestamp and includeTotal parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a specific resource ('pricebook discount and fee items'), and a specific scope ('one requested page'). It also distinguishes itself from the sibling get tool, so an agent can tell list versus get apart immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use pricebook_discounts_fees_get for a known item, which tells the agent when not to use this list tool. It also states that membership-type discounts are a separate plan-level benefit, preventing the agent from expecting them here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricebook_equipment_getARead-onlyIdempotent
Retrieve equipment item by its ServiceTitan ID. Returns the single upstream record without pagination; use pricebook_equipment_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Equipment ID | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, open-world, and non-destructive, so the safety profile is covered. The description adds behavioral detail by promising a single upstream record with no pagination, which helps the agent understand the return shape beyond the annotations. It does not discuss error behavior, but that is a minor omission given the strong annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the full message: action, return-shape guarantee, and routing to the sibling when the ID is unknown. There is no filler or repetition of the schema. The front-loaded verb helps an agent scan quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool, the description covers what the agent needs: what it returns (single record, no pagination) and when to use this instead of the list. The output schema provides the return structure, and the annotations cover safety and idempotence. Nothing important is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents both parameters with descriptions, and schema description coverage is 100%, so the baseline is 3. The description adds a small amount of semantic value by clarifying that 'id' is the ServiceTitan ID, which is more specific than 'Equipment ID'. It does not add meaning for externalDataApplicationGuid, but the schema already covers it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Retrieve'), resource ('equipment item'), and key identifier ('ServiceTitan ID'). It also distinguishes itself from the list sibling by specifying that it returns a single, non-paginated upstream record. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool (when the ServiceTitan ID is known) and names the alternative (pricebook_equipment_list) for when the ID is unknown. This gives the agent a clear decision rule for choosing between the get and list variants. No other guidance is needed for such a straightforward lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricebook_equipment_listARead-onlyIdempotent
List one requested page of equipment pricebook items using IDs, active state, created or modified timestamps, and external-data mappings. Use pricebook_equipment_get for a known pricebook item; use installed-equipment tools for equipment attached to customer locations.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Code, DisplayName, CreatedOn, ModifiedOn, Price, MemberPrice, AddOnPrice, AddOnMemberPrice, MaterialsCost, PrimaryVendor, Cost, Manufacturer, Priority | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| externalDataKey | No | External data key filter | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| externalDataValues | No | External data values filter | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is well covered. The description adds that this is a paged, filterable listing, but it does not disclose additional behavioral details such as return size limits or response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: the first states the action and scope, the second provides routing guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 optional parameters, a complete input schema, an output schema, and strong safety annotations, the description covers purpose, pagination, filter dimensions, and alternative tools. Nothing critical is missing for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 69% schema description coverage, the description adds value by grouping the many parameters into meaningful filter categories: IDs, active state, timestamps, and external-data mappings. This helps an agent understand intent-to-parameter relationships even where individual schema descriptions are thin.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List one requested page of equipment pricebook items,' stating a specific verb, resource, and pagination scope. It also differentiates itself from pricebook_equipment_get and installed-equipment tools, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use pricebook_equipment_get for a known pricebook item and installed-equipment tools for equipment attached to customer locations. This gives clear when-to-use and when-not-to-use guidance relative to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricebook_materials_cost_types_listARead-onlyIdempotent
List the material cost-type definitions available to pricebook material records; this operation has no filters or caller-managed paging. Use pricebook_materials_list for material items and inventory tools for stock transactions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by stating there are no filters and no caller-managed paging, which is not available in the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: two sentences that front-load the core purpose, then add operational constraints and sibling routing. Every sentence earns its place with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter list operation with an output schema and strong annotations, the description covers the purpose, behavioral constraints, and alternative tools. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is little for the description to explain. The description reinforces this by explicitly stating there are no filters, which is helpful even though the empty schema already implies it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and a precise resource ('material cost-type definitions available to pricebook material records'). It also distinguishes itself from the closely named pricebook_materials_list by clarifying that is for material items, not cost-type definitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says this operation has no filters or caller-managed paging, which tells the agent not to attempt passing parameters. It also points to pricebook_materials_list for material items and inventory tools for stock transactions, providing clear routing to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricebook_materials_getARead-onlyIdempotent
Retrieve a material by its ServiceTitan ID. Returns the single upstream record without pagination; use pricebook_materials_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Material ID | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds useful behavioral detail beyond that: it returns a single upstream record and has no pagination. This helps the agent set expectations without relying solely on the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The core action is front-loaded, and the alternative-tool routing is stated compactly. Every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool, this description is complete: it explains the retrieval behavior, explicitly notes the lack of pagination, and provides the search alternative for unknown IDs. Combined with the schema, annotations, and output schema, the agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description reinforces that 'id' is the ServiceTitan ID, but it does not add meaningful detail about the optional externalDataApplicationGuid parameter. This meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Retrieve a material') and the identifying key ('ServiceTitan ID'), and clearly distinguishes this getter from the list/search sibling by noting it returns a single record without pagination. This is unambiguous and differentiates the tool from pricebook_materials_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool (when the ID is known) and when to use the alternative ('use pricebook_materials_list to search when the ID is unknown'). This is direct, actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricebook_materials_listARead-onlyIdempotent
List one requested page of material pricebook items using IDs, cost-type IDs, other-direct-cost state, active state, timestamps, and external-data mappings. Use pricebook_materials_get for a known item, pricebook_materials_cost_types_list for cost metadata, or inventory tools for stock movement.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Code, DisplayName, CreatedOn, ModifiedOn, Price, MemberPrice, AddOnPrice, AddOnMemberPrice, MaterialsCost, PrimaryVendor, Cost, Manufacturer, Priority | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| costTypeIds | No | Comma-separated cost type IDs | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| externalDataKey | No | External data key filter | |
| createdOnOrAfter | No | ||
| isOtherDirectCost | No | Filter by other direct cost materials | |
| modifiedOnOrAfter | No | ||
| externalDataValues | No | External data values filter | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds useful context beyond those annotations by clarifying that only one requested page is returned and by summarizing the available filters (timestamps, external-data mappings, etc.). It does not discuss pagination defaults or response shape, but the output schema covers return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence front-loads the tool's core behavior and filtering scope; the second efficiently names the alternatives. Every phrase contributes to selection or invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter, zero-required list tool with a rich output schema and read-only annotations, the description is sufficiently complete. It states the operation, scopes the result to one page, summarizes filter dimensions, and routes to key alternatives. It could mention pagination parameters by name, but the schema already documents them, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 73%, and the schema already documents each parameter with its purpose. The description groups parameters into categories ('IDs, cost-type IDs, other-direct-cost state, active state, timestamps, and external-data mappings'), which helps orient the agent but does not add new semantic details beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List one requested page of material pricebook items') and enumerates the filtering dimensions. It also distinguishes itself from closely related tools by naming pricebook_materials_get, pricebook_materials_cost_types_list, and inventory tools, so an agent can separate it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing guidance: use pricebook_materials_get for a known item, pricebook_materials_cost_types_list for cost metadata, and inventory tools for stock movement. This directly tells the agent when to choose this tool versus alternatives, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricebook_materials_markup_getARead-onlyIdempotent
Retrieve a material markup range by its ServiceTitan ID. Returns the single upstream record without pagination; use pricebook_materials_markup_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Material markup ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond annotations: it returns a single upstream record and does not paginate. This is helpful and not redundant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core retrieval action is front-loaded, the no-pagination behavior is stated, and the alternative is provided in the same sentence as the search condition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple one-parameter get-by-ID tool with an output schema and safety annotations. The description covers the key behavior (single record, no pagination) and directs the agent to the list tool when an ID is unavailable. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the single required id parameter, so the baseline is 3. The description adds a small but useful semantic upgrade by calling it a 'ServiceTitan ID', clarifying that the ID refers to the upstream ServiceTitan entity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve', the resource ('material markup range'), and the lookup key ('by its ServiceTitan ID'). It also distinguishes this from the list tool by emphasizing 'single upstream record', so an agent can tell which tool to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes to the sibling tool: 'use pricebook_materials_markup_list to search when the ID is unknown'. This is 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.
pricebook_materials_markup_listARead-onlyIdempotent
List one requested page of configured material markup ranges using paging, sorting, and total-count controls. Use pricebook_materials_markup_get for a known range ID; use pricebook_materials_list for the material items those pricing rules affect.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort expression for markups (+Field or -Field) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds useful behavioral context by disclosing that this is a page-based list operation with support for sorting and total-count controls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence states the operation and controls; the second routes to the correct alternatives. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward read-only list tool, the description is complete: it explains the page-based behavior, mentions sorting and total-count controls, and points to the relevant sibling tools. An output schema exists, so return-value details are not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters. The description reinforces the paging, sorting, and total-count concepts but does not need to add parameter-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List one requested page of configured material markup ranges' with paging, sorting, and total-count controls. It clearly distinguishes itself from related tools by naming pricebook_materials_markup_get for a known range ID and pricebook_materials_list for the material items affected.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit: use pricebook_materials_markup_get when a range ID is known, and pricebook_materials_list when listing the material items those rules affect. This gives an agent clear routing between the list tool and its closest siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricebook_services_getARead-onlyIdempotent
Retrieve a service by its ServiceTitan ID. Returns the single upstream record without pagination; use pricebook_services_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Service ID | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds useful context beyond that: 'Returns the single upstream record without pagination,' which informs the agent about response style and avoids expecting paginated output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the essential information with no redundancy. The primary behavior is front-loaded and the alternative tool is mentioned in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple ID-based lookup with a clear schema and output schema present. The description covers the core behavior, the no-pagination trait, and the alternative for unknown IDs, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% parameter documentation, so the baseline is 3. The description adds little beyond the schema, though it reinforces that the id is the ServiceTitan ID. No extra meaning is provided for externalDataApplicationGuid, but the schema already covers it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Retrieve a service by its ServiceTitan ID.' It clearly distinguishes itself from the sibling pricebook_services_list by specifying ID-based retrieval of a single record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use a different tool: 'use pricebook_services_list to search when the ID is unknown.' This gives a clear alternative and the condition for choosing it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricebook_services_listARead-onlyIdempotent
List one requested page of service pricebook items using IDs, active state, created or modified timestamps, and external-data mappings. Use pricebook_services_get for one known item; use estimates or invoices for services quoted or sold on customer transactions.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated IDs (max 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, Code, DisplayName, CreatedOn, ModifiedOn, Price, MemberPrice, AddOnPrice, AddOnMemberPrice, MaterialsCost, PrimaryVendor, Cost, Manufacturer, Priority | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| externalDataKey | No | External data key filter | |
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| externalDataValues | No | External data values filter | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description does not need to restate safety. It adds useful behavioral context by emphasizing pagination ('one requested page') and by enumerating the filterable data dimensions, though it does not clarify before/on-or-after semantics for the timestamp filters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with no filler: the core operation and filter dimensions come first, followed by alternative tool routing. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter list tool, the description is lean but sufficient when combined with the schema, annotations, and output schema. It defines the resource, pagination behavior, major filters, and sibling alternatives; only a pointer to bulk export tools like export_services would make it slightly more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description groups the 13 optional parameters into meaningful categories (IDs, active state, timestamps, external-data mappings), which helps an agent understand the tool's capabilities at a glance. However, schema description coverage is only 69%, and the four timestamp parameters lack schema descriptions while the description merely says 'created or modified timestamps' without explaining the before/on-or-after distinction; page, sort, pageSize, and includeTotal are also left implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object—'List one requested page of service pricebook items'—and names the main filter dimensions: IDs, active state, timestamps, and external-data mappings. It also distinguishes itself from pricebook_services_get and from estimates/invoices, making its scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes to pricebook_services_get for a single known item and to estimates or invoices for services quoted or sold on customer transactions. These are clear when-not-to-use-this-tool signals against the most relevant alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reporting_dynamic_value_sets_getARead-onlyIdempotent
Resolve selectable values for a report dynamic-value-set identifier. Use values from the report definition to supply the required identifier and paging inputs when that report parameter offers dynamic choices.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| dynamicSetId | Yes | Dynamic set ID from report metadata | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds context about dynamic report parameters and report-definition dependencies, but no additional behavioral caveats such as auth needs or rate limits. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence states the core purpose, and the second provides usage context. Every phrase contributes meaning and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, complete parameter schema, and output schema, the description covers the essential invocation context: what the tool resolves and when/how to call it. Nothing critical is missing for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by clarifying that dynamicSetId and paging inputs should be sourced from the report definition, which helps the agent know how to populate the parameters beyond their individual schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Resolve selectable values for a report dynamic-value-set identifier.' This clearly communicates that the tool retrieves option values for a dynamic report parameter, and no sibling tool covers the same operation, so it is readily distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool: 'when that report parameter offers dynamic choices.' It also tells the agent where to get inputs: 'Use values from the report definition.' It does not name alternatives or exclusions, but there is no closely overlapping sibling tool, so 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.
reporting_report_categories_listARead-onlyIdempotent
List one requested page of report categories with paging and total-count controls. Start here to discover a category ID, then use reporting_reports_list for reports in that category and reporting_reports_get for a report parameter definition.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral context beyond that by stating the tool returns exactly one requested page with paging and total-count controls, and that it is the entry point for discovering category IDs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core capability is front-loaded and the workflow continuation is in the second sentence, making the description easy to scan and act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple optional-parameter listing tool with strong annotations and an output schema, the description is complete: it states what it returns, how paging works, and how the result should be used in the wider reporting workflow. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so page, pageSize, and includeTotal are already documented in the schema. The description only lightly reinforces 'paging and total-count controls' and does not add new parameter-level meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List one requested page of report categories' and clarifies paging/total-count behavior. It also distinguishes itself from sibling reporting tools by placing it first in a workflow ('Start here to discover a category ID'), so an agent can differentiate it from reporting_reports_list and reporting_reports_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance ('Start here') and names the successors ('use reporting_reports_list for reports in that category and reporting_reports_get for a report parameter definition'). This effectively routes an agent to the correct tool for each step without needing to inspect schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reporting_reports_data_createARead-onlyIdempotent
Execute one requested page of a known report and return the upstream report-data response. First inspect reporting_reports_get for that report's required parameter names, value types, and accepted formats; pass those entries in parameters, and use page, pageSize, and includeTotal to control this request. This generic reporting call is not subject to the intelligence tools' report scheduler or 65-second spacing.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page | |
| reportId | Yes | Report ID | |
| parameters | Yes | Report parameters (name/value pairs from report definition) | |
| includeTotal | No | Include total count | |
| reportCategory | Yes | Report category ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (read-only, idempotent, open-world, non-destructive). The description adds meaningful behavioral context beyond that: it returns the upstream report-data response, executes only one requested page, and is exempt from the intelligence tools' scheduling constraints. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler: it states the core action, gives the parameter workflow, and notes a key distinction from sibling tools. Each sentence earns its place and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic report-data execution call with an output schema, the description covers the prerequisites (known report, inspect reporting_reports_get), parameter sourcing, pagination controls, and relevant scheduler distinction. The output schema handles return-value details, and annotations cover the behavioral safety profile, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value by explaining how to populate parameters: look up required parameter names, value types, and accepted formats from reporting_reports_get, then pass them as name/value entries. It also clarifies the roles of page, pageSize, and includeTotal as request controls, going beyond the schema's per-property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object: 'Execute one requested page of a known report and return the upstream report-data response.' It clearly identifies the tool's resource (a page of a known report) and distinguishes it from the related reporting_reports_get and the intelligence tools by noting it is a generic reporting call not bound to their scheduler or spacing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: first inspect reporting_reports_get for parameter definitions, then pass those entries in parameters and control the request with page, pageSize, and includeTotal. It also tells the agent how this call differs from the intelligence tools by explicitly stating it is not subject to the report scheduler or 65-second spacing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reporting_reports_getARead-onlyIdempotent
Retrieve one report definition from a known category and report ID, including its parameter contract. Use reporting_reports_list to discover reports and reporting_reports_data_create to execute the selected definition.
| Name | Required | Description | Default |
|---|---|---|---|
| reportId | Yes | Report ID | |
| reportCategory | Yes | Report category ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds relevant context by noting the retrieval includes the parameter contract, which helps an agent understand what the returned definition will contain, but it does not disclose additional behavioral traits beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two purposeful sentences with no filler. The first states what the tool does and its prerequisite; the second names the exact sibling tools for discovery and execution. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter retrieval tool with a read-only annotation set and an output schema, the description provides sufficient context. It also orients the agent within the reporting workflow by naming the related list and execute tools, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both required parameters are described in the schema. The description does not add deeper semantic detail about reportCategory or reportId beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Retrieve one report definition') and scopes by 'known category and report ID.' It explicitly distinguishes itself from reporting_reports_list (discovery) and reporting_reports_data_create (execution), so an agent can select this tool correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the prerequisite knowledge needed ('known category and report ID') and directs the agent to reporting_reports_list for discovery and reporting_reports_data_create for execution. This clearly establishes when to use this tool vs siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reporting_reports_listARead-onlyIdempotent
List report definitions within a known report category. Use reporting_report_categories_list to discover category IDs, then use reporting_reports_get for one report definition before executing it.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| reportCategory | Yes | Report category ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds that the category ID must already be known and discoverable via a sibling tool, but does not disclose additional behavioral traits such as pagination defaults or filtering behavior beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the entire definition with no filler. The core action is front-loaded, and the workflow reference to sibling tools is succinct and relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, full parameter schema coverage, and rich annotations, the description is complete for calling this tool correctly. It also provides the prerequisite discovery path and a reasonable next step, so an agent has everything needed to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter already described in the input schema. The description adds only minimal context about reportCategory being a discoverable ID; it does not meaningfully expand on parameter meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('List report definitions') and scopes it to a known report category, which distinguishes it from reporting_report_categories_list and reporting_reports_get. It leaves no ambiguity about what the tool returns: a collection of report definitions within one category.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear workflow guidance: use reporting_report_categories_list to discover category IDs, then reporting_reports_get for a single definition. It does not explicitly state when not to use this tool or name all alternatives, but it provides clear context and a sensible sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scheduling_appointment_assignments_listARead-onlyIdempotent
Find one page of technician-to-appointment assignments by assignment IDs, appointment IDs, job ID, active state, or creation and modification dates. Use dispatch_appointments_get or dispatch_appointments_list for the appointment records themselves; this tool returns the assignment relationships.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated assignment IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, ModifiedOn | |
| jobId | No | Return assignments for a job ID | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return items created before this UTC timestamp | |
| appointmentIds | No | Comma-separated appointment IDs (maximum 50) | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the 'one page' behavior and the relationship-focus, which is useful but does not go deeper into pagination, default filters, or response characteristics. This is acceptable given the rich annotations, hence a middling score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core operation and scope are front-loaded, and the sibling distinction is delivered in a compact second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the tool has 0 required parameters, the description sufficiently covers what the tool does, what it filters by, and how it differs from the most relevant siblings. Pagination details are fully documented in the input schema, so nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 12 parameters in detail. The description's mention of filter fields (assignment IDs, appointment IDs, job ID, active state, dates) adds no meaning beyond what the schema provides, so it stays at baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Find'), a specific resource ('technician-to-appointment assignments'), and the scope ('one page'), and it differentiates itself from appointment-record tools by clarifying it returns assignment relationships. This makes the tool's purpose immediately clear and distinct from siblings like dispatch_appointments_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to use dispatch_appointments_get or dispatch_appointments_list for appointment records themselves, while this tool is for assignment relationships. This direct contrast with named alternatives leaves no ambiguity about when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scheduling_business_hours_listARead-onlyIdempotent
Retrieve the tenant business-hours configuration used for scheduling availability. This returns configured hours rather than appointment records or calculated open capacity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and open-world behavior, so the description does not need to restate safety. It adds useful semantic scope by clarifying that this returns configuration rather than computed availability, but it does not add behavioral details such as freshness, rate limits, or other operational traits. This is acceptable but not rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The main action and resource are front-loaded, and the second sentence sharpens scope by stating what is excluded. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a parameterless read with strong annotations and an output schema, so the description only needs to establish what this tool is for and how it differs from related tools. It does that clearly and completely. Nothing an agent needs to correctly select this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so there is no parameter documentation burden for the description. With 0 parameters, the baseline is 4; the description appropriately says nothing about parameter semantics because nothing is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and a specific resource ('tenant business-hours configuration used for scheduling availability'). It also explicitly distinguishes the result from 'appointment records or calculated open capacity', which clearly separates it from the many scheduling and dispatch sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: whenever the tenant's configured business hours are needed. It also states what it does NOT return (appointment records or open capacity), but it does not name a specific alternative tool to use for those other needs, so there is no fully explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scheduling_non_job_appointments_getARead-onlyIdempotent
Retrieve a non-job appointment by its ServiceTitan ID. Returns the single upstream record without pagination; use scheduling_non_job_appointments_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Non-job appointment ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering the safety profile. The description adds useful behavior beyond that: it returns 'the single upstream record without pagination', which prevents an agent from expecting paged results. This is relevant context for a get operation, though it does not describe 404/not-found behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core purpose is front-loaded, followed by the pagination behavior and the sibling alternative. Every sentence contributes useful guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter get operation with a full output schema and safe-read annotations, the description is complete. It covers what the tool does, how it behaves regarding pagination, and which sibling to use when the ID is unknown. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the single 'id' parameter already described as 'Non-job appointment ID'. The description adds that this is the 'ServiceTitan ID' and clarifies the tool returns the single upstream record, which helps an agent understand the identity and scope of the parameter. This is a small but meaningful addition beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a resource ('non-job appointment'), and the identifier required ('ServiceTitan ID'). It explicitly distinguishes this tool from scheduling_non_job_appointments_list, so an agent can tell the get-by-ID operation apart from the search/list operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: use this tool when the ID is known, and use scheduling_non_job_appointments_list when the ID is unknown. This directly orients an agent toward the correct sibling tool and provides a clear decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scheduling_non_job_appointments_listARead-onlyIdempotent
List one requested page of non-job appointments using IDs, technician, timesheet code, schedule visibility, active state, start bounds, and created or modified timestamps. Use scheduling_non_job_appointments_get for a known appointment; use dispatch appointment tools for appointments attached to jobs.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated IDs (maximum 50) | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, ModifiedOn | |
| pageSize | No | Records per page (default 50) | |
| activeOnly | No | Return active items only | |
| includeTotal | No | Include total count in response | |
| technicianId | No | Filter by technician ID | |
| createdBefore | No | Return items created before this UTC timestamp | |
| modifiedBefore | No | Return items modified before this UTC timestamp | |
| startsOnOrAfter | No | Return items starting on or after this UTC timestamp | |
| timesheetCodeId | No | Filter by timesheet code ID | |
| createdOnOrAfter | No | Return items created on or after this UTC timestamp | |
| startsOnOrBefore | No | Return items starting on or before this UTC timestamp | |
| modifiedOnOrAfter | No | Return items modified on or after this UTC timestamp | |
| showOnTechnicianSchedule | No | Filter by technician schedule visibility |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by stating that the tool returns only one requested page, implying pagination rather than a full unfiltered dump, and clarifies the non-job scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences accomplish both jobs: stating the action and filter surface, then disambiguating from related tools. The primary behavior is front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema is present, the 100% parameter documentation, and annotations covering read-only/idempotent behavior, the description adds the missing pieces: pagination semantics and sibling-tool routing. The agent has everything needed to select and call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 15 parameters in detail. The description groups parameters into categories like 'IDs, technician, timesheet code, schedule visibility, active state, start bounds, and created or modified timestamps,' but adds no new semantic detail beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation as listing a page of non-job appointments and enumerates the main filter dimensions. It distinguishes itself from scheduling_non_job_appointments_get and dispatch appointment tools, so an agent can tell exactly which resource and scope this endpoint covers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the sibling get tool for a known appointment and when to switch to dispatch appointment tools for job-attached appointments. This gives the agent unambiguous routing guidance without needing to inspect other tool schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scheduling_teams_getARead-onlyIdempotent
Retrieve a team by its ServiceTitan ID. Returns the single upstream record without pagination; use scheduling_teams_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Team ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint=false. The description adds non-obvious behavioral context: it returns the 'single upstream record' and does not paginate. This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core retrieval behavior is stated first, and the pagination/alternative-search guidance is compactly added. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter lookup with rich annotations and an output schema, the description fully covers what the agent needs: the exact key, the non-paginated single-record behavior, and the fallback tool when the ID is unavailable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the required 'id' parameter with 100% coverage. The description adds useful meaning by clarifying that the ID is the ServiceTitan ID and that the result is a single upstream record, which helps the agent understand the parameter's provenance and expected result shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a specific resource ('a team'), and the lookup key ('ServiceTitan ID'). It also explicitly distinguishes itself from scheduling_teams_list, which prevents confusion with the closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use scheduling_teams_list when the ID is unknown, giving a clear an alternative and the condition that selects it. This is direct, actionable guidance for an agent deciding between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scheduling_teams_listARead-onlyIdempotent
List one requested page of scheduling teams using includeInactive and created or modified timestamp filters. Use scheduling_teams_get for one known team ID; use scheduling appointment assignments for technician-to-appointment assignments rather than team definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, ModifiedOn | |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return teams created before this UTC timestamp | |
| modifiedBefore | No | Return teams modified before this UTC timestamp | |
| includeInactive | No | Whether to include inactive teams | |
| createdOnOrAfter | No | Return teams created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return teams modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering safety and side-effect expectations. The description adds useful context beyond annotations by clarifying pagination ('one requested page') and the filtering dimensions. It does not mention default behavior of includeInactive, but the schema documents defaults for pageSize and sort, so the gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence states the action, resource, and core capabilities; the second sentence disambiguates sibling tools. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a read-only list tool with nine fully documented parameters, no required parameters, an output schema, and strong safety annotations. The description completes the picture by routing the agent away from two closely related sibling tools. Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all nine parameters with meaningful descriptions. The tool description adds only high-level mention of the filter categories without introducing new parameter meaning, which aligns with the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List one requested page of scheduling teams', and immediately names the available filters (includeInactive, created/modified timestamps). It also distinguishes itself from scheduling_teams_get and from scheduling appointment assignments, making sibling differentiation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use alternatives: scheduling_teams_get for one known team ID, and scheduling appointment assignments for technician-to-appointment assignments instead of team definitions. This gives an agent actionable routing guidance with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scheduling_zones_getARead-onlyIdempotent
Retrieve a zone by its ServiceTitan ID. Returns the single upstream record without pagination; use scheduling_zones_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Zone ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only, idempotent, and non-destructive behavior. The description adds useful context by clarifying that the tool returns a single upstream record without pagination, which informs the agent about response shape and avoids any pagination expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant wording. The core action is front-loaded, and the second sentence provides essential guidance about the alternative tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only retrieval tool with an output schema and strong annotations, the description covers the essential call context: what is retrieved, how to identify it, how pagination behaves, and when to choose a different tool. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the 'id' parameter. The description adds value by clarifying that the ID is the ServiceTitan ID, giving the parameter real-world meaning beyond the schema's generic 'Zone ID' label.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact verb ('Retrieve'), the resource ('a zone'), and the key identifier ('ServiceTitan ID'). It also explicitly contrasts itself with scheduling_zones_list, making the tool's scope immediately distinguishable from its sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use this tool (when the zone ID is known) and explicitly directs the agent to use scheduling_zones_list when the ID is unknown. This provides unambiguous routing between the two sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scheduling_zones_listARead-onlyIdempotent
List one requested page of scheduling zones using active state and created or modified timestamp filters. Use scheduling_zones_get for one known zone ID; use scheduling_business_hours_list for configured operating hours rather than geographic zone definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, ModifiedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Return zones created before this UTC timestamp | |
| modifiedBefore | No | Return zones modified before this UTC timestamp | |
| createdOnOrAfter | No | Return zones created on or after this UTC timestamp | |
| modifiedOnOrAfter | No | Return zones modified on or after this UTC timestamp |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool returns only one requested page at a time and supports filtering by active state and created/modified timestamps. Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the description adds meaningful operational context beyond those hints without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The main action and scope are front-loaded, and the alternative-tool guidance is delivered in a compact follow-up sentence. Every clause contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated read-only list tool with fully documented parameters, rich annotations, and an output schema, the description provides all necessary orientation: what it lists, its paging behavior, its filter dimensions, and how it differs from relevant siblings. No critical selection or invocation information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so all nine parameters are already documented with types, defaults, and meanings. The description adds a high-level summary of filter categories but does not introduce meaning beyond the schema, which matches the baseline expectation for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with a concrete resource ('scheduling zones'), and explicitly scopes the operation to a single requested page with active-state and timestamp filters. It also distinguishes itself from scheduling_zones_get and scheduling_business_hours_list, making the tool's purpose unambiguous relative to its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: use scheduling_zones_get when a single known zone ID is needed, and use scheduling_business_hours_list when the user means operating hours rather than geographic zones. This tells the agent both when to use this tool and when to choose an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_activities_exportARead-onlyIdempotent
Read the incremental timesheet-activity export feed for Settings workflows. This is the same feed as export_activities; use whichever name is available and do not fetch both. Continue immediately with continueFrom while hasMore is true; when false, retain it and wait before polling again. includeRecentChanges may repeat records.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token from previous response or custom start date | |
| includeRecentChanges | No | Prioritize recent changes in the export stream |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, open-world, idempotent, and non-destructive. The description adds meaningful behavior beyond annotations: the alias relationship with export_activities, continuation token semantics, polling cadence expectations, and duplicate-record behavior with includeRecentChanges.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. Every sentence provides actionable information: alias handling, continuation behavior, polling rules, and duplicate-record caveat. No filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a 100%-covered input schema and an output schema present, the description covers the essential operational concerns: alias resolution, fetch avoidance, and continuation/polling behavior. The duplicate-record warning is an important completeness detail. Nothing critical is missing for an agent to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents from and includeRecentChanges. The description adds value by explaining how the continuation token should be used in the polling loop and by clarifying that includeRecentChanges may cause repeated records, which goes beyond the schema's 'prioritize recent changes' description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: reading the incremental timesheet-activity export feed for Settings workflows. It explicitly identifies the sibling export_activities as the same feed, which clearly distinguishes the tool and prevents duplicate fetching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: use whichever name is available, do not fetch both, continue with continueFrom while hasMore is true, retain the token when false, and wait before polling again. It also warns that includeRecentChanges may repeat records, which is valuable operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_activity_categories_exportARead-onlyIdempotent
Read the incremental activity-category export feed for Settings synchronization. Use the list or get tools for filtered browsing or a known ID. Continue immediately with continueFrom while hasMore is true; when false, retain it and wait before polling again. includeRecentChanges may repeat records.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token from previous response or custom start date | |
| includeRecentChanges | No | Prioritize recent changes in the export stream |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false), the description adds meaningful behavioral details: the feed is incremental, includeRecentChanges may repeat records, and hasMore controls continuation and polling cadence. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four concise sentences with no filler. It front-loads the core purpose, then gives routing and continuation guidance. Minor ambiguity around 'continueFrom' versus the 'from' parameter slightly reduces clarity, but overall it is tight and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, annotations covering read-only/idempotent behavior, and only two optional parameters, the description is complete enough for an agent to select and invoke it correctly. It covers alternatives, continuation semantics, polling behavior, and the deduplication caveat.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds one useful behavioral note about includeRecentChanges (may repeat records), but otherwise does not need to repeat parameter details. This meets the baseline for schema-covered parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource and action: 'Read the incremental activity-category export feed for Settings synchronization.' It also explicitly distinguishes itself from the list/get tools, which is important given the large sibling set. The resource name 'activity-category' is specific and matches the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool versus alternatives: 'Use the list or get tools for filtered browsing or a known ID.' It also provides a concrete polling protocol: continue while hasMore is true, retain the token and wait when false. This leaves little ambiguity about invocation flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_activity_categories_getARead-onlyIdempotent
Retrieve one timesheet activity category by its required ID. Use settings_activity_categories_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Activity category ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds no additional behavioral context such as error cases, not-found behavior, or response shape, but it also does not contradict the annotations. A middle score is appropriate since the annotations carry the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core lookup behavior is front-loaded, and the alternative-tool guidance is placed second. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-ID retrieval tool with one well-documented parameter, an output schema, and safety annotations, the description is complete. It even covers the unknown-ID case by pointing to the list tool, so no essential guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the only parameter, id, as an integer Activity category ID, so schema coverage is 100%. The description merely refers to 'required ID' without adding extra meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a specific resource ('one timesheet activity category'), and the lookup key ('required ID'). It clearly distinguishes this tool from siblings like settings_activity_categories_list and settings_activity_categories_export by indicating this is a single-record lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool versus the sibling list tool: use this when the ID is known, and use settings_activity_categories_list when the ID is unknown. This directly helps an agent select the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_activity_categories_listARead-onlyIdempotent
List one requested page of timesheet activity categories with active-state, date, and sort controls. Use the get tool for one known category or the export feed for synchronization.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior, so the safety profile is covered. The description adds pagination and filter-control context but does not disclose details like default filtering, ordering, or response behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The main purpose is front-loaded, and the alternative tool guidance is delivered compactly in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paged list with an output schema and strong annotations, the description is largely sufficient. The main gap is that 'export feed' is a somewhat generic reference rather than explicitly naming the sibling settings_activity_categories_export tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 56%, and the description provides light orientation by grouping parameters into active, date, and sort controls. It does not fully compensate for the four date parameters that lack schema descriptions, though the parameter names and formats offer reasonable hints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List one requested page of timesheet activity categories'. It also identifies the key controls and explicitly differentiates this tool from the get tool and export feed, making sibling disambiguation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: use the get tool for one known category or the export feed for synchronization. This tells an agent when not to choose this list tool, which is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_activity_codes_exportARead-onlyIdempotent
Read the incremental activity-code export feed for Settings workflows. This is the same feed as export_activity_codes; use whichever name is available and do not fetch both. Continue immediately with continueFrom while hasMore is true; when false, retain it and wait before polling again. includeRecentChanges may repeat records.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token from previous response or custom start date | |
| includeRecentChanges | No | Prioritize recent changes in the export stream |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses important behavioral traits: continuation semantics with continueFrom/hasMore, the need to wait before polling when hasMore is false, and the fact that includeRecentChanges may repeat records. These details materially affect how an agent invokes and interprets the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. It front-loads the core purpose, then immediately resolves the alias ambiguity, then gives the pagination protocol and the duplicate-records caveat. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's identity, its relationship to a sibling, the pagination loop, and the duplicate-record caveat, all while the output schema handles return-value details. Nothing critical is missing for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters with 100% coverage, so the baseline is 3. The description adds value by explaining how 'from' relates to the continueFrom token and that includeRecentChanges may cause duplicate records, which enriches the agent's understanding beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Read'), a specific resource ('incremental activity-code export feed'), and a context ('Settings workflows'). It also explicitly distinguishes itself from its sibling export_activity_codes by identifying them as the same feed, so an agent can disambiguate without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: 'This is the same feed as export_activity_codes; use whichever name is available and do not fetch both.' It also provides concrete operational instructions for pagination and polling, which tells the agent exactly how to consume the feed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_activity_codes_getARead-onlyIdempotent
Retrieve one payroll activity code by its required ID. Use settings_activity_codes_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Activity code ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds that this returns a single record keyed by ID, but it does not disclose any additional behavioral details such as response shape or error behavior. Given the strong annotation coverage, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core behavior is stated first, and the alternative usage is provided in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read operation with an output schema and comprehensive annotations, the description is complete. It accurately scopes the operation and even provides navigation to the relevant list tool when the ID is unknown, leaving no meaningful gap for an agent selecting or invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single parameter 'id' with type integer, a description, and a required constraint. The description's 'required ID' phrasing reinforces the schema but adds little beyond calling out that the ID is the lookup key. With 100% schema coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves exactly one payroll activity code by a required ID, using a specific verb and resource. It also distinguishes itself from the list variant, settings_activity_codes_list, which is a sibling tool with a different purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool versus an alternative: use this when the ID is known and settings_activity_codes_list when the ID is unknown. This direct routing removes ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_activity_codes_listARead-onlyIdempotent
List one requested page of payroll activity codes with active-state, date, and sort controls. Use the get tool for one known code or the export feed for synchronization.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and open-world behavior, so the description's job is lighter. It adds the useful trait that only one requested page is returned, but it does not disclose edge behaviors such as sortable-field limits or date-filter boundary semantics beyond what the schema already provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The core list behavior is front-loaded and the alternative routing is in the second sentence. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter list tool with an output schema and strong annotations, the description covers the essential invocation context: paginated listing, filter dimensions, and the alternatives to use for single-record lookup or full synchronization. It does not enumerate all parameters, but the schema carries that detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 56%, so the schema already documents page, sort, active, pageSize, includeTotal, and date formats. The description adds a helpful grouping ('active-state, date, and sort controls') but does not add granular meaning for the undocumented date parameters, nor does it mention pageSize/includeTotal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a specific resource ('payroll activity codes'), and a scope ('one requested page'), which clearly distinguishes it from the sibling get and export tools. It also signals the available controls up front, so the agent knows this is a paginated list endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes to alternatives: 'Use the get tool for one known code or the export feed for synchronization.' That gives concrete when-to-use-this vs. when-to-use-other guidance without requiring the agent to infer from tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_activity_types_getARead-onlyIdempotent
Retrieve one timesheet activity type by its required ID. Use settings_activity_types_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Activity type ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the safety profile is covered. The description adds little behavioral context beyond cardinality and the required ID, but does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action is front-loaded, and the alternative routing to settings_activity_types_list is stated in a single useful clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple one-parameter read operation with a rich annotation set and an output schema present. The description fully covers what an agent needs: what to call, the required input, and what to do when the ID is unknown.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the id parameter already has a description ('Activity type ID'). The description repeats that the ID is required but adds no deeper meaning beyond what the schema provides, which matches the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a precise resource ('one timesheet activity type'), and the required access pattern ('by its required ID'). It clearly distinguishes from the sibling settings_activity_types_list by naming that alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool (when the ID is known) and when to use the alternative (settings_activity_types_list when the ID is unknown). This direct routing removes ambiguity for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_activity_types_listARead-onlyIdempotent
List one requested page of timesheet activity types with active-state, date, and sort controls. Use the get tool for one known type ID.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description's job was to add scope. It discloses that the tool returns 'one requested page' rather than all records and previews the active/date/sort control dimensions — genuine behavioral context beyond the annotations, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences totaling roughly 27 words, with the core purpose front-loaded and the sibling routing second. Every phrase earns its place; there is no filler and no repetition of schema or annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a read-only list tool: the output schema covers return shape, annotations cover safety, and the schema documents defaults (active=True, pageSize=50, page=1). The only gap is that the bulk-export alternative goes unmentioned, but with zero required parameters and self-named date filters, an agent can invoke it correctly from this definition alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 56%, with thorough descriptions already present for sort, page, pageSize, active, and includeTotal. The description maps parameters to categories ('active-state, date, and sort controls') but adds no semantics for the four undocumented date parameters, leaving boundary inclusivity (e.g., whether createdBefore is exclusive) implicit in their self-explanatory names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), the resource ('timesheet activity types'), and precise scope ('one requested page'). The 'timesheet' qualifier plus the closing routing to the get tool clearly distinguishes it from the activity_categories and activity_codes list siblings, so an agent can pick it without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly excludes single-known-ID lookups by directing them to 'the get tool,' which is the primary alternative for a list endpoint and addresses the most common get-vs-list confusion. It does not mention the export siblings (e.g., settings_activities_export) for bulk retrieval, which is the only omission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_business_units_getARead-onlyIdempotent
Retrieve one business unit by its required ID. Use settings_business_units_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Business unit ID | |
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile: readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds no behavioral detail beyond the core read operation and required-ID constraint, which is already reflected in the schema. This is adequate but not rich additional disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The primary purpose is front-loaded, and the sibling routing guidance is included without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-by-ID tool with a single required parameter, an output schema, and safety annotations, the description is sufficient. It also points to the sibling list tool for the unknown-ID case, making it contextually complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters. The description does not add meaningful semantic detail beyond restating that the ID is required. Baseline 3 applies because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Retrieve'), a specific resource ('one business unit'), and the key access path ('by its required ID'). It also distinguishes itself from the sibling settings_business_units_list, so an agent can tell exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the alternative: 'Use settings_business_units_list to search when the ID is unknown.' This gives the agent clear routing guidance: use this get tool when the ID is known, and the list tool otherwise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_business_units_listARead-onlyIdempotent
List one requested page of business units, optionally filtered by IDs, name, active state, dates, or external-data application. Use the get tool for one known ID or the export feed for synchronization.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated IDs (max 50) | |
| name | No | Business unit name filter | |
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No | ||
| externalDataApplicationGuid | No | External data application GUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. Description adds pagination and filter context without contradicting annotations. No additional side effects or rate limits mentioned, but annotations cover safety adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. Front-loads the core action and filters, then points to alternatives. Highly concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return format is covered. Description covers pagination, filter options, and alternative tools. Minor gap: no mention of default page size beyond the parameter description, but overall adequate for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 64% (7 of 11 parameters described). Description mentions 'IDs, name, active state, dates, or external-data application' which adds general meaning, but does not explain the difference between before/onOrAfter date filters or other undocumented parameters. Falls short of fully compensating for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states a list action with pagination and filter options, distinguishing it from the get tool (single known ID) and export feed (synchronization). The verb 'List' plus resource 'business units' is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to use alternatives: 'Use the get tool for one known ID or the export feed for synchronization.' This provides clear guidance on tool selection and when not to use this list endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_tag_types_exportARead-onlyIdempotent
Read the incremental tag-type export feed for Settings workflows. This is the same feed as export_tag_types; use whichever name is available and do not fetch both. Continue immediately with continueFrom while hasMore is true; when false, retain it and wait before polling again. includeRecentChanges may repeat records.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Continuation token from previous response or custom start date | |
| includeRecentChanges | No | Prioritize recent changes in the export stream |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, open-world, and non-destructive behavior. The description adds meaningful behavioral context beyond annotations: incremental feed semantics, pagination continuation protocol, polling wait guidance, and the possibility of repeated records. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences with no filler. The core purpose and alias warning come first, followed by actionable pagination and deduplication guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent export tool with an output schema and only two fully documented parameters, the description covers all necessary operational details: alias avoidance, continuation semantics, polling behavior, and duplicate records. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema already covers both parameters with 100% coverage. The description adds value by explaining that includeRecentChanges may cause repeated records, which is a behavioral implication beyond the schema's 'Prioritize recent changes' phrasing. It also references continueFrom in the pagination flow, which complements the 'from' parameter's continuation-token role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies the tool as reading an incremental tag-type export feed for Settings workflows, with a specific verb ('Read') and resource ('tag-type export feed'). It also distinguishes itself from the sibling export_tag_types by explicitly stating they expose the same feed, so an agent can differentiate without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides direct guidance on when to use this tool versus the alias export_tag_types: use whichever is available and do not fetch both. It also specifies the pagination behavior with continueFrom/hasMore and the retry/wait behavior when hasMore is false, plus the duplicate-record caveat for includeRecentChanges.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_tag_types_listARead-onlyIdempotent
List one requested page of tag types with active-state, date, and sort controls. Use the export feed for incremental synchronization; this endpoint is for paginated browsing.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, ModifiedOn, CreatedOn | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | ||
| modifiedBefore | No | ||
| createdOnOrAfter | No | ||
| modifiedOnOrAfter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description's added value comes from clarifying pagination behavior and pointing to the export feed for full-sync use cases. It also lists the control dimensions (active-state, date, sort), giving useful context beyond what the annotations state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences deliver the endpoint's purpose, scoping, and usage distinction with no wasted words. The key behavior is front-loaded before the guidance to use the export feed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated list tool with an output schema and safety annotations, the description is sufficient: it identifies the resource, pagination behavior, and the sync-vs-browse distinction. It could be slightly stronger by naming the date filter parameters explicitly, but the tool is still callable correctly with the schema present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 56%, so the schema documents most core parameters like page, sort, active, and pageSize. The description adds a helpful grouping of 'active-state, date, and sort controls' but does not explain the date filter semantics, which are left undocumented in the schema. This is adequate but not fully compensating for the missing date parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('tag types') and states it returns 'one requested page', immediately distinguishing it from bulk export siblings. The mention of paginated browsing versus export feed further separates it from settings_tag_types_export.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this endpoint ('paginated browsing') and when to use the alternative ('Use the export feed for incremental synchronization'). This directly routes the agent to the correct tool without relying on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_tasks_getARead-onlyIdempotent
Retrieve one task by its required ID. Use settings_tasks_list to search when the ID is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task ID | |
| includeSubtasks | No | Include subtasks in the response |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds that this is a single-task fetch requiring a known ID, which is useful but does not go deeper into error handling, permissions, or response semantics. No contradiction exists; the description aligns with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core behavior is front-loaded, and the alternative tool is introduced efficiently without repeating schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with rich annotations, a complete output schema, and only two parameters, this description is sufficient. The routing note to settings_tasks_list closes the main ambiguity an agent would face.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both id and includeSubtasks documented. The description only repeats that ID is required, adding no meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve') and resource ('one task') and clarifies the lookup key (ID). It also distinguishes itself from the sibling settings_tasks_list, so an agent can immediately tell this is the fetch-by-ID tool, not the search tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly gives a decision rule: use settings_tasks_list when the ID is unknown. This tells the agent exactly when to pick an alternative and removes ambiguity about search vs. direct retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_tasks_listARead-onlyIdempotent
List one requested page of employee tasks using status, assignment, related-record, date, priority, and other filters. Use settings_tasks_get for one known task ID; statuses is preferred over deprecated isClosed.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated task IDs | |
| name | No | Task name filter | |
| page | No | Page number (starts at 1) | |
| sort | No | Sort: Field (default), +Field (asc), or -Field (desc). Fields: Id, CreatedOn, DescriptionModifiedOn, CompletedBy, Priority | |
| jobId | No | Job ID | |
| active | No | Filter by active status | True |
| isClosed | No | Deprecated: filter by task closure state (use statuses when possible) | |
| pageSize | No | Records per page (default 50) | |
| statuses | No | Comma-separated task statuses | |
| jobNumber | No | Job number | |
| projectId | No | Project ID | |
| customerId | No | Customer ID | |
| priorities | No | Comma-separated task priorities | |
| taskNumber | No | Task number | |
| assignedToId | No | Assigned to employee ID | |
| includeTotal | No | Include total count in response | |
| reportedById | No | Reported by employee ID | |
| createdBefore | No | ||
| completeBefore | No | Completion date upper bound (UTC) | |
| modifiedBefore | No | ||
| reportedBefore | No | Reported date upper bound (UTC) | |
| businessUnitIds | No | Comma-separated business unit IDs | |
| includeSubtasks | No | Include subtasks in each task payload | |
| createdOnOrAfter | No | ||
| completeOnOrAfter | No | Completion date lower bound (UTC) | |
| modifiedOnOrAfter | No | ||
| reportedOnOrAfter | No | Reported date lower bound (UTC) | |
| employeeTaskTypeIds | No | Comma-separated employee task type IDs | |
| employeeTaskSourceIds | No | Comma-separated employee task source IDs | |
| involvedEmployeeIdList | No | Comma-separated involved employee IDs | |
| employeeTaskResolutionIds | No | Comma-separated employee task resolution IDs |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior, so the description only needs to add context. It adds pagination scope ('one requested page') and deprecation guidance, though it does not describe filtering combination semantics or rate-limit behavior; those are not required given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The key scope, alternative tool, and deprecation note are front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 31 optional parameters, an output schema, and read-only/idempotent annotations, the description gives enough orientation: what it lists, that it is page-scoped, how to retrieve a single task, and how to filter statuses. Detailed parameter semantics are left to the well-populated schema, which is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (87%) and most parameters already have descriptive text, so the baseline is 3. The description's statuses/isClosed note is helpful but to some extent duplicates the parameter description, and the broad filter categories ('related-record', 'date') are not mapped to specific parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and resource ('List one requested page of employee tasks') and names the exact filter families, so an agent knows what the endpoint returns. It also distinguishes itself from settings_tasks_get, which is the sibling for fetching a single known task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes users: 'Use settings_tasks_get for one known task ID', which is a clear when-to-use vs alternative. It also instructs agents to prefer statuses over the deprecated isClosed parameter, giving concrete selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_user_roles_listARead-onlyIdempotent
List one requested page of user roles, optionally filtered by IDs, name, active state, creation date, or employee type. Use this catalog to resolve role IDs and availability.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated role IDs (max 50) | |
| name | No | Role name filter | |
| page | No | Page number (starts at 1) | |
| active | No | Filter by active status | True |
| pageSize | No | Records per page (default 50) | |
| employeeType | No | Filter roles by employee type | |
| includeTotal | No | Include total count in response | |
| createdBefore | No | Created date upper bound (UTC) | |
| createdOnOrAfter | No | Created date lower bound (UTC) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, open world, and non-destructive behavior. The description adds a useful pagination trait ('one requested page') but does not detail output shape or edge behaviors. That is acceptable given the output schema and strong annotations, but some behavioral context is still left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The first sentence front-loads action, resource, and scope; the second adds purpose. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a fully documented schema, an output schema, and strong annotations, the description supplies exactly the missing purpose and use-case context. Nothing needed to invoke the tool correctly—required params, formats, or return values—is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions, so the baseline is 3. The description summarizes filter dimensions (IDs, name, active state, creation date, employee type) but adds no syntax or format details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('List'), a clear resource ('user roles'), and precise scope ('one requested page'). It also states the catalog purpose of resolving role IDs and availability, which clearly separates it from the broader list/export siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly gives a use case: 'Use this catalog to resolve role IDs and availability.' It does not name alternatives or when-not-to-use conditions, but the context is clear enough for a read-only catalog tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
st_health_checkARead-onlyIdempotent
Verify authentication and representative tenant read access. Use st_readiness_check for report and module compatibility.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds value by specifying what is actually verified: authentication and representative tenant read access, which is context beyond the generic readonly hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no wasted words. The primary purpose is front-loaded, and the alternative-tool guidance is brief and direct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter health check tool with a rich annotation set and an output schema, the description is complete. It states what is checked, routes to the adjacent tool for a different concern, and leaves no operational gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description carries no parameter burden. The schema coverage is effectively complete because the schema is empty, and the description adds sufficient operational context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Verify', with a concrete resource: authentication and representative tenant read access. It also differentiates this tool from the sibling st_readiness_check by pointing to its distinct scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to use st_readiness_check for report and module compatibility, making the intended use case clear. It implicitly tells the agent that st_health_check is for auth/read verification rather than compatibility checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
st_readiness_checkARead-onlyIdempotent
Read-only compatibility manifest: authentication, representative module read access, report fields/parameters and definition fingerprints. Does not certify write scopes or metric totals.
| Name | Required | Description | Default |
|---|---|---|---|
| reports | No | When true, also fetch and validate configured intelligence report definitions; report data is never executed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only, idempotent, open-world, and non-destructive behavior. The description adds useful behavioral context beyond those annotations: it performs a compatibility manifest rather than a full data query, and explicitly disclaims certification of write scopes and metric totals. This helps the agent set correct expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with no filler: the first defines the core scope, and the second sets boundaries. Every phrase contributes useful information without duplicating the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single optional parameter, full schema coverage, strong annotations, and the presence of an output schema, the description is sufficiently complete. An agent can understand what the tool checks, what it does not do, and how to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single optional boolean 'reports' parameter is already well documented in the schema. The description's mention of report fields/parameters and definition fingerprints loosely aligns with the parameter but adds no significant meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear purpose: a read-only compatibility manifest that validates authentication, representative module read access, report fields/parameters, and definition fingerprints. It is reasonably distinct from the surrounding export and lookup tools, though it does not explicitly differentiate itself from the closely named sibling st_health_check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by 'read-only compatibility manifest' and by the explicit exclusion that it does not certify write scopes or metric totals. However, the description never states when to choose this tool over st_health_check or st_result_read, leaving the decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
st_result_readARead-onlyIdempotent
Retrieve a stored large result as bounded JSON text chunks. Start at offset 0, concatenate text in nextOffset order, then parse JSON. Results expire after five minutes and belong to this session.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Zero-based character offset for the next JSON text chunk; start at 0 and then use nextOffset | |
| resultId | Yes | Session-owned result identifier returned by a tool whose response exceeded the inline limit |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it reveals important stateful behavior: results expire after five minutes, belong to this session, and chunks must be concatenated in nextOffset order before parsing. This goes beyond the annotation defaults and is critical for correct use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the purpose and then deliver the required chunk-reading protocol without wasted words. Every sentence carries necessary operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with a rich schema, an output schema, and read-only/idempotent annotations, the description fully covers the retrieval workflow and the session/expiry constraints. Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters at 100% coverage. The description adds cross-parameter protocol meaning by tying offset to the nextOffset sequence and by defining the result as JSON text chunks, which helps an agent understand how resultId and offset work together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Retrieve a stored large result') and clarifies that the result is delivered as bounded JSON text chunks. It is clear and not tautological, though it does not explicitly compare with or distinguish itself from any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage steps: start at offset 0, concatenate in nextOffset order, then parse JSON, with a five-minute expiry and session scoping. It does not name alternatives or explicit when-not-to-use conditions, but the instructions are explicit enough for the tool's narrow purpose.
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.
5 tool updates
v3.0.1- Changed
intel_membership_health1 field changed- changed
Input schema / properties / includeServiceRevenue / descriptionPrevious value: -"Include totalServiceRevenue from invoice pagination (adds ~1-2s latency). Default: false."New value: +"Include tenant-wide totalServiceRevenue by fetching every available invoice page for the period. Default: false."
- Changed
intel_revenue_summary1 field changed- changed
Input schema / properties / includeProductivityMetrics / descriptionPrevious value: -"Include BU-level productivity metrics (Report 177: rev/hr, billable efficiency, upsold, tasks/opp, recalls). Adds ~0.5-1s latency. Default: false."New value: +"Include business-unit productivity metrics from Report 177: revenue per hour, billable efficiency, upsold work, tasks per opportunity, and recalls. Default: false."
- Changed
intel_technician_scorecard1 field changed- changed
Input schema / properties / includeExtendedMetrics / descriptionPrevious value: -"Include memberships sold, sales from tech leads, and sales from marketing leads (Reports 171/173/174). Adds ~0.5-1s latency. Default: false."New value: +"Include memberships sold and sales from technician and marketing leads by running Reports 171, 173, and 174. Default: false."
- Changed
st_readiness_check1 field changed- changed
Input schema / properties / reports / descriptionPrevious value: -"Validate configured intelligence report definitions without executing report data"New value: +"When true, also fetch and validate configured intelligence report definitions; report data is never executed"
- Changed
st_result_read2 fields changed- added
Input schema / properties / offset / descriptionAdded value: +"Zero-based character offset for the next JSON text chunk; start at 0 and then use nextOffset" - added
Input schema / properties / resultId / descriptionAdded value: +"Session-owned result identifier returned by a tool whose response exceeded the inline limit"
478 tool updates
v3.0.0- Changed
accounting_ap_credits_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
accounting_ap_credits_mark_as_exported - Changed
accounting_ap_payments_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
accounting_ap_payments_mark_as_exported - Changed
accounting_gl_account_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
accounting_gl_accounts_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
accounting_gl_accounts_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
accounting_gl_accounts_update - Removed
accounting_invoice_items_delete - Removed
accounting_invoice_items_update - Changed
accounting_invoices_custom_field_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
accounting_invoices_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
accounting_invoices_update - Added
accounting_journal_entries_get_details - Changed
accounting_journal_entries_get_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Added
accounting_journal_entries_list - Removed
accounting_journal_entries_update - Changed
accounting_payment_terms_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
accounting_payment_terms_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
accounting_payment_types_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
accounting_payment_types_list5 fields changed- added
Input schema / properties / createdBefore / descriptionAdded value: +"Return records created before this timestamp" - added
Input schema / properties / createdOnOrAfter / descriptionAdded value: +"Return records created on or after this timestamp" - removed
Input schema / properties / modifiedBeforeRemoved value: -{ - "format": "date-time", - "type": "string" -} - removed
Input schema / properties / modifiedOnOrAfterRemoved value: -{ - "format": "date-time", - "type": "string" -} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Added
accounting_payments_custom_field_types_list - Changed
accounting_payments_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
accounting_payments_update - Removed
accounting_payments_update_status - Changed
accounting_tax_zones_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_booking_provider_tags_create - Changed
crm_booking_provider_tags_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_booking_provider_tags_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_booking_provider_tags_update - Changed
crm_bookings_contacts_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_bookings_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_bookings_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_bookings_provider_contacts_create - Changed
crm_bookings_provider_contacts_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_bookings_provider_contacts_update - Removed
crm_bookings_provider_create - Changed
crm_bookings_provider_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_bookings_provider_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_bookings_provider_update - Removed
crm_bulk_tags_add_tags - Removed
crm_bulk_tags_remove_tags - Removed
crm_contact_methods_create - Removed
crm_contact_methods_delete - Changed
crm_contact_methods_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_contact_methods_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_contact_methods_update - Removed
crm_contact_methods_upsert - Removed
crm_contact_relationships_create - Removed
crm_contact_relationships_delete - Changed
crm_contact_relationships_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_contacts_by_relationship_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_contacts_create - Removed
crm_contacts_delete - Changed
crm_contacts_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_contacts_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_contacts_replace - Removed
crm_contacts_update - Removed
crm_customers_contacts_create - Removed
crm_customers_contacts_delete - Changed
crm_customers_contacts_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_customers_contacts_modified_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_customers_create - Changed
crm_customers_custom_field_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_customers_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_customers_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_customers_notes_create - Removed
crm_customers_notes_delete - Changed
crm_customers_notes_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_customers_tags_create - Removed
crm_customers_tags_delete - Removed
crm_customers_update - Removed
crm_leads_create - Removed
crm_leads_dismiss - Removed
crm_leads_follow_ups_create - Removed
crm_leads_form_submit - Changed
crm_leads_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_leads_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_leads_notes_create - Changed
crm_leads_notes_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_leads_update - Changed
crm_location_labor_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_locations_contacts_create - Removed
crm_locations_contacts_delete - Changed
crm_locations_contacts_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_locations_contacts_modified_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_locations_contacts_update - Removed
crm_locations_create - Changed
crm_locations_custom_field_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_locations_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
crm_locations_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_locations_notes_create - Removed
crm_locations_notes_delete - Changed
crm_locations_notes_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
crm_locations_tags_create - Removed
crm_locations_tags_delete - Removed
crm_locations_update - Removed
dispatch_appointments_confirm - Removed
dispatch_appointments_create - Removed
dispatch_appointments_delete - Changed
dispatch_appointments_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_appointments_hold - Changed
dispatch_appointments_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_appointments_reschedule - Removed
dispatch_appointments_set_summary - Removed
dispatch_appointments_unconfirm - Removed
dispatch_appointments_unhold - Removed
dispatch_appointments_update_special_instructions - Changed
dispatch_arrival_window_configuration_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_arrival_window_configuration_update - Removed
dispatch_arrival_windows_activate - Removed
dispatch_arrival_windows_create - Changed
dispatch_arrival_windows_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_arrival_windows_list3 fields changed- removed
Input schema / properties / modifiedBeforeRemoved value: -{ - "description": "Return items modified before this UTC timestamp", - "format": "date-time", - "type": "string" -} - removed
Input schema / properties / modifiedOnOrAfterRemoved value: -{ - "description": "Return items modified on or after this UTC timestamp", - "format": "date-time", - "type": "string" -} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_arrival_windows_update - Changed
dispatch_call_reasons_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_form_submissions_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_forms_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_images_create - Changed
dispatch_images_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_installed_equipment_attachments_create - Changed
dispatch_installed_equipment_attachments_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_installed_equipment_create - Removed
dispatch_installed_equipment_delete - Changed
dispatch_installed_equipment_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_installed_equipment_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_installed_equipment_update - Changed
dispatch_job_cancel_reasons_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_job_hold_reasons_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_job_splits_by_jobs_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_job_splits_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_job_types_create - Removed
dispatch_job_types_delete - Changed
dispatch_job_types_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_job_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_job_types_update - Changed
dispatch_jobs_booked_log_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_jobs_cancel - Changed
dispatch_jobs_cancel_reasons_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_jobs_canceled_logs_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_jobs_complete - Removed
dispatch_jobs_create - Removed
dispatch_jobs_create_attachment - Changed
dispatch_jobs_custom_field_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_jobs_equipment_attach - Removed
dispatch_jobs_equipment_detach - Removed
dispatch_jobs_equipment_detach_bulk - Changed
dispatch_jobs_equipment_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_jobs_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_jobs_get_attachment1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_jobs_history_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_jobs_hold - Changed
dispatch_jobs_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_jobs_list_attachments3 fields changed- removed
Input schema / properties / modifiedBeforeRemoved value: -{ - "description": "Return items modified before this UTC timestamp", - "format": "date-time", - "type": "string" -} - removed
Input schema / properties / modifiedOnOrAfterRemoved value: -{ - "description": "Return items modified on or after this UTC timestamp", - "format": "date-time", - "type": "string" -} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_jobs_messages_create - Removed
dispatch_jobs_notes_create - Changed
dispatch_jobs_notes_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_jobs_remove_cancellation - Removed
dispatch_jobs_update - Changed
dispatch_project_statuses_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_project_statuses_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_project_sub_statuses_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_project_sub_statuses_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_project_types_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_project_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_projects_attach_job - Removed
dispatch_projects_create - Changed
dispatch_projects_custom_field_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_projects_delete - Removed
dispatch_projects_detach_job - Changed
dispatch_projects_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
dispatch_projects_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_projects_messages_create - Removed
dispatch_projects_notes_create - Changed
dispatch_projects_notes_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
dispatch_projects_update - Removed
estimates_create - Removed
estimates_dismiss - Removed
estimates_estimate_templates_create - Removed
estimates_estimate_templates_delete - Changed
estimates_estimate_templates_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
estimates_estimate_templates_list5 fields changed- removed
Input schema / properties / createdBeforeRemoved value: -{ - "format": "date-time", - "type": "string" -} - removed
Input schema / properties / createdOnOrAfterRemoved value: -{ - "format": "date-time", - "type": "string" -} - added
Input schema / properties / modifiedBefore / descriptionAdded value: +"Return templates modified before this UTC timestamp" - added
Input schema / properties / modifiedOnOrAfter / descriptionAdded value: +"Return templates modified on or after this UTC timestamp" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
estimates_estimate_templates_update - Changed
estimates_export_estimates1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
estimates_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
estimates_items_delete - Changed
estimates_items_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
estimates_items_update - Changed
estimates_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
estimates_proposal_templates_create - Removed
estimates_proposal_templates_delete - Changed
estimates_proposal_templates_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
estimates_proposal_templates_list5 fields changed- removed
Input schema / properties / createdBeforeRemoved value: -{ - "format": "date-time", - "type": "string" -} - removed
Input schema / properties / createdOnOrAfterRemoved value: -{ - "format": "date-time", - "type": "string" -} - added
Input schema / properties / modifiedBefore / descriptionAdded value: +"Return templates modified before this UTC timestamp" - added
Input schema / properties / modifiedOnOrAfter / descriptionAdded value: +"Return templates modified on or after this UTC timestamp" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
estimates_proposal_templates_update - Changed
estimates_proposal_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
estimates_sell - Removed
estimates_unsell - Removed
estimates_update - Changed
export_activities1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_activity_codes1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_adjustments1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_appointment_assignments1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_appointments1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_bookings1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_business_units1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_calls1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
export_contacts - Changed
export_customers1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_customers_contacts1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_employees1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_equipment1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_gross_pay_items1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_installed_equipment1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_inventory_bills1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_invoice_items1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_invoice_templates1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_invoices1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
export_job_cancel_reasons - Changed
export_job_canceled_logs1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_job_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_job_notes1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_job_splits1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_jobs1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_leads1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
export_location_recurring_service_events - Removed
export_location_recurring_services - Changed
export_locations1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_locations_contacts1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_materials1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_membership_status_changes1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_membership_types1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_memberships1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_payments1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_payroll_adjustments3 fields changed- removed
Input schema / properties / modifiedBeforeRemoved value: -{ - "description": "Filter: modified before this date (ISO 8601)", - "type": "string" -} - removed
Input schema / properties / modifiedOnOrAfterRemoved value: -{ - "description": "Filter: modified on or after this date (ISO 8601)", - "type": "string" -} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_payroll_settings1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_project_notes1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_projects1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_purchase_orders1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_recurring_service_types1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_returns1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_service_agreements1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_services1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_tag_types1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_technicians1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
export_timesheet_codes1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
export_timesheets - Changed
export_transfers1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
intel_campaign_performance1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
intel_csr_performance1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
intel_daily_snapshot1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
intel_estimate_pipeline1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
intel_invoice_tracking1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
intel_labor_cost1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
intel_lookup1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
intel_membership_health1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
intel_revenue_summary2 fields changed- changed
Input schema / properties / includeCollections / descriptionPrevious value: -"Include payment/collections data (totalCollected, outstanding). Adds ~20s latency due to payment pagination. Default: false."New value: +"Include payments received during the selected period. Default: false." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
intel_technician_scorecard1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
inventory_purchase_order_markups_create - Removed
inventory_purchase_order_markups_delete - Changed
inventory_purchase_order_markups_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
inventory_purchase_order_markups_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
inventory_purchase_order_markups_update - Removed
inventory_purchase_order_types_create - Changed
inventory_purchase_order_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
inventory_purchase_order_types_update - Removed
inventory_purchase_orders_approve_request - Removed
inventory_purchase_orders_cancel - Removed
inventory_purchase_orders_create - Changed
inventory_purchase_orders_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
inventory_purchase_orders_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
inventory_purchase_orders_reject_request - Changed
inventory_purchase_orders_requests_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
inventory_purchase_orders_update - Removed
inventory_receipts_cancel - Removed
inventory_receipts_create - Changed
inventory_receipts_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
inventory_receipts_update_custom_fields - Removed
inventory_return_types_create - Changed
inventory_return_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
inventory_return_types_update - Removed
inventory_returns_cancel - Removed
inventory_returns_create - Changed
inventory_returns_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
inventory_returns_update - Removed
inventory_returns_update_custom_fields - Changed
inventory_transfers_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
inventory_transfers_update - Removed
inventory_transfers_update_custom_fields - Removed
inventory_vendors_create - Changed
inventory_vendors_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
inventory_vendors_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
inventory_vendors_update - Changed
inventory_warehouses_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
inventory_warehouses_update - Changed
marketing_attributed_leads_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
marketing_calls_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
marketing_calls_recording_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
marketing_calls_update - Changed
marketing_calls_v2_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
marketing_calls_v3_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
marketing_calls_voice_mail_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
marketing_campaign_costs_create - Removed
marketing_campaign_costs_delete - Changed
marketing_campaign_costs_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
marketing_campaign_costs_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
marketing_campaign_costs_update - Changed
marketing_campaigns_costs_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
marketing_campaigns_create - Changed
marketing_campaigns_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
marketing_campaigns_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
marketing_campaigns_update - Changed
marketing_client_side_data_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
marketing_client_specific_pricing_get_all_rate_sheets1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
marketing_client_specific_pricing_update_rate_sheet - Removed
marketing_external_call_attributions_create - Removed
marketing_opt_in_outs_create - Changed
marketing_opt_in_outs_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
marketing_opt_in_outs_lookup_create - Changed
marketing_reviews1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
marketing_scheduled_job_attributions_create - Changed
marketing_scheduler_scheduler_performance1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
marketing_scheduler_schedulers1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
marketing_scheduler_schedulersessions1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
marketing_suppressions_add - Removed
marketing_suppressions_get - Removed
marketing_suppressions_list - Removed
marketing_suppressions_remove - Removed
marketing_web_booking_attributions_create - Removed
marketing_web_lead_form_attributions_create - Removed
memberships_create - Changed
memberships_custom_fields_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_recurring_service_events_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
memberships_recurring_service_events_mark_complete - Removed
memberships_recurring_service_events_mark_incomplete - Changed
memberships_recurring_service_types_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_recurring_service_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_recurring_services_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_recurring_services_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
memberships_recurring_services_update - Changed
memberships_service_agreements_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_service_agreements_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_status_changes_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_types_discounts_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_types_duration_billing_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_types_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
memberships_types_recurring_service_items_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
memberships_update - Changed
payroll_employees_payrolls_list3 fields changed- added
Input schema / properties / createdBeforeAdded value: +{ + "description": "Filter payrolls created before this timestamp", + "format": "date-time", + "type": "string" +} - added
Input schema / properties / createdOnOrAfterAdded value: +{ + "description": "Filter payrolls created on or after this timestamp", + "format": "date-time", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
payroll_gross_pay_items_create - Removed
payroll_gross_pay_items_delete - Changed
payroll_gross_pay_items_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
payroll_gross_pay_items_update - Removed
payroll_payroll_adjustments_create - Changed
payroll_payroll_adjustments_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
payroll_payroll_adjustments_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
payroll_payroll_settings_employee_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
payroll_payroll_settings_employee_update - Changed
payroll_payroll_settings_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
payroll_payroll_settings_technician_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
payroll_payroll_settings_technician_update - Removed
payroll_payrolls_get - Changed
payroll_payrolls_list3 fields changed- added
Input schema / properties / createdBeforeAdded value: +{ + "description": "Filter payrolls created before this timestamp", + "format": "date-time", + "type": "string" +} - added
Input schema / properties / createdOnOrAfterAdded value: +{ + "description": "Filter payrolls created on or after this timestamp", + "format": "date-time", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
payroll_technicians_payrolls_list3 fields changed- added
Input schema / properties / createdBeforeAdded value: +{ + "description": "Filter payrolls created before this timestamp", + "format": "date-time", + "type": "string" +} - added
Input schema / properties / createdOnOrAfterAdded value: +{ + "description": "Filter payrolls created on or after this timestamp", + "format": "date-time", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
payroll_timesheet_codes_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
payroll_timesheet_codes_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
payroll_timesheets_create_job - Changed
payroll_timesheets_job_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
payroll_timesheets_job_update - Changed
payroll_timesheets_jobs_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
payroll_timesheets_non_job_create - Removed
payroll_timesheets_non_job_delete - Removed
payroll_timesheets_non_job_get - Changed
payroll_timesheets_non_job_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
payroll_timesheets_non_job_update - Removed
people_employees_accountactions - Removed
people_employees_create - Changed
people_employees_export1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
people_employees_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
people_employees_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
people_employees_update - Removed
people_gps_create - Changed
people_performance_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
people_technician_ratings_update - Removed
people_technician_shifts_bulk_delete - Removed
people_technician_shifts_create - Removed
people_technician_shifts_delete - Changed
people_technician_shifts_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
people_technician_shifts_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
people_technician_shifts_update - Removed
people_technicians_accountactions - Removed
people_technicians_create - Changed
people_technicians_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
people_technicians_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
people_technicians_update - Changed
people_trucks_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
people_trucks_update - Removed
pricebook_bulk_create - Removed
pricebook_bulk_update - Removed
pricebook_categories_create - Removed
pricebook_categories_delete - Changed
pricebook_categories_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
pricebook_categories_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
pricebook_categories_update - Removed
pricebook_discounts_fees_create - Removed
pricebook_discounts_fees_delete - Changed
pricebook_discounts_fees_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
pricebook_discounts_fees_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
pricebook_discounts_fees_update - Removed
pricebook_equipment_delete - Changed
pricebook_equipment_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
pricebook_equipment_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
pricebook_equipment_update - Changed
pricebook_materials_cost_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
pricebook_materials_create - Removed
pricebook_materials_delete - Changed
pricebook_materials_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
pricebook_materials_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
pricebook_materials_markup_create - Changed
pricebook_materials_markup_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
pricebook_materials_markup_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
pricebook_materials_markup_update - Removed
pricebook_materials_update - Removed
pricebook_services_create - Removed
pricebook_services_delete - Changed
pricebook_services_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
pricebook_services_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
pricebook_services_update - Changed
reporting_dynamic_value_sets_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
reporting_report_categories_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
reporting_reports_data_create5 fields changed- changed
Input schema / properties / parameters / items / properties / value / descriptionPrevious value: -"Parameter value"New value: +"Parameter value, using the data type declared by the report definition" - removed
Input schema / properties / parameters / items / properties / value / typeRemoved value: -"string" - changed
Input schema / properties / parameters / items / requiredPrevious value: -[ - "name", - "value" -]New value: +[ + "name" +] - changed
Input schema / requiredPrevious value: -[ - "reportCategory", - "reportId" -]New value: +[ + "reportCategory", + "reportId", + "parameters" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
reporting_reports_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
reporting_reports_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
scheduling_appointment_assignments_assign_technicians - Changed
scheduling_appointment_assignments_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
scheduling_appointment_assignments_unassign_technicians - Removed
scheduling_business_hours_create - Changed
scheduling_business_hours_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
scheduling_capacity_calculate - Removed
scheduling_non_job_appointments_create - Removed
scheduling_non_job_appointments_delete - Changed
scheduling_non_job_appointments_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
scheduling_non_job_appointments_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
scheduling_non_job_appointments_update - Removed
scheduling_teams_create - Removed
scheduling_teams_delete - Changed
scheduling_teams_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
scheduling_teams_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
scheduling_zones_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
scheduling_zones_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_activities_export1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_activity_categories_export1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_activity_categories_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_activity_categories_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_activity_codes_export1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_activity_codes_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_activity_codes_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_activity_types_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_activity_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_business_units_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_business_units_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
settings_business_units_update - Removed
settings_tag_types_create - Removed
settings_tag_types_delete - Changed
settings_tag_types_export1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
settings_tag_types_get - Changed
settings_tag_types_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
settings_tag_types_update - Removed
settings_tasks_create - Removed
settings_tasks_create_subtask - Changed
settings_tasks_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_tasks_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
settings_user_roles_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
st_health_check1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Added
st_readiness_check - Added
st_result_read
29 tool updates
v2.6.2- Added
accounting_ap_payments_list - Removed
accounting_gl_accounts_create - Added
accounting_gl_accounts_list - Added
accounting_gl_accounts_update - Added
accounting_invoices_custom_field_types_list - Added
accounting_invoices_update - Removed
accounting_invoices_update_custom_fields - Added
accounting_journal_entries_get_summary - Removed
accounting_journal_entries_list - Added
accounting_payment_terms_get - Removed
accounting_payments_create - Removed
accounting_payments_custom_field_types_list - Added
accounting_payments_list - Added
accounting_payments_update - Removed
accounting_payments_update_custom_fields - Added
accounting_payments_update_status - Added
crm_booking_provider_tags_create - Added
crm_bookings_get - Added
crm_bookings_list - Added
crm_bookings_provider_create - Added
crm_bookings_provider_update - Added
crm_bulk_tags_add_tags - Added
crm_contact_methods_get - Added
crm_contact_methods_list - Added
crm_contact_relationships_delete - Added
crm_customers_create - Added
crm_customers_get - Added
crm_customers_notes_delete - Added
crm_customers_notes_list
32 tool updates
v2.6.2- Removed
accounting_ap_payments_list - Removed
accounting_gl_accounts_list - Removed
accounting_gl_accounts_update - Removed
accounting_invoices_create_adjustment - Removed
accounting_invoices_custom_field_types_list - Removed
accounting_invoices_mark_as_exported - Removed
accounting_invoices_update - Removed
accounting_journal_entries_get_details - Removed
accounting_journal_entries_get_summary - Removed
accounting_journal_entries_sync_update - Removed
accounting_payment_terms_get - Removed
accounting_payments_list - Removed
accounting_payments_update - Removed
accounting_payments_update_status - Removed
crm_booking_provider_tags_create - Removed
crm_bookings_get - Removed
crm_bookings_list - Removed
crm_bookings_provider_create - Removed
crm_bookings_provider_update - Removed
crm_bulk_tags_add_tags - Removed
crm_contact_methods_get - Removed
crm_contact_methods_list - Removed
crm_contact_relationships_delete - Removed
crm_customers_create - Removed
crm_customers_get - Removed
crm_customers_notes_delete - Removed
crm_customers_notes_list - Changed
dispatch_jobs_create2 fields changed- added
Input schema / properties / appointmentsAdded value: +{ + "description": "Appointments to create with the job", + "items": { + "additionalProperties": false, + "properties": { + "arrivalWindowEnd": { + "description": "Arrival window end timestamp", + "format": "date-time", + "type": "string" + }, + "arrivalWindowStart": { + "description": "Arrival window start timestamp", + "format": "date-time", + "type": "string" + }, + "end": { + "description": "Appointment end timestamp", + "format": "date-time", + "type": "string" + }, + "start": { + "description": "Appointment start timestamp", + "format": "date-time", + "type": "string" + }, + "technicianIds": { + "description": "Technician IDs assigned to the appointment", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / requiredAdded value: +[ + "customerId", + "locationId", + "jobTypeId", + "campaignId", + "businessUnitId", + "priority", + "appointments" +]
- Changed
estimates_create15 fields changed- added
Input schema / properties / items / items / properties / budgetCodeIdAdded value: +{ + "description": "Budget code ID for this item", + "type": "integer" +} - added
Input schema / properties / items / items / properties / idAdded value: +{ + "description": "Existing estimate item ID", + "type": "integer" +} - added
Input schema / properties / items / items / properties / isAddOnAdded value: +{ + "description": "Whether this item is an add-on", + "type": "boolean" +} - added
Input schema / properties / items / items / properties / membershipDurationBillingIdAdded value: +{ + "description": "Membership duration/billing option ID", + "type": "integer" +} - removed
Input schema / properties / items / items / properties / membershipTypeIdRemoved value: -{ - "description": "Membership type ID associated with this item", - "type": "integer" -} - added
Input schema / properties / items / items / properties / parentItemIdAdded value: +{ + "description": "Parent estimate item ID", + "type": "integer" +} - changed
Input schema / properties / items / items / properties / qty / descriptionPrevious value: -"Quantity for this estimate item"New value: +"Legacy alias for quantity. Prefer quantity." - added
Input schema / properties / items / items / properties / quantityAdded value: +{ + "description": "Quantity for this estimate item", + "type": "number" +} - added
Input schema / properties / items / items / properties / skipUpdatingMembershipPricesAdded value: +{ + "description": "Skip updating membership prices from this item", + "type": "boolean" +} - removed
Input schema / properties / items / items / properties / skuAccountRemoved value: -{ - "description": "SKU account code for the estimate item", - "type": "string" -} - added
Input schema / properties / items / items / properties / skuIdAdded value: +{ + "description": "Pricebook SKU ID for the estimate item", + "type": "integer" +} - added
Input schema / properties / items / items / properties / skuNameAdded value: +{ + "description": "Pricebook SKU display name", + "type": "string" +} - added
Input schema / properties / items / items / properties / unitPriceAdded value: +{ + "description": "Unit sale price for this estimate item", + "type": "number" +} - changed
Input schema / properties / items / items / properties / unitRate / descriptionPrevious value: -"Unit sale rate for this estimate item"New value: +"Legacy alias for unitPrice. Prefer unitPrice." - added
Input schema / properties / items / items / properties / useDefaultProjectLabelsAdded value: +{ + "description": "Use default project labels for this item", + "type": "boolean" +}
- Changed
estimates_items_update20 fields changed- added
Input schema / properties / budgetCodeIdAdded value: +{ + "description": "Budget code ID for this item", + "type": "integer" +} - changed
Input schema / properties / chargeable / descriptionPrevious value: -"Whether this item is chargeable"New value: +"Whether this estimate item is chargeable" - added
Input schema / properties / estimateIdAdded value: +{ + "description": "Estimate ID", + "type": "integer" +} - changed
Input schema / properties / id / descriptionPrevious value: -"Estimate ID"New value: +"Legacy estimate ID alias. Prefer estimateId." - added
Input schema / properties / isAddOnAdded value: +{ + "description": "Whether this item is an add-on", + "type": "boolean" +} - added
Input schema / properties / itemIdAdded value: +{ + "description": "Existing estimate item ID to update; omit to add a new line item", + "type": "integer" +} - added
Input schema / properties / membershipDurationBillingIdAdded value: +{ + "description": "Membership duration/billing option ID", + "type": "integer" +} - removed
Input schema / properties / membershipTypeIdRemoved value: -{ - "description": "Membership type ID associated with this item", - "type": "integer" -} - added
Input schema / properties / parentItemIdAdded value: +{ + "description": "Parent estimate item ID", + "type": "integer" +} - changed
Input schema / properties / qty / descriptionPrevious value: -"Quantity for the estimate item"New value: +"Legacy alias for quantity. Prefer quantity." - added
Input schema / properties / quantityAdded value: +{ + "description": "Quantity for this estimate item", + "type": "number" +} - added
Input schema / properties / skipUpdatingMembershipPricesAdded value: +{ + "description": "Skip updating membership prices from this item", + "type": "boolean" +} - removed
Input schema / properties / skuAccountRemoved value: -{ - "description": "SKU account code for the estimate item", - "type": "string" -} - added
Input schema / properties / skuIdAdded value: +{ + "description": "Pricebook SKU ID for the estimate item", + "type": "integer" +} - added
Input schema / properties / skuNameAdded value: +{ + "description": "Pricebook SKU display name", + "type": "string" +} - changed
Input schema / properties / unitCost / descriptionPrevious value: -"Unit cost for the estimate item"New value: +"Unit cost for this estimate item" - added
Input schema / properties / unitPriceAdded value: +{ + "description": "Unit sale price for this estimate item", + "type": "number" +} - changed
Input schema / properties / unitRate / descriptionPrevious value: -"Unit sale rate for the estimate item"New value: +"Legacy alias for unitPrice. Prefer unitPrice." - added
Input schema / properties / useDefaultProjectLabelsAdded value: +{ + "description": "Use default project labels for this item", + "type": "boolean" +} - removed
Input schema / requiredRemoved value: -[ - "id" -]
- Changed
estimates_update15 fields changed- added
Input schema / properties / items / items / properties / budgetCodeIdAdded value: +{ + "description": "Budget code ID for this item", + "type": "integer" +} - added
Input schema / properties / items / items / properties / idAdded value: +{ + "description": "Existing estimate item ID", + "type": "integer" +} - added
Input schema / properties / items / items / properties / isAddOnAdded value: +{ + "description": "Whether this item is an add-on", + "type": "boolean" +} - added
Input schema / properties / items / items / properties / membershipDurationBillingIdAdded value: +{ + "description": "Membership duration/billing option ID", + "type": "integer" +} - removed
Input schema / properties / items / items / properties / membershipTypeIdRemoved value: -{ - "description": "Membership type ID associated with this item", - "type": "integer" -} - added
Input schema / properties / items / items / properties / parentItemIdAdded value: +{ + "description": "Parent estimate item ID", + "type": "integer" +} - changed
Input schema / properties / items / items / properties / qty / descriptionPrevious value: -"Quantity for this estimate item"New value: +"Legacy alias for quantity. Prefer quantity." - added
Input schema / properties / items / items / properties / quantityAdded value: +{ + "description": "Quantity for this estimate item", + "type": "number" +} - added
Input schema / properties / items / items / properties / skipUpdatingMembershipPricesAdded value: +{ + "description": "Skip updating membership prices from this item", + "type": "boolean" +} - removed
Input schema / properties / items / items / properties / skuAccountRemoved value: -{ - "description": "SKU account code for the estimate item", - "type": "string" -} - added
Input schema / properties / items / items / properties / skuIdAdded value: +{ + "description": "Pricebook SKU ID for the estimate item", + "type": "integer" +} - added
Input schema / properties / items / items / properties / skuNameAdded value: +{ + "description": "Pricebook SKU display name", + "type": "string" +} - added
Input schema / properties / items / items / properties / unitPriceAdded value: +{ + "description": "Unit sale price for this estimate item", + "type": "number" +} - changed
Input schema / properties / items / items / properties / unitRate / descriptionPrevious value: -"Unit sale rate for this estimate item"New value: +"Legacy alias for unitPrice. Prefer unitPrice." - added
Input schema / properties / items / items / properties / useDefaultProjectLabelsAdded value: +{ + "description": "Use default project labels for this item", + "type": "boolean" +}
- Changed
scheduling_appointment_assignments_assign_technicians5 fields changed- removed
Input schema / properties / assignmentsRemoved value: -{ - "description": "Appointment/technician assignment items", - "items": { - "additionalProperties": false, - "properties": { - "appointmentId": { - "description": "Appointment ID to assign", - "type": "integer" - }, - "technicianId": { - "description": "Technician ID to assign", - "type": "integer" - } - }, - "required": [ - "appointmentId", - "technicianId" - ], - "type": "object" - }, - "type": "array" -} - added
Input schema / properties / jobAppointmentIdAdded value: +{ + "description": "Job appointment ID to assign technicians to", + "type": "integer" +} - removed
Input schema / properties / overrideExistingRemoved value: -{ - "description": "Replace existing technician assignments when true", - "type": "boolean" -} - added
Input schema / properties / technicianIdsAdded value: +{ + "description": "Technician IDs to assign to the appointment", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / requiredAdded value: +[ + "jobAppointmentId", + "technicianIds" +]
20 tool updates
v2.6.0- Added
dispatch_appointments_set_summary - Changed
dispatch_job_types_create3 fields changed- added
Input schema / properties / customFieldTypeIdsAdded value: +{ + "description": "Custom field type IDs assigned to this job type", + "items": { + "type": "integer" + }, + "type": "array" +} - added
Input schema / properties / defaultEstimateSoldActionAdded value: +{ + "description": "Default action when an estimate is sold for this job type", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "name", - "businessUnitIds", - "skills", - "tagTypeIds", - "priority", - "duration", - "soldThreshold", - "class", - "summary", - "noCharge", - "enforceRecurringServiceEventSelection", - "invoiceSignaturesRequired" -]New value: +[ + "name" +]
- Changed
dispatch_job_types_update3 fields changed- added
Input schema / properties / customFieldTypeIdsAdded value: +{ + "description": "Custom field type IDs assigned to this job type", + "items": { + "type": "integer" + }, + "type": "array" +} - added
Input schema / properties / customFieldsUpdateModeAdded value: +{ + "description": "How to apply customFieldTypeIds. Replace is the ST default and removes assignments not included in customFieldTypeIds; Merge preserves existing assignments and adds new ones.", + "enum": [ + "Replace", + "Merge" + ], + "type": "string" +} - added
Input schema / properties / defaultEstimateSoldActionAdded value: +{ + "description": "Default action when an estimate is sold for this job type", + "type": "string" +}
- Added
dispatch_jobs_equipment_attach - Added
dispatch_jobs_equipment_detach - Added
dispatch_jobs_equipment_detach_bulk - Added
dispatch_jobs_equipment_get - Changed
dispatch_jobs_list1 field changed- added
Input schema / properties / equipmentIdsAdded value: +{ + "description": "Comma-separated installed equipment IDs; returns jobs with at least one attached equipment item", + "type": "string" +}
- Changed
dispatch_jobs_update1 field changed- added
Input schema / properties / summaryOfWorkAdded value: +{ + "description": "Summary of work completed on the job. Private preview: available for specific accounts only.", + "type": "string" +}
- Added
estimates_estimate_templates_create - Added
estimates_estimate_templates_delete - Added
estimates_estimate_templates_get - Added
estimates_estimate_templates_list - Added
estimates_estimate_templates_update - Added
estimates_proposal_templates_create - Added
estimates_proposal_templates_delete - Added
estimates_proposal_templates_get - Added
estimates_proposal_templates_list - Added
estimates_proposal_templates_update - Added
estimates_proposal_types_list
3 tool updates
v2.5.2- Changed
people_technician_shifts_bulk_delete3 fields changed- removed
Input schema / properties / deletedIdsRemoved value: -{ - "description": "IDs of shifts to delete", - "items": { - "description": "Technician shift ID", - "type": "integer" - }, - "type": "array" -} - added
Input schema / properties / idsAdded value: +{ + "description": "IDs of technician shifts to delete", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / requiredAdded value: +[ + "ids" +]
- Changed
people_technician_shifts_create9 fields changed- added
Input schema / properties / bodyAdded value: +{ + "description": "Shift body / description (required by ST API)", + "type": "string" +} - changed
Input schema / properties / end / descriptionPrevious value: -"Shift end timestamp"New value: +"Shift end timestamp (ISO UTC)" - added
Input schema / properties / repeatEndOnAdded value: +{ + "description": "End date for recurrence (required when repeatType != 'Never')", + "format": "date-time", + "type": "string" +} - added
Input schema / properties / repeatTypeAdded value: +{ + "description": "Repeat type. Use 'Never' for a single shift; 'Daily'/'Weekly'/'Monthly' for recurrence (then `repeatEndOn` is required).", + "enum": [ + "Never", + "Daily", + "Weekly", + "Monthly" + ], + "type": "string" +} - changed
Input schema / properties / shiftType / descriptionPrevious value: -"Shift type"New value: +"Shift type. Default 'Normal'." - changed
Input schema / properties / start / descriptionPrevious value: -"Shift start timestamp"New value: +"Shift start timestamp (ISO UTC)" - removed
Input schema / properties / technicianIdRemoved value: -{ - "description": "Technician ID", - "type": "integer" -} - added
Input schema / properties / technicianIdsAdded value: +{ + "description": "Technician IDs to assign the shift to (one or more)", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" +} - changed
Input schema / requiredPrevious value: -[ - "technicianId", - "start", - "end" -]New value: +[ + "technicianIds", + "start", + "end", + "body", + "repeatType" +]
- Changed
scheduling_capacity_calculate8 fields changed- added
Input schema / properties / argsAdded value: +{ + "additionalProperties": {}, + "description": "Per-job-type arguments (required when jobTypeId is set). Shape varies by tenant configuration.", + "type": "object" +} - added
Input schema / properties / businessUnitIdsAdded value: +{ + "description": "One or more business unit IDs to query", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / endsOnOrBeforeAdded value: +{ + "description": "UTC end of search window (ISO datetime)", + "format": "date-time", + "type": "string" +} - added
Input schema / properties / jobTypeIdAdded value: +{ + "description": "Optional job type ID. If set, ST also requires `args` — see below. Omit both for general capacity-by-BU queries.", + "type": "integer" +} - removed
Input schema / properties / payloadRemoved value: -{ - "additionalProperties": true, - "description": "Capacity calculation payload", - "properties": {}, - "type": "object" -} - added
Input schema / properties / skillBasedAvailabilityAdded value: +{ + "description": "Whether to apply skill-based availability filtering. Required by ST. Pass false to skip skill filtering.", + "type": "boolean" +} - added
Input schema / properties / startsOnOrAfterAdded value: +{ + "description": "UTC start of search window (ISO datetime, e.g. 2026-05-01T12:00:00Z)", + "format": "date-time", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "payload" -]New value: +[ + "startsOnOrAfter", + "endsOnOrBefore", + "businessUnitIds", + "skillBasedAvailability" +]
467 tool updates
v2.5.1- First observed
accounting_ap_credits_list - First observed
accounting_ap_credits_mark_as_exported - First observed
accounting_ap_payments_list - First observed
accounting_ap_payments_mark_as_exported - First observed
accounting_gl_account_types_list - First observed
accounting_gl_accounts_create - First observed
accounting_gl_accounts_get - First observed
accounting_gl_accounts_list - First observed
accounting_gl_accounts_update - First observed
accounting_invoice_items_delete - First observed
accounting_invoice_items_update - First observed
accounting_invoices_create_adjustment - First observed
accounting_invoices_custom_field_types_list - First observed
accounting_invoices_list - First observed
accounting_invoices_mark_as_exported - First observed
accounting_invoices_update - First observed
accounting_invoices_update_custom_fields - First observed
accounting_journal_entries_get_details - First observed
accounting_journal_entries_get_summary - First observed
accounting_journal_entries_list - First observed
accounting_journal_entries_sync_update - First observed
accounting_journal_entries_update - First observed
accounting_payment_terms_get - First observed
accounting_payment_terms_list - First observed
accounting_payment_types_get - First observed
accounting_payment_types_list - First observed
accounting_payments_create - First observed
accounting_payments_custom_field_types_list - First observed
accounting_payments_list - First observed
accounting_payments_update - First observed
accounting_payments_update_custom_fields - First observed
accounting_payments_update_status - First observed
accounting_tax_zones_list - First observed
crm_booking_provider_tags_create - First observed
crm_booking_provider_tags_get - First observed
crm_booking_provider_tags_list - First observed
crm_booking_provider_tags_update - First observed
crm_bookings_contacts_list - First observed
crm_bookings_get - First observed
crm_bookings_list - First observed
crm_bookings_provider_contacts_create - First observed
crm_bookings_provider_contacts_list - First observed
crm_bookings_provider_contacts_update - First observed
crm_bookings_provider_create - First observed
crm_bookings_provider_get - First observed
crm_bookings_provider_list - First observed
crm_bookings_provider_update - First observed
crm_bulk_tags_add_tags - First observed
crm_bulk_tags_remove_tags - First observed
crm_contact_methods_create - First observed
crm_contact_methods_delete - First observed
crm_contact_methods_get - First observed
crm_contact_methods_list - First observed
crm_contact_methods_update - First observed
crm_contact_methods_upsert - First observed
crm_contact_relationships_create - First observed
crm_contact_relationships_delete - First observed
crm_contact_relationships_list - First observed
crm_contacts_by_relationship_list - First observed
crm_contacts_create - First observed
crm_contacts_delete - First observed
crm_contacts_get - First observed
crm_contacts_list - First observed
crm_contacts_replace - First observed
crm_contacts_update - First observed
crm_customers_contacts_create - First observed
crm_customers_contacts_delete - First observed
crm_customers_contacts_list - First observed
crm_customers_contacts_modified_list - First observed
crm_customers_create - First observed
crm_customers_custom_field_types_list - First observed
crm_customers_get - First observed
crm_customers_list - First observed
crm_customers_notes_create - First observed
crm_customers_notes_delete - First observed
crm_customers_notes_list - First observed
crm_customers_tags_create - First observed
crm_customers_tags_delete - First observed
crm_customers_update - First observed
crm_leads_create - First observed
crm_leads_dismiss - First observed
crm_leads_follow_ups_create - First observed
crm_leads_form_submit - First observed
crm_leads_get - First observed
crm_leads_list - First observed
crm_leads_notes_create - First observed
crm_leads_notes_list - First observed
crm_leads_update - First observed
crm_location_labor_types_list - First observed
crm_locations_contacts_create - First observed
crm_locations_contacts_delete - First observed
crm_locations_contacts_list - First observed
crm_locations_contacts_modified_list - First observed
crm_locations_contacts_update - First observed
crm_locations_create - First observed
crm_locations_custom_field_types_list - First observed
crm_locations_get - First observed
crm_locations_list - First observed
crm_locations_notes_create - First observed
crm_locations_notes_delete - First observed
crm_locations_notes_list - First observed
crm_locations_tags_create - First observed
crm_locations_tags_delete - First observed
crm_locations_update - First observed
dispatch_appointments_confirm - First observed
dispatch_appointments_create - First observed
dispatch_appointments_delete - First observed
dispatch_appointments_get - First observed
dispatch_appointments_hold - First observed
dispatch_appointments_list - First observed
dispatch_appointments_reschedule - First observed
dispatch_appointments_unconfirm - First observed
dispatch_appointments_unhold - First observed
dispatch_appointments_update_special_instructions - First observed
dispatch_arrival_window_configuration_get - First observed
dispatch_arrival_window_configuration_update - First observed
dispatch_arrival_windows_activate - First observed
dispatch_arrival_windows_create - First observed
dispatch_arrival_windows_get - First observed
dispatch_arrival_windows_list - First observed
dispatch_arrival_windows_update - First observed
dispatch_call_reasons_list - First observed
dispatch_form_submissions_list - First observed
dispatch_forms_list - First observed
dispatch_images_create - First observed
dispatch_images_get - First observed
dispatch_installed_equipment_attachments_create - First observed
dispatch_installed_equipment_attachments_get - First observed
dispatch_installed_equipment_create - First observed
dispatch_installed_equipment_delete - First observed
dispatch_installed_equipment_get - First observed
dispatch_installed_equipment_list - First observed
dispatch_installed_equipment_update - First observed
dispatch_job_cancel_reasons_list - First observed
dispatch_job_hold_reasons_list - First observed
dispatch_job_splits_by_jobs_list - First observed
dispatch_job_splits_list - First observed
dispatch_job_types_create - First observed
dispatch_job_types_delete - First observed
dispatch_job_types_get - First observed
dispatch_job_types_list - First observed
dispatch_job_types_update - First observed
dispatch_jobs_booked_log_get - First observed
dispatch_jobs_cancel - First observed
dispatch_jobs_cancel_reasons_list - First observed
dispatch_jobs_canceled_logs_list - First observed
dispatch_jobs_complete - First observed
dispatch_jobs_create - First observed
dispatch_jobs_create_attachment - First observed
dispatch_jobs_custom_field_types_list - First observed
dispatch_jobs_get - First observed
dispatch_jobs_get_attachment - First observed
dispatch_jobs_history_get - First observed
dispatch_jobs_hold - First observed
dispatch_jobs_list - First observed
dispatch_jobs_list_attachments - First observed
dispatch_jobs_messages_create - First observed
dispatch_jobs_notes_create - First observed
dispatch_jobs_notes_list - First observed
dispatch_jobs_remove_cancellation - First observed
dispatch_jobs_update - First observed
dispatch_project_statuses_get - First observed
dispatch_project_statuses_list - First observed
dispatch_project_sub_statuses_get - First observed
dispatch_project_sub_statuses_list - First observed
dispatch_project_types_get - First observed
dispatch_project_types_list - First observed
dispatch_projects_attach_job - First observed
dispatch_projects_create - First observed
dispatch_projects_custom_field_types_list - First observed
dispatch_projects_delete - First observed
dispatch_projects_detach_job - First observed
dispatch_projects_get - First observed
dispatch_projects_list - First observed
dispatch_projects_messages_create - First observed
dispatch_projects_notes_create - First observed
dispatch_projects_notes_list - First observed
dispatch_projects_update - First observed
estimates_create - First observed
estimates_dismiss - First observed
estimates_export_estimates - First observed
estimates_get - First observed
estimates_items_delete - First observed
estimates_items_list - First observed
estimates_items_update - First observed
estimates_list - First observed
estimates_sell - First observed
estimates_unsell - First observed
estimates_update - First observed
export_activities - First observed
export_activity_codes - First observed
export_adjustments - First observed
export_appointment_assignments - First observed
export_appointments - First observed
export_bookings - First observed
export_business_units - First observed
export_calls - First observed
export_contacts - First observed
export_customers - First observed
export_customers_contacts - First observed
export_employees - First observed
export_equipment - First observed
export_gross_pay_items - First observed
export_installed_equipment - First observed
export_inventory_bills - First observed
export_invoice_items - First observed
export_invoice_templates - First observed
export_invoices - First observed
export_job_cancel_reasons - First observed
export_job_canceled_logs - First observed
export_job_history - First observed
export_job_notes - First observed
export_job_splits - First observed
export_jobs - First observed
export_leads - First observed
export_location_recurring_service_events - First observed
export_location_recurring_services - First observed
export_locations - First observed
export_locations_contacts - First observed
export_materials - First observed
export_membership_status_changes - First observed
export_membership_types - First observed
export_memberships - First observed
export_payments - First observed
export_payroll_adjustments - First observed
export_payroll_settings - First observed
export_project_notes - First observed
export_projects - First observed
export_purchase_orders - First observed
export_recurring_service_types - First observed
export_returns - First observed
export_service_agreements - First observed
export_services - First observed
export_tag_types - First observed
export_technicians - First observed
export_timesheet_codes - First observed
export_timesheets - First observed
export_transfers - First observed
intel_campaign_performance - First observed
intel_csr_performance - First observed
intel_daily_snapshot - First observed
intel_estimate_pipeline - First observed
intel_invoice_tracking - First observed
intel_labor_cost - First observed
intel_lookup - First observed
intel_membership_health - First observed
intel_revenue_summary - First observed
intel_technician_scorecard - First observed
inventory_purchase_order_markups_create - First observed
inventory_purchase_order_markups_delete - First observed
inventory_purchase_order_markups_get - First observed
inventory_purchase_order_markups_list - First observed
inventory_purchase_order_markups_update - First observed
inventory_purchase_order_types_create - First observed
inventory_purchase_order_types_list - First observed
inventory_purchase_order_types_update - First observed
inventory_purchase_orders_approve_request - First observed
inventory_purchase_orders_cancel - First observed
inventory_purchase_orders_create - First observed
inventory_purchase_orders_get - First observed
inventory_purchase_orders_list - First observed
inventory_purchase_orders_reject_request - First observed
inventory_purchase_orders_requests_list - First observed
inventory_purchase_orders_update - First observed
inventory_receipts_cancel - First observed
inventory_receipts_create - First observed
inventory_receipts_list - First observed
inventory_receipts_update_custom_fields - First observed
inventory_return_types_create - First observed
inventory_return_types_list - First observed
inventory_return_types_update - First observed
inventory_returns_cancel - First observed
inventory_returns_create - First observed
inventory_returns_list - First observed
inventory_returns_update - First observed
inventory_returns_update_custom_fields - First observed
inventory_transfers_list - First observed
inventory_transfers_update - First observed
inventory_transfers_update_custom_fields - First observed
inventory_vendors_create - First observed
inventory_vendors_get - First observed
inventory_vendors_list - First observed
inventory_vendors_update - First observed
inventory_warehouses_list - First observed
inventory_warehouses_update - First observed
marketing_attributed_leads_get - First observed
marketing_calls_get - First observed
marketing_calls_recording_get - First observed
marketing_calls_update - First observed
marketing_calls_v2_list - First observed
marketing_calls_v3_list - First observed
marketing_calls_voice_mail_get - First observed
marketing_campaign_costs_create - First observed
marketing_campaign_costs_delete - First observed
marketing_campaign_costs_get - First observed
marketing_campaign_costs_list - First observed
marketing_campaign_costs_update - First observed
marketing_campaigns_costs_list - First observed
marketing_campaigns_create - First observed
marketing_campaigns_get - First observed
marketing_campaigns_list - First observed
marketing_campaigns_update - First observed
marketing_client_side_data_get - First observed
marketing_client_specific_pricing_get_all_rate_sheets - First observed
marketing_client_specific_pricing_update_rate_sheet - First observed
marketing_external_call_attributions_create - First observed
marketing_opt_in_outs_create - First observed
marketing_opt_in_outs_list - First observed
marketing_opt_in_outs_lookup_create - First observed
marketing_reviews - First observed
marketing_scheduled_job_attributions_create - First observed
marketing_scheduler_scheduler_performance - First observed
marketing_scheduler_schedulers - First observed
marketing_scheduler_schedulersessions - First observed
marketing_suppressions_add - First observed
marketing_suppressions_get - First observed
marketing_suppressions_list - First observed
marketing_suppressions_remove - First observed
marketing_web_booking_attributions_create - First observed
marketing_web_lead_form_attributions_create - First observed
memberships_create - First observed
memberships_custom_fields_list - First observed
memberships_get - First observed
memberships_list - First observed
memberships_recurring_service_events_list - First observed
memberships_recurring_service_events_mark_complete - First observed
memberships_recurring_service_events_mark_incomplete - First observed
memberships_recurring_service_types_get - First observed
memberships_recurring_service_types_list - First observed
memberships_recurring_services_get - First observed
memberships_recurring_services_list - First observed
memberships_recurring_services_update - First observed
memberships_service_agreements_get - First observed
memberships_service_agreements_list - First observed
memberships_status_changes_list - First observed
memberships_types_discounts_list - First observed
memberships_types_duration_billing_list - First observed
memberships_types_get - First observed
memberships_types_list - First observed
memberships_types_recurring_service_items_list - First observed
memberships_update - First observed
payroll_employees_payrolls_list - First observed
payroll_gross_pay_items_create - First observed
payroll_gross_pay_items_delete - First observed
payroll_gross_pay_items_list - First observed
payroll_gross_pay_items_update - First observed
payroll_payroll_adjustments_create - First observed
payroll_payroll_adjustments_get - First observed
payroll_payroll_adjustments_list - First observed
payroll_payroll_settings_employee_get - First observed
payroll_payroll_settings_employee_update - First observed
payroll_payroll_settings_list - First observed
payroll_payroll_settings_technician_get - First observed
payroll_payroll_settings_technician_update - First observed
payroll_payrolls_get - First observed
payroll_payrolls_list - First observed
payroll_technicians_payrolls_list - First observed
payroll_timesheet_codes_get - First observed
payroll_timesheet_codes_list - First observed
payroll_timesheets_create_job - First observed
payroll_timesheets_job_list - First observed
payroll_timesheets_job_update - First observed
payroll_timesheets_jobs_list - First observed
payroll_timesheets_non_job_create - First observed
payroll_timesheets_non_job_delete - First observed
payroll_timesheets_non_job_get - First observed
payroll_timesheets_non_job_list - First observed
payroll_timesheets_non_job_update - First observed
people_employees_accountactions - First observed
people_employees_create - First observed
people_employees_export - First observed
people_employees_get - First observed
people_employees_list - First observed
people_employees_update - First observed
people_gps_create - First observed
people_performance_get - First observed
people_technician_ratings_update - First observed
people_technician_shifts_bulk_delete - First observed
people_technician_shifts_create - First observed
people_technician_shifts_delete - First observed
people_technician_shifts_get - First observed
people_technician_shifts_list - First observed
people_technician_shifts_update - First observed
people_technicians_accountactions - First observed
people_technicians_create - First observed
people_technicians_get - First observed
people_technicians_list - First observed
people_technicians_update - First observed
people_trucks_list - First observed
people_trucks_update - First observed
pricebook_bulk_create - First observed
pricebook_bulk_update - First observed
pricebook_categories_create - First observed
pricebook_categories_delete - First observed
pricebook_categories_get - First observed
pricebook_categories_list - First observed
pricebook_categories_update - First observed
pricebook_discounts_fees_create - First observed
pricebook_discounts_fees_delete - First observed
pricebook_discounts_fees_get - First observed
pricebook_discounts_fees_list - First observed
pricebook_discounts_fees_update - First observed
pricebook_equipment_delete - First observed
pricebook_equipment_get - First observed
pricebook_equipment_list - First observed
pricebook_equipment_update - First observed
pricebook_materials_cost_types_list - First observed
pricebook_materials_create - First observed
pricebook_materials_delete - First observed
pricebook_materials_get - First observed
pricebook_materials_list - First observed
pricebook_materials_markup_create - First observed
pricebook_materials_markup_get - First observed
pricebook_materials_markup_list - First observed
pricebook_materials_markup_update - First observed
pricebook_materials_update - First observed
pricebook_services_create - First observed
pricebook_services_delete - First observed
pricebook_services_get - First observed
pricebook_services_list - First observed
pricebook_services_update - First observed
reporting_dynamic_value_sets_get - First observed
reporting_report_categories_list - First observed
reporting_reports_data_create - First observed
reporting_reports_get - First observed
reporting_reports_list - First observed
scheduling_appointment_assignments_assign_technicians - First observed
scheduling_appointment_assignments_list - First observed
scheduling_appointment_assignments_unassign_technicians - First observed
scheduling_business_hours_create - First observed
scheduling_business_hours_list - First observed
scheduling_capacity_calculate - First observed
scheduling_non_job_appointments_create - First observed
scheduling_non_job_appointments_delete - First observed
scheduling_non_job_appointments_get - First observed
scheduling_non_job_appointments_list - First observed
scheduling_non_job_appointments_update - First observed
scheduling_teams_create - First observed
scheduling_teams_delete - First observed
scheduling_teams_get - First observed
scheduling_teams_list - First observed
scheduling_zones_get - First observed
scheduling_zones_list - First observed
settings_activities_export - First observed
settings_activity_categories_export - First observed
settings_activity_categories_get - First observed
settings_activity_categories_list - First observed
settings_activity_codes_export - First observed
settings_activity_codes_get - First observed
settings_activity_codes_list - First observed
settings_activity_types_get - First observed
settings_activity_types_list - First observed
settings_business_units_get - First observed
settings_business_units_list - First observed
settings_business_units_update - First observed
settings_tag_types_create - First observed
settings_tag_types_delete - First observed
settings_tag_types_export - First observed
settings_tag_types_get - First observed
settings_tag_types_list - First observed
settings_tag_types_update - First observed
settings_tasks_create - First observed
settings_tasks_create_subtask - First observed
settings_tasks_get - First observed
settings_tasks_list - First observed
settings_user_roles_list - First observed
st_health_check
TDQS
Scored across 264 tools
There are multiple near-identical and explicitly duplicated tools, including export_employees/people_employees_export, export_activities/settings_activities_export, marketing_calls_v2_list/marketing_calls_v3_list, and dispatch_job_cancel_reasons_list/dispatch_jobs_cancel_reasons_list. Many descriptions try to disambiguate, but the sheer number of overlapping feeds and singular/plural variants makes misselection likely.
Most tools follow a readable lowercase snake_case domain_entity_verb pattern, but conventions are mixed: top-level export_* feeds coexist with *_export alias tools, v2/v3 suffixes appear inconsistently, and names like marketing_scheduler_schedulersessions or crm_bookings_provider_contacts_list break the rhythm. The naming is not chaotic, but it is not uniform enough for a higher score.
With 264 tools, this is an extreme count even for a broad ServiceTitan integration. The surface includes dozens of near-duplicate export feeds, catalog/list/get variants, and custom intel tools that could have been consolidated. This volume will overwhelm agents and makes tool selection impractical.
The read/list/export coverage is broad across CRM, dispatch, accounting, inventory, payroll, marketing, and pricebook, but the entire surface is read-only with no create, update, or delete operations. There are also odd gaps where entities only have exports or only have list/get tools, and several duplicate feeds suggest an incomplete or inconsistent lifecycle model.
Maintenance
Related MCP Connectors
Unified MCP Server is a remote MCP connector for AI agents and vertical AI products that provides access to 22,000+ authorized SaaS tools across 400+ integrations and 24 categories directly inside LLMs (Claude, GPT, Gemini, Cohere). Tools operate only on explicitly authorized customer connections, enabling agents to safely read and write against live third-party systems.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
The HubSpot MCP Server acts as a bridge that enables AI assistants and Large Language Models to securely interact with HubSpot CRM data through natural conversation, without requiring users to understand complex API structures. It provides read-only access to standard CRM objects (contacts, companies, deals, tickets, products, invoices, and more) and their associations, secured via OAuth 2.0, allowing AI agents to perform tasks like summarizing deals, fetching company updates, and looking up record changes.
Related MCP Servers
- FlicenseDqualityDmaintenanceAn MCP server that allows AI assistants to interact with the ServiceTitan API, requiring client credentials for authentication.4-
- AlicenseNot gradedqualityDmaintenanceA remote MCP server that exposes the ServiceTitan API as tools, enabling Claude and other clients to manage customers, jobs, pricebook, invoicing, and more with write safety and built-in observability.MIT
- AlicenseCqualityCmaintenanceA comprehensive MCP server covering the full GoHighLevel API surface with 651 tools, enabling management of contacts, opportunities, calendars, invoices, and more through natural language, with multi-tenant support and read-only safety defaults.10020 npm1MIT
- AlicenseNot gradedqualityCmaintenanceGoverned MCP server for bank-grade agent tool access with RBAC, PII redaction, rate limiting, and audit logging.MIT