Skip to main content
Glama

Server Details

Skysay voice agents, phone numbers, calls, SMS and campaigns over MCP. 100+ countries covered.

Ownership verified
Status
Healthy
Uptime
99.7% over 22 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
skysay-ai/skysay-mcp
GitHub Stars
0
Server Listing
Skysay MCP
ChatGPT
–
Claude
–

TDQS

C2.8/5.0

Scored across 84 tools

Disambiguation2/5

Ten forwarding tools (create_forwarding_setup, get_forwarding_setup, list_forwarding_setups, update_forwarding_setup, start_forwarding_test, get_forwarding_test, cancel_forwarding_test, get_forwarding_instructions, record_forwarding_instructions, record_forwarding_stop) carry a single identical description, so an agent cannot tell them apart from the surface at all. There is also real overlap between authorize_outbound, evaluate_outbound_policy, and the preflight portion of create_outbound_call, all of which answer 'will this outbound attempt be allowed?'. The rest of the surface (agents, calls, campaigns, simulations) is mostly well differentiated.

Naming Consistency4/5

The overwhelming majority follow a clean verb_noun snake_case pattern (create_agent, list_calls, launch_campaign, cancel_simulation_run). A handful of outliers break the pattern, notably account_overview (no verb) and get_capabilities/request_capabilities where 'request' means write-a-config rather than fetch. Deviations are minor and do not impede reading the set.

Tool Count1/5

84 tools is far past the 50+ extreme-mismatch threshold, and the surface is not tight: a whole ten-tool forwarding cluster plus many narrow lifecycle slices (start/pause/resume/cancel campaign, preview/start/get/get_results/cancel simulation) inflate the count. Even for a genuinely broad domain (voice, SMS, campaigns, numbers, simulations, PBX, wallet), the set is bloated and could be consolidated by an order of magnitude.

Completeness3/5

Core loops are well covered: agents support create/get/list/update/duplicate/delete plus voice stack and variables, calls support create/get/list/hangup/transcript/summary/translation, and campaigns and simulations have full start/stop lifecycles. However there are notable dead ends — contact lists have create/get/list but no update or delete (and add_contacts has no remove_contacts counterpart), and numbers have list/request/rules but no release or delete number.

Available Tools

84 tools
account_overviewAccount overviewA
Read-onlyIdempotent
Inspect

Summarize a workspace: wallet balance, usage totals with up to 10 line items, and for agents, numbers, number requests, calls and SMS conversations the total count plus up to 5 newest items with identifying fields only. Each section reports total, returned, has_more, items too large to preview (omitted), and list_tool, the tool on this connection that returns complete records (null when there is none; it requires its own scope). SMS message content is never included. The result is at most 25,000 characters.

NameRequiredDescriptionDefault
project_idNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds substantial context beyond them: a 25,000-character cap, per-section total/returned/has_more reporting, omission of items 'too large to preview', and the privacy guarantee that 'SMS message content is never included'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Lead clause front-loads the purpose and every subsequent clause carries real value (counts, limits, privacy). It is a single very dense sentence, which slightly hurts readability, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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

With no output schema, the description must describe returns itself, and it does so thoroughly: section structure, caps (10 line items, 5 newest), the list_tool escape hatch, and the character limit. Only parameter scoping is left thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema coverage is only 50% and the description says nothing about either parameter. project_id is undocumented in both places, and the description does not compensate by explaining what project_id scopes or how it interacts with organization_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Uses a specific verb and resource ('Summarize a workspace') and enumerates exactly what the summary contains (wallet balance, usage totals, counts for agents/numbers/calls/SMS). This clearly distinguishes it from the sibling list_* tools, which return complete record sets rather than a bounded overview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

It implies when to use this tool (a bounded summary) versus the list_tool 'that returns complete records', and notes that tool 'requires its own scope'. However, it never names the actual sibling tools or states an explicit when-to-use/when-not condition, leaving the routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_contactsAdd contacts to a listAInspect

Append rows to an existing contact list (at most 10,000 per call). Duplicates within the list are skipped.

NameRequiredDescriptionDefault
contactsYes
contact_list_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), and the description adds genuinely useful behavior beyond them: the 10,000-row per-call batch limit and the fact that duplicates within the list are skipped. It still omits what happens on failure or partial success, but that is a modest gap against 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the core action and its most important constraint (the batch cap) front-loaded. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a non-destructive mutation with annotations and no output schema, the description covers the action, the size limit, and dedup behavior. However, with 33% schema coverage and an undocumented nested contacts object, an agent still lacks enough detail to construct valid payloads confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 33% and only organization_id carries a description. The description states the 10,000 cap, which merely restates the schema's maxItems, and says nothing about the contacts item shape (which is an undocumented bare object) or the contact_list_id semantics. It does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Append rows to an existing contact list'), and the word 'existing' distinguishes it from the sibling create_contact_list. An agent can tell at a glance that this adds to a list rather than creating one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The phrase 'existing contact list' implies the list must already exist, which is useful context, but there is no explicit when-to-use guidance, no conditions or prerequisites, and no routing to siblings such as create_contact_list or list_contacts. Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_do_not_callAdd numbers to do-not-callA
Destructive
Inspect

Add numbers to the workspace do-not-call register. Every outbound path refuses them from then on.

NameRequiredDescriptionDefault
reasonNo
phone_numbersYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, but the description adds real behavioral context beyond them: the effect is a persistent, global suppression ('from then on') that every outbound path honors. It stops short of saying what happens on duplicate input or what permissions are needed, so it is additive but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, effect front-loaded, zero filler. Every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

There is no output schema, so the description should ideally state what a successful call returns (e.g., count added, duplicates skipped), and the reason parameter is undocumented in both schema and description. The core effect is communicated well, but the picture is incomplete for a destructive, non-idempotent mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

With only 33% schema coverage, one of three parameters has a schema description (organization_id). The description only weakly maps to phone_numbers ('Add numbers') and gives no meaning for the reason parameter, whose 160-char constraint appears nowhere. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource: 'Add numbers to the workspace do-not-call register.' The resource is unambiguous and distinct from sibling tools like update_number_rules or authorize_outbound. It does not, however, explicitly contrast itself with any sibling, which is what a 5 would require.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage context is implied by the register's purpose (suppressing outbound contact) but the description never says when to reach for this tool versus update_number_rules, evaluate_outbound_policy, or check_number_requirements, and gives no exclusions or prerequisites. Adequate but with a clear routing gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

authorize_outboundCheck outbound authorizationA
Read-onlyIdempotent
Inspect

Preflight a call/SMS against the pre-dial gates (allowed|blocked|needs_review) before placing it. For a voice call it asks both questions create_outbound_call meets, in order: the workspace capabilities (destination country -- per-org allowlist plus an always-on high-risk-country hard block -- channel, profile, caps), then the per-call policy (suspensions, caller-number readiness). With from_number_id it first asks that number's own Number rules (caller ID allowed, allowed_countries covers the destination; stage outbound_number_rules). stage names the gate that answered. Not a full admission: the number's allowed_agents, concurrency and the wallet reserve are not checked. Read-only; no reserve, charge, or review row is written.

NameRequiredDescriptionDefault
toNo
channelYes
countryNoDestination country. Governed by the org's active workspace capabilities, not a fixed platform allowlist.
purposeNoOptional, free-form outbound purpose, recorded when sent; no purpose or token is ever refused. The documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support.
metadataNo
categoriesNo
campaign_idNo
amount_minorNo
phone_numberNo
relationshipNo
from_number_idNo
recipient_typeNoOptional, never enforced or required -- outbound is not restricted to business recipients. Persisted verbatim on the call row if sent; SMS has no recipient_type column, so it is accepted but not stored there.
user_requestedNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
user_authorizationNoOptional: who authorized the call and why ({authorized_by, reason}). Recorded, never required.

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations by disclosing the exact gate sequence (workspace capabilities, then per-call policy, then Number rules when from_number_id is set), the always-on high-risk-country hard block, and the negative guarantees: no reserve, charge, or review row is written. The explicit 'not checked' list (allowed_agents, concurrency, wallet reserve) is exactly the kind of scope boundary an agent needs to avoid over-trusting a positive result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and verdict in the first sentence, then layers gate order and exclusions, so the most decision-relevant content comes first. The middle sentences are dense and parenthetical-heavy, and the dangling 'stage outbound_number_rules' fragment reads awkwardly, but little of the content is genuinely redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a 15-parameter tool with no output schema, the description does well on the gate model and read-only guarantees, but it leaves the return shape underspecified beyond the three verdicts and the meaning of `stage` — no indication of what reason/detail fields accompany a block. The missing routing guidance relative to evaluate_outbound_policy is also a real gap given that sibling exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

With only 33% schema description coverage across 15 parameters, the description carries real weight: it explains that from_number_id triggers the Number's own rules stage and that channel selects the voice-vs-SMS gate path, plus what `stage` means in the result. It still says nothing about to, phone_number, categories, campaign_id, amount_minor, relationship, or user_requested, so several parameters remain undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (preflight) and resource (call/SMS against pre-dial gates) and names the concrete decision space (allowed|blocked|needs_review), which distinguishes it from create_outbound_call by making clear it answers rather than performs. An agent can tell what it returns 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.

Usage Guidelines4/5

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

Explicitly frames this as a check to run 'before placing' the call and ties it to create_outbound_call's questions in order, which gives clear when-to-use context. It also scopes itself with 'Not a full admission' and lists what is not checked, but it never mentions the closely related siblings evaluate_outbound_policy or check_number_requirements, leaving the agent to guess which preflight tool to pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_campaignCancel a campaignB
Destructive
Inspect

Cancel a campaign: queued calls are cancelled, remaining contacts are skipped.

NameRequiredDescriptionDefault
campaign_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, but the description adds genuine value by specifying exactly what is destroyed or skipped: queued calls are cancelled and remaining contacts are skipped. It stops short of stating reversibility or whether re-cancelling an already-cancelled campaign errors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action and then the consequence. No filler, nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

The core side effects are conveyed, but for a destructive, non-idempotent mutation with no output schema there is no mention of return shape, error cases, or auth/permission needs, and the required campaign_id is unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema coverage is only 50%: organization_id is documented in the schema, but campaign_id has no description anywhere. The description adds no parameter information, so it fails to compensate for the undocumented required identifier.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb and resource ('Cancel a campaign') and even names the concrete effects on queued calls and remaining contacts. It does not, however, differentiate itself from close siblings like pause_campaign or resume_campaign, leaving the cancel-vs-pause distinction to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no guidance on when to cancel versus pause, whether cancellation is appropriate mid-launch, or any precondition (e.g. campaign must be running). The agent must guess which sibling to reach for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_forwarding_testCancel forwarding testCInspect

Manage an existing-number forwarding setup through the canonical service. No carrier settings change, number purchase or phone call occurs. Test verification requires linked call evidence.

NameRequiredDescriptionDefault
setup_idYes
attempt_idYes
project_idNo

TDQS

C2.3/5.0
Behavior3/5

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

Annotations already state readOnly=false, destructive=false, idempotent=false, so the safety profile is partly covered. The description adds real behavioral context: canceling does not touch carrier settings, purchase numbers, or place calls, and verification depends on linked call evidence. It still does not say what state the setup or attempt ends in.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is short, but the lead sentence is vague filler ('canonical service') and the actual verb is buried. The scope disclaimer and the call-evidence sentence are useful, yet the whole thing could be recast to put cancellation first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

This is a mutating tool with no output schema and zero parameter documentation, so the description must do heavy lifting. It omits the resulting state after cancellation, whether the test can be restarted, and any prerequisites, leaving an agent without enough to invoke it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% across three parameters, so the description carries the full burden and mostly fails it: setup_id, attempt_id, and project_id are never explained. Only the phrase 'linked call evidence' faintly hints at what attempt_id refers to, which is not enough.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

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

The description says the tool will "Manage an existing-number forwarding setup," which is broader and vaguer than the name/title 'Cancel forwarding test' and never states the cancel action. An agent reading only the description would not know this tool stops a forwarding test, nor how it differs from start_forwarding_test or get_forwarding_test.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No indication of when to use this versus start_forwarding_test, get_forwarding_test, or update_forwarding_setup. The negative scope ("No carrier settings change, number purchase or phone call occurs") is a useful exclusion but is not usage routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_simulation_runCancel a simulation runA
Destructive
Inspect

Cancel a queued or running simulation run. Attempts already finished keep their results; nothing further is queued or charged.

NameRequiredDescriptionDefault
run_idYes
agent_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, covering the safety profile. The description adds value by clarifying consequences: finished attempts keep results and no further charges or queuing occur. It does not explain idempotency behavior despite the non-idempotent annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and scoped effects. Every clause adds information with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

The description covers behavioral consequences well and annotations carry the destructive profile, but the sparse schema (33% coverage) leaves required parameters undocumented and the description does not compensate. For a 3-param destructive mutation tool, this is a noticeable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema coverage is only 33% – only organization_id has a description. The description mentions no parameter names or meanings, leaving agent_id and run_id with no semantic guidance beyond the schema's required list and string types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb 'Cancel' with the resource 'simulation run' and scope ('queued or running'). It distinguishes from siblings such as start_simulation_run and get_simulation_run by verb, so an agent can select it correctly 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.

Usage Guidelines3/5

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

Gives the core use case ('queued or running') but no explicit when-not conditions or alternatives. It doesn't mention when to prefer get_simulation_run or that already-finished runs cannot be cancelled, leaving routing implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_agent_deletionCheck AI agent deletionA
Read-onlyIdempotent
Inspect

Read the current dependencies preventing deletion. This check does not reserve deletion; delete_agent checks again atomically.

NameRequiredDescriptionDefault
agent_idYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent and non-destructive behavior, so the bar is lower. The description nonetheless adds a genuine behavioral nuance beyond the annotations: this check does not reserve the deletion and results can be stale, since delete_agent performs an atomic re-check. It omits what the returned dependency data looks like, which matters given there is no 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, with the core action front-loaded and the non-reservation caveat immediately following. No filler and nothing that could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

For a single-parameter read-only check with no output schema, the description covers the essential call-correctness concerns: purpose and the non-atomic/racy nature of the result. The main gap is that it does not indicate the shape or meaning of the returned dependencies (e.g. whether it lists agents, campaigns, or contacts), which an agent would need to interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

There is one required parameter, agent_id, with 0% schema description coverage, so the schema adds no meaning. The description never mentions the parameter; it is only inferable from the tool's subject matter. Adequate but no added semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Read the current dependencies preventing deletion'), which an agent can immediately map to a pre-deletion inspection step. It explicitly names the sibling it complements (delete_agent), making the distinction between the two operations unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

The description defines the usage context clearly: run this to see what blocks deletion, and note that it is non-binding because delete_agent re-checks atomically. It does not spell out an explicit 'when not to call this' case (e.g. that calling it is optional since delete_agent performs its own check), so it stops just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_number_requirementsCheck number requirementsB
Read-onlyIdempotent
Inspect

Return country and number-type onboarding requirements in plain terms.

NameRequiredDescriptionDefault
countriesNo
number_typesNo

TDQS

B3.1/5.0
Behavior2/5

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. Beyond that the description adds only the vague "in plain terms," which hints at human-readable output but does not say what is returned, whether results are per-country, or how missing/unknown countries are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler; the purpose and scope are front-loaded and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

This is a simple read-only lookup with no output schema and only two optional params, so the description needn't explain return values. Still, with 0% schema coverage it leaves the accepted input vocabulary (ISO codes? names?) and the meaning of "plain terms" unspecified, which is the minimum an agent would need to call it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the burden; it does partially by naming both dimensions ("country" and "number-type"), which maps to the countries and number_types arrays. It gives no format, expected value vocabulary, or behavior for empty/omitted arrays, so compensation is incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a concrete verb ("Return") and a specific resource ("country and number-type onboarding requirements"), so an agent knows this is a read/lookup tool. It does not, however, distinguish itself from adjacent siblings such as get_number_rules, get_number_catalog, or get_coverage, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. With several similarly named number-related siblings (get_number_rules, get_number_catalog, get_coverage, request_number), the absence of routing guidance is a real gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connect_external_agentConnect an external agentCInspect

Shortcut for creating an external_audio agent with webhook and audio stream URLs.

NameRequiredDescriptionDefault
nameYes
project_idYes
webhook_urlYes
call_summaryNoThe free AI call summary: enabled (default true) and an optional goal line (at most 4000 characters) the call is judged against.
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
audio_stream_urlYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false, so the safety profile is covered. The description adds that this bundles a webhook URL and an audio stream URL, but doesn't disclose the shortcut's preset defaults or what happens if required URLs are unreachable. Given 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the core concept front-loaded. No wasted words, though brevity here comes at the cost of the missing detail noted elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

This is a mutation that creates an agent, with no output schema and thin parameter documentation. The description should explain the shortcut's implied defaults, what gets created, and the required URLs' roles; instead it leaves most of that to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema coverage is only 33% across 6 parameters with a nested call_summary object. The description only gestures at two of them (webhook_url, audio_stream_url) without format or semantics, and says nothing about name, project_id, or the optional organization_id default. It does not compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific action (create) and a specific resource variant (external_audio agent) plus the distinguishing payload (webhook and audio stream URLs). It's clear what the tool builds, though it never explicitly contrasts itself with the sibling create_agent, leaving the relationship to be inferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

Calling itself a 'shortcut' hints that it is an alternative to create_agent, but there is no explicit when-to-use / when-not-to-use guidance or statement of which defaults the shortcut applies. An agent must guess whether to route here or through create_agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_agentCreate an AI agentBInspect

Create a first-class Skysay agent in external_audio, external_text, or hosted mode. Hosted agents can choose a shared stack and selected languages; locale overrides remain draft data until the explicit voice-stack publish command. An engine whose agent-catalog row says has_language_axis false (a voice-to-voice engine) refuses languages, language_profiles and follow_caller with a 400 naming the field and the engine.

NameRequiredDescriptionDefault
modeYes
nameYes
modelNo
voiceNo
languageNo
languagesNo
project_idYes
transcriberNo
webhook_urlNo
call_summaryNoThe free AI call summary: enabled (default true) and an optional goal line (at most 4000 characters) the call is judged against.
begin_messageNo
first_messageNo
system_promptNo
voice_frontendNoOptional conversation engine. Omit or cascade keeps STT/LLM/TTS. gpt_live selects GPT-Live-1. Each engine declares whether it has a language axis as has_language_axis in get_agent_catalog.
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
audio_stream_urlNo
language_profilesNo

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-idempotent, closed-world, and the description adds genuinely non-derivable behavior: language fields are rejected with a 400 naming the field when the engine has has_language_axis false, and locale overrides stay draft until an explicit publish step. It does not state what the response contains (e.g., the new agent's id) or whether creation is atomic across the nested objects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the purpose, and no filler. However, terms like 'first-class', 'shared stack', and 'explicit voice-stack publish command' are used without definition and add density without clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a 17-parameter creation tool with nested objects and no output schema, the description is thin: it never says what is returned, what defaults apply, or how the many optional fields interact. It covers the highest-risk validation rule well, which keeps it at minimum-viable rather than inadequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 18% across 17 parameters, so the description must compensate and largely does not: model, voice, transcriber, webhook_url, begin_message, first_message, system_prompt, audio_stream_url and the required project_id/name are never explained. It does add real cross-parameter semantics for languages and language_profiles via the engine capability gate and the draft/publish lifecycle, but that covers a small fraction of the surface.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description names a specific verb and resource (create a Skysay agent) and enumerates the three mutually exclusive modes, so the agent knows exactly what the call produces. It does not distinguish itself from siblings that also create agents (connect_external_agent, duplicate_agent) or from update_agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is implied through the mode enumeration and the note that hosted mode is the one that accepts stacks and languages, but there is no explicit statement of when to choose this tool over connect_external_agent or duplicate_agent. The mention that locale overrides need a later publish command is a useful sequencing hint but is phrased as a fact rather than guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_campaignCreate a campaignAInspect

Create a draft outbound campaign: agent, caller-id numbers, contact list, purpose, consent_basis (existing_customer | explicit_consent), calling windows, retry policy (or a preset: sales, collections, single_attempt), concurrency and optional schedule. It starts only when launched with launch_campaign.

NameRequiredDescriptionDefault
nameYes
ends_atNo
purposeYesOptional, free-form outbound purpose, recorded when sent; no purpose or token is ever refused. The documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support.
agent_idYes
languageNo
time_zoneNoIANA time zone (default UTC), matched and stored like a contact's time_zone: ignoring case, another spelling of a zone stored as the zone it names, an offset such as UTC-5 refused.
project_idYes
retry_policyNo
consent_basisYes
time_zone_modeNo
calling_windowsNo{weekday: [{start: 'HH:MM', end: 'HH:MM'}]}; defaults per destination country.
contact_list_idYes
from_number_idsYes
max_concurrencyNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
scheduled_start_atNo
retry_policy_presetNo
reserved_concurrencyNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-destructive, non-idempotent, so the safety profile is covered; the description adds genuinely new behavioral context by establishing that creation yields an inert draft and that outbound activity requires a separate launch. It does not disclose validation behavior, whether creation can fail on number/consent mismatches, or permission requirements, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the critical launch caveat are front-loaded, and the whole definition is two sentences with no filler. The middle sentence is a long comma-run list that is dense to parse but each element carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a 7-required-parameter mutation with nested objects, 22% schema coverage and no output schema, the description covers the conceptual surface but leaves real gaps: it never says what is returned (presumably a campaign id needed for launch_campaign) or how concurrency/reserved_concurrency and time_zone_mode interact. Adequate to attempt a call, not complete enough to call confidently without opening the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

With only 22% schema coverage across 18 parameters and nested objects, the description usefully names the major configuration groups and spells out the consent_basis values and the three retry_policy presets. However, it says nothing about the distinction between max_concurrency and reserved_concurrency, time_zone_mode, language, ends_at, organization_id scoping, or the shape of retry_policy — leaving several parameters undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description opens with a specific verb+resource+state ('Create a draft outbound campaign') and then enumerates exactly what the draft configures: agent, caller-id numbers, contact list, purpose, consent basis, calling windows, retry policy, concurrency, schedule. This is clearly distinct from launch_campaign, update_campaign, and get_campaign in the sibling set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

It explicitly states the lifecycle boundary: the campaign does not run until 'launched with launch_campaign,' which routes the agent to the correct follow-up tool. It gives no guidance on when to prefer update_campaign for an existing campaign or on prerequisite policy checks (evaluate_outbound_policy / authorize_outbound), so it stops short of full alternative coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_contact_listCreate a contact listAInspect

Create a contact list in the workspace, optionally with rows (phone_e164, name, first_name, language, time_zone, external_reference, variables). Returns a per-row import report; invalid rows are reported, never fail the list.

NameRequiredDescriptionDefault
nameYes
sourceNo
contactsNo
project_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=false, idempotent=false and openWorld=false, so the safety profile is covered. The description adds genuinely useful non-obvious behavior: a partial-failure model where invalid rows are reported in a per-row import report and 'never fail the list.' It omits auth/permission requirements, but the partial-import contract is the most valuable fact here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, no filler, with the core action and the optional payload front-loaded and the return/error behavior trailing. Efficient, though the parenthetical field list is dense filler that the schema already carries.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

For a 5-parameter creation tool with no output schema, the description covers what an agent most needs: it creates a list, rows are optional, and the return is a per-row import report. Gaps remain around duplicate/already-existing list behavior, project_id meaning, and list-size limits, but the essential calling contract is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is only 20%, so the description must carry weight. It enumerates the contact fields (phone_e164, name, first_name, language, time_zone, external_reference, variables), which largely restates the nested schema, and it omits consent_basis, the source enum, the 10,000-row cap and the 28-variable limit. It adds some mapping value but does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource ('Create a contact list in the workspace') plus the optional payload ('optionally with rows'), so the agent knows exactly what is produced. It does not, however, distinguish itself from the sibling add_contacts, which an agent could easily confuse with row insertion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is only implied: the phrase 'optionally with rows' hints that this tool can create an empty list that contacts are later added to, but the description never states when to pick this over add_contacts or when a list already exists. No exclusions or alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_forwarding_setupCreate forwarding setupCInspect

Manage an existing-number forwarding setup through the canonical service. No carrier settings change, number purchase or phone call occurs. Test verification requires linked call evidence.

NameRequiredDescriptionDefault
stepNo
agent_idNo
line_typeNo
number_idNo
conditionsNoalways is exclusive with conditional forwarding.
project_idNo
provider_keyNo
source_numberNoExisting business E.164 voice number; empty only for an unfinished draft. Ownership is not inferred.
idempotency_keyYes
attention_emails_enabledNoOpt in verified workspace owners to route/AI-line attention emails. Does not verify or enable carrier forwarding.

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is partially covered. The description genuinely adds beyond them by stating what does NOT happen (no carrier settings change, no number purchase, no phone call), which is useful scope-limiting context for a write tool. It still omits permissions/auth needs, what is actually created, and the multi-step workflow implied by the `step` enum.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler, and the negative-scope statement is placed early. The wording is tight, though the leading "Manage" verb creates ambiguity rather than earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a 10-parameter mutation tool with no output schema and only 30% schema coverage, the description leaves major gaps: the step-based workflow, the required idempotency key, what the call returns, and whether the setup must be completed across multiple invocations. What is present is accurate but far from sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Only 30% of the 10 parameters carry schema descriptions, so the description is expected to compensate and it does not — no parameter is mentioned by name. Critical semantics such as the required `idempotency_key`, the `step` lifecycle, and the relationship between `source_number`, `number_id`, and `project_id` are left entirely to the sparse schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

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

"Manage an existing-number forwarding setup" identifies the resource (existing-number forwarding) and scopes it away from carrier/number-purchase actions, but the verb "Manage" conflicts with the tool name "create" and with the existence of a sibling `update_forwarding_setup`. An agent cannot tell from the description whether this creates a new setup or mutates an existing one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no when-to-use guidance, no routing to `update_forwarding_setup`, `get_forwarding_setup`, `start_forwarding_test`, or `record_forwarding_instructions`, and no explanation of when the `step` values (setup/line/connect/test/manage) should be used. The only conditional hint is "Test verification requires linked call evidence," which is too fragmentary to guide invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_outbound_callPlace an outbound callB
Destructive
Inspect

Create an outbound call request. A workspace that holds a number calls out with no approval step. purpose and user_authorization are optional and recorded when sent (see the purpose property description for the advisory catalog); recipient_type is optional and recorded, never enforced; destination country is authorized against the org's workspace capabilities.

NameRequiredDescriptionDefault
toYes
policyNo
purposeNoOptional, free-form outbound purpose, recorded when sent; no purpose or token is ever refused. The documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support.
agent_idNo
categoriesNo
project_idYes
campaign_idNo
relationshipNo
from_number_idYes
recipient_typeNoOptional, never enforced or required -- outbound is not restricted to business recipients. Persisted verbatim on the call row if sent; SMS has no recipient_type column, so it is accepted but not stored there.
runtime_configNo
user_requestedNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
agent_endpoint_idNo
user_authorizationNo

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare destructive, open-world, and non-idempotent behavior, so the description is credited for adding semantics beyond that: fields are 'recorded, never enforced,' no approval gate exists, and destination country is checked against workspace capabilities. It still omits practical consequences such as whether the call is actually dialed immediately or cost/quota implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded paragraph that leads with the action and then layers scoping facts. It is dense but every clause carries information; the parenthetical pointer to the purpose property is slightly redundant given the schema already holds the catalog.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a 15-parameter destructive mutation with nested runtime_config and no output schema, the description leaves too much unexplained – most parameters, the distinction from trial calls, and what the returned call object will contain. The behavioral notes it does include are useful, but they don't cover the tool's full complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 20% across 15 parameters, so the description must compensate and largely does not. It clarifies purpose, user_authorization, and recipient_type (and the purpose catalog actually lives in the schema, not here), but says nothing about to, policy, agent_id, categories, campaign_id, relationship, runtime_config, user_requested, organization_id, or agent_endpoint_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description opens with a specific verb and resource ('Create an outbound call request') and adds scope ('A workspace that holds a number calls out'), which separates it from read/lookup siblings. It does not explicitly name adjacent siblings like create_trial_call, authorize_outbound, or evaluate_outbound_policy, though the 'no approval step' line implicitly distances it from the authorization tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is only implied: 'no approval step' hints that authorization isn't required first, and the country-capability line hints at a prerequisite check. There is no explicit statement of when to choose this over create_trial_call, authorize_outbound, or evaluate_outbound_policy, so the agent must infer routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_pbx_keyCreate a PBX connection keyAInspect

Create an independently revocable named PBX key. Returns its password once; store it securely.

NameRequiredDescriptionDefault
nameYes
agent_idYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds a genuinely non-obvious behavioral fact beyond the annotations — the password is returned only once and is unrecoverable afterward — which is exactly the kind of disclosure that prevents agent misuse. It omits any note that repeat calls create duplicate keys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the effect of the call front-loaded before the storage warning. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

The lack of an output schema is mostly compensated by explaining the one-time password return. But with no annotations covering inputs and 0% schema coverage on two required parameters, the description leaves the agent_id semantics and duplicate-creation behavior unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden, yet it only hints at `name` ('named PBX key') and says nothing at all about `agent_id` — the more consequential parameter, whose accepted format and scope are entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource (create a PBX key) plus a meaningful qualifier, 'independently revocable named'. It is distinguishable from sibling list_pbx_keys/revoke_pbx_key/rotate_pbx_key, though the description never explicitly names those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The phrase 'independently revocable' implicitly hints at when to use this versus rotate_pbx_key or revoke_pbx_key, but there is no explicit when-to-use, when-not, or prerequisite guidance (e.g. that agent_id must reference an existing agent).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_phone_serverCreate a phone serverBInspect

Create a customer phone server for self-hosted media/calling. test_phone_server dry-run verifies it.

NameRequiredDescriptionDefault
nameNo
portNo
transportNo
project_idNo
server_addressYes
allowed_sip_ipsNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the agent knows this is a non-idempotent write that won't destroy data. The description adds meaningful context by pointing to the dry-run verification tool, but says nothing about permissions, side effects of provisioning a server, or failure modes — gaps that matter for a multi-param mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the core action is stated first with the verification hint following. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a 7-parameter, non-idempotent creation tool with no output schema and near-zero schema descriptions, the description does far too little — it never explains required configuration, what a created server looks like, or how failures surface. The only compensating element is the dry-run pointer, which is not enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 14%: of seven parameters, only organization_id carries a description, and the description text explains none of them. Critical fields like server_address (required), port, transport, and allowed_sip_ips are left entirely for the agent to infer, which is a real gap for a provisioning tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource ('Create a customer phone server') with a scoping qualifier ('for self-hosted media/calling') that tells the agent this provisions infrastructure, not a call or campaign. It also names the related sibling test_phone_server, though it doesn't distinguish itself from the many other create_* tools beyond the resource noun.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The clause 'test_phone_server dry-run verifies it' implies a recommended workflow of validating before creating, which is useful. However, there is no explicit statement of when to use this tool versus alternatives, no prerequisites (e.g. required project or org context), and no when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_simulation_suiteCreate a simulation suiteAInspect

Create a simulation suite on an AI agent, optionally with its whole scenario list in one call -- this is how a scenario pack becomes a suite. Each scenario names its own runner: deterministic and adaptive_chat run offline, adaptive_voice runs the full spoken scenario and is admitted only where the voice runtime is on. An adaptive_voice scenario may pin caller_environment as synthetic caller-input noise with noise_level; it is not the agent's outgoing ambience/volume setting.

NameRequiredDescriptionDefault
nameYes
policyNo
agent_idYes
scenariosNoThe whole pack in one call. Each entry needs an `id` and may carry `name`, `description`, `runner`, `language`, `attempts`, `critical`, `persona`, `turns`, `tool_mocks`, `expected`, `rubrics` and, for adaptive_voice, `caller_environment` (which requires the adaptive_voice runner and an explicit non-blank `language`, never an English fallback). Unknown keys are dropped rather than stored.
descriptionNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
default_snapshot_sourceNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only declare the mutation profile (readOnly false, destructive false, idempotent false, openWorld false); the description goes beyond that by explaining runner behavior (deterministic/adaptive_chat run offline, adaptive_voice requires the voice runtime), admission conditions, and a semantic distinction for caller_environment versus agent ambience. This is meaningful context a caller would not get 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first clause, and the remaining sentences each add distinct operational detail (runner admission, caller_environment semantics). Dense but every sentence earns its place, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a mutating tool with 7 parameters, nested objects, and no output schema, the description covers the scenario/runner and caller_environment territory well but omits guidance on other top-level inputs such as policy, default_snapshot_source, organization_id, and what the call returns. It is adequate but leaves clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is low (29%), so the description must carry weight. It adds valuable semantics for the `scenarios` array (runner, language requirements for adaptive_voice) and for caller_environment/noise_level, but leaves several top-level parameters (name, policy, description, organization_id, default_snapshot_source) unexplained, so compensation is only partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb (create) and resource (simulation suite) scoped to an AI agent, and clarifies the distinctive behavior that a whole scenario list can be submitted in one call, i.e. 'this is how a scenario pack becomes a suite.' It does not explicitly name the sibling read tools (get_simulation_suite, list_simulation_suites), but the create semantics are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is implied via 'this is how a scenario pack becomes a suite' and the runner admission rules, which tell the caller when a given runner is valid. However, it never explicitly states when to choose this tool over alternatives like preview_simulation_run or start_simulation_run, so the agent must infer the routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_trial_callCreate a synthetic trial callAInspect

Create an offline synthetic trial call fixture (synthetic_only must be true). It places no phone call; live shared-number PIN trials are retired.

NameRequiredDescriptionDefault
pinNo
agent_idNo
project_idYes
synthetic_onlyYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
agent_endpoint_idNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare it is a non-readOnly, non-destructive, non-openWorld operation. The description adds meaningful context beyond those hints: no actual phone call is placed, the operation is synthetic/offline, and the live trial path is retired, which helps set expectations about side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and the most important constraint (synthetic_only must be true). Every clause earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a mutation tool with six parameters, low schema description coverage, and no output schema, the description does not provide enough parameter guidance or alternative-tool routing. It explains what the tool does well, but an agent still lacks the detail needed to confidently populate the non-obvious optional fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 17%, so the description should compensate for undocumented parameters, but it only mentions synthetic_only (already enforced as a const in the schema) and says nothing about pin, agent_id, project_id, or agent_endpoint_id. It leaves most parameter meaning to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (Create) and a tightly scoped resource (offline synthetic trial call fixture), and immediately distinguishes itself from live call creation by noting it places no phone call and that live shared-number PIN trials are retired. An agent can tell this apart from create_outbound_call 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.

Usage Guidelines4/5

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

Gives clear context for use: synthetic_only must be true, the fixture is offline, and it places no phone call. It also implicitly excludes live PIN trial usage by saying those are retired, but it does not explicitly name alternatives such as create_outbound_call or simulation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_wallet_topupBuy Skysay calling creditA
DestructiveIdempotent
Inspect

Request purchased Skysay calling credit for the authenticated workspace. Read the wallet currency with account_overview. Obtain the owner's explicit approval of the exact amount, currency and purpose before setting payment_approved; OAuth scope consent approves no purchase. card_checkout returns a direct Stripe hosted-checkout URL, without a Skysay dashboard visit. A compatible host/wallet may supply an owner-approved seller/amount/currency-bound shared_payment_token. request_challenge returns approval metadata only; it is not native payment UI or MCP elicitation. Never request card numbers, CVC, passwords or OTPs in chat. Pending checkout/payment is not credit; only the signed Stripe webhook credits purchased funds. Retry uncertain outcomes with the same key and parameters. Native/default-card support depends on the host and merchant configuration.

NameRequiredDescriptionDefault
methodYes
currencyYesExact owner-approved currency; must match the workspace wallet reported by account_overview.
amount_minorYesTop-up in the wallet currency's minor units; current server top-up bounds apply.
idempotency_keyYesOpaque key unique to this purchase. Retry the same key and parameters after uncertain outcomes; never include payment credentials.
payment_approvedNoTrue only after the owner explicitly approves this amount and currency for purchased Skysay calling credit. Scope consent is not purchase approval. Optional while requesting SPT approval metadata.
request_challengeNoFor SPT, return 402 with amount/currency/Stripe seller profile for a compatible wallet to request owner approval. This is JSON metadata, not MPP, native checkout or MCP elicitation.
shared_payment_tokenNoGranted spt_ token approved by the owner for this seller and amount. Omit when requesting the challenge. Never submit card numbers.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already flag destructive=true and idempotent=true, so the safety profile is partly covered, but the description adds substantial non-obvious context: never request card numbers/CVC/passwords/OTPs, pending checkout is not credit, only the signed Stripe webhook credits funds, retry with the same key, and native card support is host-dependent. 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and most sentences carry behavioral or security value, but the text is dense and repetitive: the 'not native UI/MCP elicitation' point is made twice, and several statements restate schema descriptions. Tighter editing would preserve the content in fewer sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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

There is no output schema, so the description must carry return semantics, and it does: card_checkout returns a Stripe hosted-checkout URL, request_challenge returns approval metadata, and the 402 payload carries amount/currency/seller profile. For a payment mutation with annotations, nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

With 86% schema coverage the baseline is 3, but the description goes beyond the per-field schema text by explaining cross-parameter workflow: when payment_approved is legitimate, when to omit shared_payment_token and use request_challenge, and that request_challenge returns 402 metadata rather than elicitation. This adds genuine inter-parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The opening sentence states a specific verb and resource ('Request purchased Skysay calling credit for the authenticated workspace') and the title reinforces it. No sibling tool covers wallet top-ups, so there is no ambiguity to resolve, and the description names account_overview as the prerequisite read.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

It explicitly says to read the wallet currency via account_overview first, that owner approval of the exact amount/currency/purpose must precede payment_approved, and that OAuth scope consent is not purchase approval. It also distinguishes the two methods (card_checkout vs shared_payment_token) with the conditions for each.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_agentDelete an AI agentA
DestructiveIdempotent
Inspect

Permanently remove one unused AI agent from active configuration. Refuses numbers, routes or unfinished work. Retains historical calls, transcripts and billing; does not cancel numbers or modify sibling AI agents. Ask the user to confirm before calling.

NameRequiredDescriptionDefault
agent_idYes

TDQS

A4.7/5.0
Behavior5/5

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

While annotations mark the operation as destructive, the description adds significant behavioral depth by detailing the side effects: it retains historical calls, transcripts, and billing, and explicitly avoids canceling numbers or modifying sibling agents. This provides essential context beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is highly efficient. It front-loads the primary function and quickly follows up with critical context (what is retained, what is excluded), ensuring no sentence is unnecessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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

Given the single-parameter input and the destructive nature of the task, the description is complete. It covers the scope of deletion, necessary user interaction, and the resulting state of the surrounding system components.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

The schema coverage is 0%, meaning the description must compensate for the input parameter definition. However, the description does not provide any semantic meaning or constraints for the required 'agent_id' parameter, so it stays at the minimum viable score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly and specifically states the tool's purpose: 'Permanently remove one unused AI agent.' It also defines the boundaries of the operation by stating what it does not affect, helping distinguish it from other agent management tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

The description provides crucial usage guidance by setting preconditions and workflow constraints. It specifies that the agent must be 'unused,' and explicitly instructs the agent to 'Ask the user to confirm before calling,' preventing accidental destructive action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_campaignDelete campaignA
Destructive
Inspect

Delete a draft, held, blocked, completed or cancelled campaign: it leaves the campaign listings; its calls, recordings, transcripts and billing records are kept. A launching, scheduled, running or paused campaign must be cancelled first (409 campaign_active); a repeat answers 404. Ask the user to confirm before calling.

NameRequiredDescriptionDefault
campaign_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description adds substantive context beyond them: what is removed (campaign leaves listings) versus retained (calls, recordings, transcripts, billing records), the 409 conflict, and the 404 on retry. This is exactly the retention-vs-destruction detail an agent needs before a destructive call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with the eligible states, then side effects, then error semantics and the confirmation prompt. No redundant restatement of the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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

No output schema exists, yet the description covers side effects, retention, failure modes (409/404), and the human-in-the-loop requirement. For a two-parameter destructive tool this leaves nothing material unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is only 50%: organization_id is documented in the schema, but campaign_id carries no description. The description implies campaign_id is the identifier of a deletable campaign but adds no format or lookup guidance, so it neither compensates for nor worsens the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (delete) and resource (campaign), and goes further by enumerating the eligible statuses (draft, held, blocked, completed, cancelled). An agent can distinguish this from cancel_campaign because the description explicitly routes active campaigns there.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Gives the exact precondition for use (campaign must be in a deletable state), names the alternative path (cancel first for launching/scheduled/running/paused), states the error on violation (409 campaign_active), and prescribes asking the user to confirm. Near-complete routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_simulation_suiteDelete an unused simulation suiteA
Destructive
Inspect

Permanently delete a simulation suite that has never had a run. Requires its current revision. Suites with run history must be archived through the suite API instead.

NameRequiredDescriptionDefault
agent_idYes
revisionYes
suite_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A4.6/5.0
Behavior5/5

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

The destructive annotation is already present, and the description adds important context: deletion is permanent, it requires the current revision, and suites with run history must not use this path. This adds real behavioral substance 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying necessary information, with the destructive precondition and alternative path front-loaded. There is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

For a destructive tool with no output schema, the description covers the key preconditions and the alternative path well. It does not mention the optional organization_id behavior, but the schema already documents that parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is low at 25%, and the description only clarifies that the revision must be current. It does not explain agent_id or suite_id, though those are fairly self-evident from the resource and required fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description states a specific verb and resource: permanently delete a simulation suite. It also scopes the action to suites that have never had a run, distinguishing it from archival or general suite operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

It gives an explicit when-to-use condition (suite has never had a run) and a when-not-to-use condition (suites with run history must be archived through the suite API instead). This is exactly the routing guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicate_agentDuplicate an AI agentA
Idempotent
Inspect

Create an independent stopped copy of the latest saved authoring configuration, without publication or execution history. Reuse request_key and name after an uncertain result. Connection secrets are available only through the workspace or authenticated REST response, never this tool.

NameRequiredDescriptionDefault
nameYes
agent_idYes
request_keyYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare a non-read-only, idempotent, non-destructive mutation, so the bar is lower; the description adds meaningful context by specifying that the copy is 'stopped', omits publication/execution history, and will not expose connection secrets. This goes beyond the annotations, though it does not mention permission requirements or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero filler: purpose first, then retry guidance, then the secrets caveat. The most important 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.

Completeness4/5

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

For a mutation tool with annotations and no output schema, the description covers the operation's effect (stopped copy, no history), idempotent retry, and what is not returned. It is close to complete, with the only gap being the unexplained agent_id parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the parameter burden. It mentions request_key and name only in passing (reuse after an uncertain result) and never explains agent_id or any format, length, or constraint details, leaving most parameter semantics undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description gives a specific verb and resource ('Create an independent stopped copy of the latest saved authoring configuration') and distinguishes it from create_agent by specifying that the copy excludes publication and execution history. An agent can tell this apart from 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.

Usage Guidelines3/5

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

It provides a concrete retry guideline ('Reuse request_key and name after an uncertain result'), which is useful for idempotent recovery. However, it never states when to choose duplicate_agent over create_agent or update_agent, and gives no exclusions or prerequisites beyond the retry hint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evaluate_outbound_policyEvaluate outbound policyA
Read-onlyIdempotent
Inspect

Evaluate outbound voice/SMS policy before creating a call: suspensions, caller-number registration and the destination format. purpose, recipient_type and user_authorization are optional and recorded, never judged. Destination country is governed by the org's workspace capabilities, not by this evaluation.

NameRequiredDescriptionDefault
toYes
policyNo
countryYesDestination country. Governed by the org's active workspace capabilities at authorize_outbound time, not by this policy evaluation.
purposeNoOptional, free-form outbound purpose, recorded when sent; no purpose or token is ever refused. The documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support.
categoriesNo
from_number_idYes
recipient_typeNoOptional, never enforced or required -- outbound is not restricted to business recipients. Persisted verbatim on the call row if sent; SMS has no recipient_type column, so it is accepted but not stored there.
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
user_authorizationNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive and closed-world, so safety is covered; the description adds real value beyond that by disclosing what is and isn't judged — purpose, recipient_type and user_authorization are merely recorded, never asserted against. This prevents an agent from treating a rejected result as a judgment on those fields. It still does not describe the shape or verdict semantics of the evaluation response, which matters for a check-only tool with no 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no filler, and the most decision-relevant clause (what is checked, and that it must happen before call creation) is front-loaded. The final sentence about country reads as a deliberate scoping carve-out rather than padding, though it partially duplicates the country parameter's own schema description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

With 9 parameters, a nested object, no output schema and only 44% schema coverage, the description carries substantial burden and covers the optional fields well. It leaves the `policy` object and `categories` undocumented and never indicates what the evaluation returns or what an agent should do with a failing verdict, which are material gaps for a pre-flight gate tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 44%, so the description needs to compensate, and it does explain the optional/never-enforced semantics of purpose, recipient_type and user_authorization plus the country boundary — meaningful meaning beyond the schema. However, `policy` (a nested object) and `categories` are left entirely unexplained in both schema and description, and `to` format is only alluded to via 'destination format'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

Names a specific verb and resource (evaluate outbound voice/SMS policy) and enumerates the concrete checks performed: suspensions, caller-number registration, destination format. The temporal anchor 'before creating a call' places it in the outbound workflow, though it never names the adjacent siblings authorize_outbound or create_outbound_call, so the agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives a clear use condition ('before creating a call') and an explicit exclusion ('destination country is governed by the org's workspace capabilities, not by this evaluation'), which prevents the agent from expecting this tool to gate country eligibility. It stops short of naming which sibling to call instead for country gating, so the alternative is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_agentGet an AI agentC
Read-onlyIdempotent
Inspect

Get one authenticated-workspace agent using the same safe REST agent projection.

NameRequiredDescriptionDefault
agent_idYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description's only added claims are 'authenticated-workspace' scoping and 'same safe REST agent projection', which are vague jargon that disclose nothing concrete (no error/not-found behavior, no consistency guarantees clarified).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the verb+resource front-loaded, so it is not bloated. The trailing clause 'using the same safe REST agent projection' is cryptic filler that does not earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

With no output schema and no schema parameter descriptions, the definition should explain what an 'agent' record contains and how to supply agent_id. Neither is present, so an agent cannot confidently invoke or interpret this call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

There is one required parameter with 0% schema description coverage, so the description carries the full burden. It says nothing about agent_id's format, provenance, or where the caller obtains a valid value, leaving the single parameter effectively undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

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

States a specific verb ('Get') and resource ('agent') with a singular scope ('one'), which distinguishes it from list_agents. However, the qualifier 'the same safe REST agent projection' refers to an antecedent not present in this description and does not clarify the purpose, nor does it separate this tool from get_agent_variables, get_agent_voice_stack, or get_agent_catalog.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No when-to-use guidance is given. The description never explains when to call get_agent versus list_agents, get_agent_catalog, or the more specific get_agent_variables/get_agent_voice_stack siblings. The agent must infer routing entirely from names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_agent_catalogList voice-stack providersA
Read-onlyIdempotent
Inspect

List selectable STT/LLM/TTS voice-stack providers with cost, latency, languages, streaming, and runnability, plus conversation_engines (cascade default, gpt_live, gemini_live), each row carrying has_language_axis: false for a voice-to-voice engine that has no language set, per-language overrides or Follow the caller. Requires agents:read or coverage:read. Filter by component, language (e.g. language=et surfaces the single Estonian TTS; language=si surfaces the single Sinhala STT/TTS pair), and metered_only.

NameRequiredDescriptionDefault
languageNo
componentNo
metered_onlyNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the lower bar applies, yet the description still adds required permissions (agents:read or coverage:read) and describes the returned data shape (cost, latency, languages, streaming, runnability, conversation_engines). The only gap is pagination/size behavior in a presumably large catalog.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead sentence front-loads the purpose and filters, but the middle clause about has_language_axis, per-language overrides, and 'Follow the caller' is dense and hard to parse. Structure is otherwise linear and mostly waste-free.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

With no output schema, the description compensates by enumerating return fields, conversation_engines values, and auth requirements for a moderately complex catalog tool. The awkward has_language_axis passage leaves some ambiguity about the per-language override rows, but nothing critical to invoking the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 0%, so the description carries the burden, and it delivers: it names component, language with two worked examples showing filter semantics, and metered_only. It does not fully explain what metered_only excludes or the accepted form of component beyond the enum, but the semantics are largely covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb ('List') and resource ('selectable STT/LLM/TTS voice-stack providers') and enumerates the returned attributes (cost, latency, languages, streaming, runnability) plus conversation_engines. This distinguishes it clearly from siblings such as get_agent_voice_stack (a specific agent's stack) and get_capabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

It states an auth prerequisite and gives concrete filter usage examples (language=et, language=si), which implies the discovery use case. However, it never explicitly says when to reach for this catalog versus get_agent_voice_stack or list_audio_environments, so alternative selection 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.

get_agent_variablesGet an AI agent's call variablesA
Read-onlyIdempotent
Inspect

Read an AI agent's call variables config (declared variables, SMS templates, SMS mode, caller lookup), with the revision a write must name and the schema_hash a call admitted now carries. The same answer as GET /v1/agents/{agent_id}/variables.

NameRequiredDescriptionDefault
agent_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered. The description adds genuine value beyond that: it discloses the returned contents and, importantly, that the payload carries the revision required by a write and the schema_hash a call admitted now carries. It omits auth or pagination details, preventing a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with verb and resource, with the field enumeration in a parenthetical and the endpoint equivalence at the end. Efficient, though the last sentence is a mapping convenience rather than essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

For a readOnly tool with no output schema and only two parameters, the description adequately explains what is returned and why the revision/schema_hash matter. An agent can call this correctly with the information given, though the revision semantics could be expanded.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 50%: organization_id is documented inline, agent_id is not. The description only reinforces agent_id via the GET path template and adds no syntax or format guidance. With the schema doing half the work, this is a baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb (Read) and resource (an AI agent's call variables config), then enumerates the contained fields: declared variables, SMS templates, SMS mode, caller lookup. This clearly separates it from get_agent and from the write counterpart. It stops short of naming sibling tools explicitly, so it falls just under a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is implied rather than stated: the mention of 'the revision a write must name' hints that this read feeds the set_agent_variables write, and the REST endpoint mapping grounds it. But there is no explicit 'use this when' or when-not guidance, so an agent must infer the workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_agent_voice_stackGet an agent's voice stackB
Read-onlyIdempotent
Inspect

Get one authenticated-workspace agent's selected stack and sparse language profiles using the REST voice-stack projection.

NameRequiredDescriptionDefault
agent_idYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered. The description adds two useful behavioral facts: results are scoped to the authenticated workspace and the language profiles returned are 'sparse' (partial). It does not describe the response shape, but with no output schema that gap is minor for a simple getter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with the resource and scope front-loaded; no padding. The only minor weakness is the trailing 'REST voice-stack projection' jargon, which costs a small amount of clarity without adding actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a read-only single-parameter getter whose annotations already carry the safety profile, this is close to adequate. The 'sparse language profiles' phrase helps set return expectations, but with no output schema the description could say more about what a 'selected stack' contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 0% and the single agent_id parameter has no schema description. The phrase 'one authenticated-workspace agent's' implies a single specific agent identifier rather than a list, adding marginal meaning, but it does not clarify accepted ID format or source.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description names a specific verb and resource: 'Get one authenticated-workspace agent's selected stack and sparse language profiles.' This distinguishes it from set_agent_voice_stack (the mutating counterpart) and from get_agent. The trailing 'REST voice-stack projection' adds jargon that slightly clouds rather than clarifies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance, and no alternative tool is named. The use case (read an existing agent's voice configuration) is only implied by the verb and resource.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_callGet a callA
Read-onlyIdempotent
Inspect

Get call status, recording state, and where its conversation workflow ended (outcome, interrupts taken, settled).

NameRequiredDescriptionDefault
call_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description then adds behavior beyond that: it tells the agent what the payload actually conveys (status, recording state, workflow outcome, interrupts taken, settled), which matters because there is no output schema. It stops short of stating what happens when the call_id is unknown.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and the primary object, followed by a compact parenthetical of the returned facets. No filler, no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

With no output schema, the description carries the burden of explaining the response and does so reasonably by listing the fields the agent will receive. It does not mention error behavior for an invalid or expired call_id, which is the main remaining gap for a single-resource getter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 0%, so the schema contributes nothing beyond the name 'call_id'. The description also says nothing about the parameter. It is a single, self-evident identifier for the call being fetched, so the ambiguity is low, but the description does no work here — baseline 3 fits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

Names a specific verb (Get) and resource (call) and enumerates the facets returned: status, recording state, and workflow end state (outcome, interrupts, settled). This is clear, but it does not explicitly differentiate itself from siblings such as get_call_recording, get_call_transcript, or list_calls — 'recording state' in particular sits close to get_call_recording without saying which one to reach for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is only implied: a single call look-up keyed by call_id. There is no explicit 'use this when you have a call_id and need status' or 'use list_calls to enumerate calls' guidance despite several near-neighbor retrieval siblings. Minimum viable but leaves routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_call_recordingGet a call recordingB
Read-onlyIdempotent
Inspect

Get recording metadata and disclosure state.

NameRequiredDescriptionDefault
call_idYes

TDQS

B3/5.0
Behavior3/5

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 a small piece of behavioral context by noting 'disclosure state,' which hints at recording-consent output, but says nothing about what the metadata contains or whether a recording may be absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though its brevity is part of why coverage gaps remain rather than being a virtue in itself.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

With no output schema, the description should characterize the return value, and 'metadata and disclosure state' is a partial answer. For a single-ID read tool this is minimally adequate but leaves the agent guessing at payload structure and failure modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden for call_id and provides nothing — no format, no source, no relation to the call identifiers used by sibling tools. The parameter is a self-evident ID, which keeps this from being a 1, but the gap is real.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description names a specific verb and resource ('Get recording metadata and disclosure state'), which is concrete and more specific than the bare title. It does not, however, differentiate itself from adjacent siblings such as get_call, get_call_transcript, or get_call_translations, so an agent must infer which call artifact this returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus get_call, get_call_transcript, or list_calls. No prerequisites are stated, and no condition selects this tool over its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_call_summaryGet a call's AI summaryA
Read-onlyIdempotent
Inspect

Get the AI summary of a call, read with the transcript's scope: a 1-3 sentence summary, whether a follow-up is needed, whether the agent's goal was met (judged against its call goal, else its instructions) and the other party's sentiment. Every field is an AI estimate. status is ready, pending, failed, skipped (reason no_conversation or insufficient_transcript) or not_available.

NameRequiredDescriptionDefault
call_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive behavior, so the description can spend its length elsewhere and it does: it discloses that every field is an AI estimate (not ground truth) and enumerates the status values with their skip reasons (no_conversation, insufficient_transcript). It does not say what happens on a nonexistent call_id or whether results are cached or fresh.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences that are front-loaded with the core action, and the enumerated status values are compact rather than wasteful. The clause "read with the transcript's scope" is slightly opaque and taxes the reader a little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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

With no output schema, the description effectively documents the return shape: summary, follow-up flag, goal-met judgment, sentiment, and the full status enum with skip reasons. With annotations already covering the safety profile, an 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.

Parameters3/5

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

There is only one parameter, call_id, and schema coverage is 0%, so the description has to carry it. "Of a call" implies call_id identifies the call, but the description never states the expected format, where to obtain the ID, or what happens with an unknown ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

It gives a specific verb and resource ("Get the AI summary of a call") and enumerates the returned fields, so it is clearly distinct from get_call and get_call_transcript. It never names those siblings as alternatives, though, so the differentiation must be inferred from the field list rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is only implied: an agent can infer it should call this when it wants a condensed AI assessment instead of a raw transcript. There is no explicit "use this when…" guidance, no exclusions, and no mention of what to call for the full transcript or recording.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_call_transcriptGet a call transcriptB
Read-onlyIdempotent
Inspect

Get call transcript turns. events lists, with no text, each moment the other party spoke on a voice-to-voice call and the engine answered but gave no caption for it; an empty events never means the other party was silent.

NameRequiredDescriptionDefault
limitNo
cursorNo
call_idYes
translation_languageNo

TDQS

B3.1/5.0
Behavior4/5

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 bar is lower. The description adds genuine behavioral context about the `events` field and pre-empts a likely misinterpretation ('an empty events never means the other party was silent'), which is valuable for interpreting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences, front-loaded with the core action, and every clause does work. Nothing extraneous, though the second sentence is dense rather than clearly separated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

With no output schema, the description's explanation of `events` is useful, but with four parameters at 0% schema coverage it omits pagination and translation semantics entirely. For a paginated, translatable retrieval tool this leaves material gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% for all four parameters, so the description carries the full burden, yet it addresses none of them. It says nothing about call_id, the limit/cursor pagination pair, or translation_language, so an agent must guess at paging and translation behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb+resource ('Get call transcript turns'), which is concrete and unambiguous. However, it never distinguishes itself from close siblings such as get_call, get_call_recording, or get_call_translations, leaving the agent to infer which retrieval tool applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no explicit when-to-use guidance and no mention of alternatives among the many get_* siblings. The agent gets what the tool returns but not when to prefer it over get_call or get_call_translations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_call_translationsRead call translationsB
Read-onlyIdempotent
Inspect

Read cached machine translations for a call. No paid work is created.

NameRequiredDescriptionDefault
limitNo
cursorNo
call_idYes
target_languageNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, and non-destructive semantics, so the bar is lower. The description still adds real behavioral context beyond them: 'cached' signals it only returns existing translations and will not generate new ones, and 'No paid work is created' conveys a cost/authorization trait the annotations do not express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, and the core purpose plus the cost constraint are front-loaded. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a 4-parameter read tool with zero schema descriptions and no output schema, the definition is too thin. It never explains target_language filtering, pagination via limit/cursor, or what happens when no cached translation exists, so an agent lacks enough to invoke it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% and there are 4 parameters. The phrase 'for a call' loosely maps to call_id, but target_language, limit, and cursor are entirely unexplained in both the schema and the description, leaving key filtering and pagination semantics undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb and resource: 'Read cached machine translations for a call.' The phrases 'cached' and 'No paid work is created' implicitly distinguish it from the sibling request_call_translation tool, but no sibling is named explicitly, which keeps it 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.

Usage Guidelines3/5

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

'No paid work is created' hints at when to prefer this over a generation/request tool, but the description never explicitly names the alternative or states the condition (e.g., 'use request_call_translation if no cached translation exists'). Usage is implied, not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_campaignGet a campaignB
Read-onlyIdempotent
Inspect

Read one campaign with its latest run and contact counters.

NameRequiredDescriptionDefault
campaign_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so safety is covered without the description. The description does add return-shape context ('latest run and contact counters'), but says nothing about not-found behavior, workspace scoping failure modes, or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence, front-loaded with the verb and the record scope, with no filler. It is efficient, though the brevity is partly what leaves the guidance gaps above.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a simple read tool with strong annotations and no output schema, the description usefully hints at the return contents. It is still thin on the one undocumented parameter and on error/empty-result behavior, which an agent fetching by id would want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 50%: organization_id is documented in the schema, but campaign_id carries no description anywhere. The description never clarifies that campaign_id is the lookup key or what form it takes, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb ('Read') and resource ('one campaign') and even scopes the payload to a single record with its latest run and counters. It does not, however, name or contrast itself with list_campaigns, the obvious sibling an agent might confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of how to obtain a campaign_id, and no pointer to list_campaigns for discovery or to launch_campaign/update_campaign for lifecycle actions. Usage is only inferred from the word 'one'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_capabilitiesGet workspace capabilitiesB
Read-onlyIdempotent
Inspect

Return the workspace's capabilities record, the available use-case profiles, and live usage vs caps.

NameRequiredDescriptionDefault
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

B3.2/5.0
Behavior3/5

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 fully covered. The description's only added behavioral note is that the payload includes live usage measured against caps, which is useful but thin 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no wasted words, and the primary return (the capabilities record) is front-loaded ahead of the supporting payloads. It is efficient, though it stops short of the optimal front-loading that would name scope or role up front.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

With no output schema, the description carries the burden of describing returns, and it does list the three major payload groups. It stops short of describing the shape of the capabilities record or the usage-vs-caps structure, but it is adequate for a single-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

There is a single optional parameter and schema description coverage is 100%, so the schema already explains the organization_id default and constraint. The description adds nothing about the parameter, which is the expected baseline here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb+resource (return the workspace capabilities record) and enumerates the payload: use-case profiles and live usage vs caps. This is clear, but it does not distinguish itself from siblings such as request_capabilities or get_coverage, leaving ambiguity about which to select.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The presence of request_capabilities and get_coverage in the sibling list makes the absence of routing guidance a real gap, not a minor one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_contact_listGet a contact listA
Read-onlyIdempotent
Inspect

Read one contact list of the workspace by id (the REST contact-list record, with row_count). Use list_contacts to read its rows.

NameRequiredDescriptionDefault
contact_list_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior, so the safety profile is covered. The description adds useful substance beyond that by naming the payload (REST record plus row_count), which partially compensates for the missing output schema; it still says nothing about not-found/error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the core purpose front-loaded and the disambiguation pointer second. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

For a two-parameter read tool with no output schema, the description covers purpose, the reference-by-id model, and a partial view of the return shape. What remains thin is the meaning of contact_list_id and any error/not-found semantics, but an agent has enough to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 50%: organization_id is documented in the schema but contact_list_id is not. The phrase 'by id' hints at the required identifier but adds no format, source, or constraint detail beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description states a precise verb (read), resource (one contact list), and scope (of the workspace, by id), which cleanly separates it from the sibling list_contact_lists. It also clarifies the record is the REST contact-list record including row_count, so an agent knows exactly which object it gets back.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

It explicitly routes the row-reading use case to a named alternative (list_contacts), which is genuine when-to-use guidance. It does not explicitly contrast with list_contact_lists, though 'one ... by id' implicitly implies that distinction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_coverageGet country coverageB
Read-onlyIdempotent
Inspect

List supported countries with voice, SMS, registration, and onboarding speed.

NameRequiredDescriptionDefault
countriesNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds value by naming the returned coverage dimensions, but says nothing about pagination, filtering behavior, or result size, which is modest additional context given the low-complexity read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the resource and returned fields come first. It is appropriately terse for a simple lookup tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a low-complexity read-only listing with no output schema, the description conveys the core purpose and return dimensions. The gap is the unexplained 'countries' parameter, which leaves the agent guessing about filtering behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% and the single 'countries' parameter is undocumented in both schema and description. The description does not explain whether passing countries filters the list, is required to scope results, or what string format is expected, so the key semantic is missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb (List) and resource (supported countries) and enumerates the data dimensions returned (voice, SMS, registration, onboarding speed). It is clear what the tool does, though it does not explicitly differentiate itself from overlapping siblings such as get_capabilities or get_number_catalog.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance and no mention of alternatives, despite several catalog-style siblings that could overlap. The agent must infer the selection criteria entirely on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_forwarding_instructionsGet forwarding instructionsC
Read-onlyIdempotent
Inspect

Manage an existing-number forwarding setup through the canonical service. No carrier settings change, number purchase or phone call occurs. Test verification requires linked call evidence.

NameRequiredDescriptionDefault
setup_idYes
project_idNo

TDQS

C2.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=false, so the safety profile is covered. The description adds some non-obvious scope constraints (no carrier settings change, no number purchase, no phone call), which is useful, but "Test verification requires linked call evidence" is cryptic and unexplained, and no auth or return behavior is described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler, but they are not front-loaded around what the tool does. The final sentence about "linked call evidence" is an opaque fragment that costs space without adding usable guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

There is no output schema and the description does not say what "instructions" contain, which is the core thing an agent needs for a retrieval tool. With both parameters undocumented in the schema and an unexplained test-verification clause, the definition leaves key behavior unaddressed despite the tool's modest complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% for both setup_id and project_id, so the description carries the full burden and fails: neither parameter is mentioned. Only the phrase "existing-number forwarding setup" loosely hints at setup_id, leaving project_id entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

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

The name promises a retrieval ("get"), but the description opens with the verb "Manage," which is vague and conflicts with the read-only framing. It never says what "forwarding instructions" actually are or what the tool returns, so an agent cannot distinguish it from get_forwarding_setup, update_forwarding_setup, or record_forwarding_instructions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no statement of when to call this versus the many forwarding siblings (get_forwarding_setup, update_forwarding_setup, start_forwarding_test, record_forwarding_instructions). The sentences describe what does NOT happen rather than when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_forwarding_setupGet forwarding setupC
Read-onlyIdempotent
Inspect

Manage an existing-number forwarding setup through the canonical service. No carrier settings change, number purchase or phone call occurs. Test verification requires linked call evidence.

NameRequiredDescriptionDefault
setup_idYes
project_idNo

TDQS

C2.3/5.0
Behavior3/5

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 does add non-obvious context — no carrier settings change, no number purchase, no phone call occurs — which reassures an agent this call is side-effect free. However, "Test verification requires linked call evidence" is unexplained jargon and the description says nothing about what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

At three short sentences it is not bloated, but the opening verb is misleading and the closing sentence about test verification is vague enough to be wasted space. The most useful content (no side effects) is buried in the middle rather than front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a single-resource read with no output schema and no documented parameters, the description should at minimum say what is returned and what setup_id refers to. Neither is present, and the "Manage" framing leaves the agent unsure whether this tool mutates or reads.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% for two parameters, so the description carries the full burden and largely fails it. The phrase "existing-number forwarding setup" faintly implies setup_id identifies an existing setup, but project_id is never mentioned and no format, scope, or lookup semantics are given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

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

The verb chosen is "Manage," which does not describe retrieval and actively obscures that this is a read of a single setup. The resource is identifiable ("existing-number forwarding setup"), but nothing distinguishes it from siblings such as list_forwarding_setups, get_forwarding_test, or update_forwarding_setup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no statement of when to call this versus list_forwarding_setups (all setups) or get_forwarding_test (test state), even though both are direct alternatives. The only conditional sentence ("Test verification requires linked call evidence") is a cryptic precondition rather than routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_forwarding_testGet forwarding testC
Read-onlyIdempotent
Inspect

Manage an existing-number forwarding setup through the canonical service. No carrier settings change, number purchase or phone call occurs. Test verification requires linked call evidence.

NameRequiredDescriptionDefault
setup_idYes
attempt_idYes
project_idNo

TDQS

C2.4/5.0
Behavior4/5

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

The annotations already establish read-only, idempotent, non-destructive behavior. The description usefully adds that no carrier settings change, number purchase, or phone call is triggered, and notes the linked-call-evidence requirement without contradicting those annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The three short sentences are economical, and the side-effect limitations are easy to scan. However, the opening uses its prime position on vague "Manage ... canonical service" wording rather than the actual retrieval operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a lookup with three undocumented parameters and no output schema, the definition leaves essential gaps: what test status or verification information is retrieved, how the required IDs relate, and how linked call evidence affects the result. The safety caveats are helpful but do not make selection and invocation sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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

With 0% schema description coverage, none of setup_id, attempt_id, or project_id is explained in the schema. The description does not compensate by mapping the IDs to a setup and test attempt, explaining where to obtain them, or clarifying how project_id scopes the lookup.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

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

The description scopes the domain to an existing-number forwarding setup, but "Manage" does not state that this tool retrieves a specific forwarding test attempt. It therefore fails to distinguish the operation clearly from get_forwarding_setup, start_forwarding_test, or update_forwarding_setup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no explicit guidance on when to use this lookup instead of start_forwarding_test, cancel_forwarding_test, or get_forwarding_setup. The linked-call-evidence statement hints at a verification prerequisite, but does not explain when to call this tool or what state the test must be in.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_message_translationsRead SMS translationsA
Read-onlyIdempotent
Inspect

Read cached machine translations for an SMS. No paid work is created.

NameRequiredDescriptionDefault
message_idYes
target_languageNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds two things annotations do not: results come from a cache (potentially stale or incomplete), and no billing/paid work is incurred. That billing and caching context is genuinely useful for an agent deciding whether to call it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, with the core action front-loaded and the cost guarantee immediately after. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a simple read tool with strong annotations and no output schema, the description covers purpose and cost behavior adequately. It is incomplete on the input side, though: target_language's optionality and effect are undocumented in both schema and description, leaving meaningful ambiguity about what a call returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% for two parameters, so the description carries the full burden and does not meet it. It never explains what message_id identifies or what target_language does, nor whether omitting target_language returns all available languages or a default. No syntax or format hints are given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

'Read cached machine translations for an SMS' names a specific verb (read) and resource (SMS translations), and the word 'cached' plus 'No paid work is created' functionally separates it from the sibling request_message_translation. It stops short of naming that sibling explicitly, so the distinction relies on inference rather than direct routing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The cost note implies the when: use this when cached translations suffice and you don't want to trigger paid work. However, it never names request_message_translation as the alternative for generating fresh translations, so the agent must infer the fork from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_number_catalogSearch the number catalogC
Read-onlyIdempotent
Inspect

List available number offerings with customer setup/monthly prices, capabilities, and onboarding terms.

NameRequiredDescriptionDefault
limitNo
countriesNo
capabilitiesNo
number_typesNo
available_onlyNo
onboarding_termsNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds that results carry pricing and onboarding terms, which is useful context, but says nothing about pagination, result volume, or how the limit behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the resource stated first and the return contents front-loaded. Nothing is wasted, though the brevity comes at the cost of the missing usage and parameter detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

With 6 undocumented parameters, no output schema, and only a one-line description, an agent cannot confidently construct a filtered query or know what a result looks like. The definition is adequate as a purpose statement but insufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% across 6 parameters, so the description carries the full burden. It gestures at capabilities and onboarding terms but never explains the filtering semantics of countries, number_types, available_only, or limit, leaving most parameters opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description gives a specific verb (list) and resource (available number offerings) and enumerates the returned data (setup/monthly prices, capabilities, onboarding terms), which distinguishes it from a plain inventory list like list_numbers. However, it never explicitly contrasts itself with siblings such as list_numbers or get_number_rules, leaving the boundary to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no indication of when to use this catalog versus list_numbers, get_number_rules, check_number_requirements, or request_number. No prerequisites, no exclusions, and no alternative named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_number_rulesGet number rulesC
Read-onlyIdempotent
Inspect

Get customer-facing Number rules for one phone number.

NameRequiredDescriptionDefault
number_idYes

TDQS

C2.7/5.0
Behavior2/5

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 essentially nothing beyond them — the phrase "customer-facing" hints at a scope qualifier but is never explained, and there is no note on permissions, rate limits, or what an empty result means.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with no filler. It is efficient, though the terseness contributes to the under-specification noted elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

No output schema exists, so the description carries the burden of explaining what comes back — yet it never says what the rules contain, their structure, or whether an empty list is possible. Combined with 0% parameter coverage, an agent is left with meaningful gaps for a lookup tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% for the single required parameter number_id. The description says "for one phone number," which suggests the value is a phone number, yet the parameter is named number_id, leaving real ambiguity about whether an internal identifier or an E.164 number is expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource ("Get ... Number rules") scoped to a single phone number, which naturally distinguishes it from the sibling update_number_rules. However, "customer-facing Number rules" is not defined, so the agent must infer what a "Number rule" actually is.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No when-to-use guidance and no named alternatives. The agent gets no signal about how this differs from check_number_requirements, get_number_catalog, or list_numbers, all of which touch numbers and could plausibly be chosen instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_simulation_runGet a simulation runA
Read-onlyIdempotent
Inspect

One run's status and its attempts: per-scenario verdicts, assertion results, recognition facts, transcripts and evidence references. Paginated over attempts. Read-only; needs agents:read. Transcript, recording references and conversation evidence are included only with recordings:read.

NameRequiredDescriptionDefault
limitNo
cursorNo
run_idYes
agent_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety bar is met structurally. The description adds real behavioral context beyond them: the required `agents:read` scope, the conditional inclusion of transcripts/recordings/conversation evidence only under `recordings:read`, and that results are paginated over attempts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: content first, pagination scope second, permissions last. No filler, and the most decision-relevant information (what you get back) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

With no output schema, the description correctly takes on the burden of describing return contents and permission-gated fields, which it does well. It stops short of covering cursor/limit behavior details or failure modes, but nothing essential for a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is only 20% (just organization_id documented), so the description carries most of the burden. "Paginated over attempts" does clarify the scope of limit/cursor, which is genuine added meaning, but run_id, agent_id, limit and cursor formats or defaults are never explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource and enumerates what the run payload contains (status, attempts, per-scenario verdicts, assertion results, recognition facts, transcripts). It is clear on its own, but it does not distinguish itself from the sibling get_simulation_run_results, whose name suggests overlapping content, leaving a routing ambiguity an agent must resolve elsewhere.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is implied by the read-only framing and the required permission scopes, and the conditional recordings:read note hints at when extra data appears. However, there is no explicit when-to-use versus get_simulation_run_results, preview_simulation_run, or start_simulation_run, and no stated prerequisites beyond scopes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_simulation_run_resultsGet simulation run resultsA
Read-onlyIdempotent
Inspect

The same run as a redacted, versioned pass/fail projection for a build server: per-case status, error codes, failed assertions and which evidence kind exists -- no transcript, no recording reference, no rubric rationale. Needs only simulation_suites:read, so a CI job can gate a deploy on a run without holding a key that reads every AI agent's configuration. Read-only.

NameRequiredDescriptionDefault
limitNo
cursorNo
run_idYes
agent_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish read-only/idempotent/no-side-effects, yet the description adds genuinely useful behavior: exactly what is redacted (no transcript, no recording reference, no rubric rationale) and the minimal permission scope required (simulation_suites:read). 'Read-only' repeats the annotation, but the redaction and permission disclosures go well 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Opens with the core purpose and output shape, then the permission/CI rationale, then a terse safety note. Tightly constructed with little waste, though the CI-gating explanation is somewhat elaborate relative to the rest.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

No output schema exists, so the description carries the return-value burden and does so well, enumerating the projected fields and what is withheld. The remaining gap is parameter-level guidance (pagination, cursor), which is left undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema coverage is only 20% (only organization_id documented), so the description is expected to compensate, and it does not -- limit, cursor, run_id and agent_id semantics are unaddressed. 'The same run' faintly implies run_id/agent_id identify the run, but pagination and cursor behavior are never explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific resource (a simulation run) and a precise output shape (redacted pass/fail projection: per-case status, error codes, failed assertions, evidence kind). The phrase 'The same run as a redacted... projection' implicitly distinguishes it from the fuller run sibling, but does not name get_simulation_run directly, so sibling differentiation is only implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives a clear use context -- a build server / CI job gating a deploy -- which explains when this narrow projection is preferable. It stops short of explicitly naming the alternative (get_simulation_run for the full transcript-bearing view) or stating when-not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_simulation_suiteGet a simulation suiteA
Read-onlyIdempotent
Inspect

One simulation suite: its authored scenarios and their runners, its policy, its run history, and run_setup -- which reports supported_runners, the runners THIS deployment admits; starting a run with any other runner is refused with a 422. Read-only.

NameRequiredDescriptionDefault
agent_idYes
suite_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false, non-destructive), so the redundant 'Read-only' adds little. However, the description does add real behavioral context beyond annotations: what the response comprises, and that starting a run with an unsupported runner is refused with a 422.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence followed by a two-word tag; the payload contents are front-loaded and every clause carries information (scenarios, policy, history, run_setup, 422). Slightly packed but free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

With no output schema, the description correctly carries the burden of describing the return: scenarios/runners, policy, run history, and run_setup with supported_runners. It is thin on parameter semantics and omits behaviors like not-found handling, but for a simple read tool it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 33%: organization_id is documented in the schema while agent_id and suite_id are bare strings. The description says nothing about any parameter, not even the optional workspace override or id formats, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description names the exact resource ('One simulation suite') and enumerates its contents (scenarios and runners, policy, run history, run_setup), which makes it clearly distinguishable from siblings like list_simulation_suites or get_simulation_run. It is specific but never explicitly contrasts itself with those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is only implied: by exposing run_setup's supported_runners and the 422 refusal, it hints that this call is how you discover which runners are admissible before starting a run. There is no explicit when-to-use or when-to-prefer-an-alternative statement (e.g., versus get_simulation_run).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hangup_callHang up a live callA
Destructive
Inspect

Ask a call that is already live to hang up. Returns immediately with hangup_requested_at and never reports the call as ended: the media worker holding the call tears it down, and the call reaches its terminal event through the ordinary path. Repeating the request is idempotent and returns the original timestamp. A call still queued for origination is refused.

NameRequiredDescriptionDefault
call_idYes

TDQS

A3.9/5.0
Behavior2/5

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

The description is otherwise unusually rich - it discloses that the tool returns immediately, never reports the call as ended, that the media worker tears the call down, and that the call reaches its terminal event via the ordinary path. However, it states 'Repeating the request is idempotent and returns the original timestamp', which directly conflicts with the annotation idempotentHint=false. That inconsistency is a serious behavioral disclosure problem even though the destructive/openWorld hints are consistent with the described teardown.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action, then the return/async contract, then idempotency and the refusal condition. No sentence is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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

With no output schema, the description supplies the return value (hangup_requested_at), the asynchronous teardown path, the terminal-event behavior, and the refusal case. An agent has everything needed to call it and interpret the result, aside from the idempotency inconsistency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 0% for the single call_id parameter, so the description carries the burden. It does add meaning by stating the referenced call must be live and not merely queued for origination, but it never says what form call_id takes or where to obtain it, leaving part of the semantics implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('ask a call that is already live to hang up') and immediately bounds the scope to live calls, distinguishing it from get_call, create_outbound_call, and the campaign control tools. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives a clear applicability condition (the call must already be live) and an explicit exclusion ('a call still queued for origination is refused'), plus the repeat-call behavior. It does not name a sibling alternative for the queued case (e.g. cancel_campaign), so it stops just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

launch_campaignLaunch a campaignA
Destructive
Inspect

Authorize and start a draft campaign. Existing-customer / consented lists on active workspace capabilities start immediately; the result carries the authorization decision.

NameRequiredDescriptionDefault
campaign_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds genuinely new behavioral detail: the tool both authorizes and starts, launch is conditional on list type and workspace capabilities, and the returned result carries an authorization decision rather than a guaranteed launch. It still omits what side effects (real outbound calls) occur and what happens on denial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, and no filler. The second sentence packs the conditional launch behavior and the return-value caveat efficiently, though the 'Existing-customer / consented lists' phrasing is dense enough to slow parsing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a destructive, non-idempotent, open-world tool with no output schema, the description should carry more of the return and failure story. It does explain that the result carries the authorization decision, but leaves unclear what happens when authorization is denied, whether the action is reversible, and what downstream effects the launch triggers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 50%: organization_id is documented in-schema (defaults to authenticated workspace, must match it), while campaign_id has no schema description. The description supplies the key implicit constraint that the target must be a draft campaign, partly compensating, but adds no format or identity details for campaign_id. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific compound verb (authorize and start) and a precise resource scope (a draft campaign), which cleanly separates it from create_campaign, pause_campaign, and resume_campaign. It does not explicitly name a sibling or contrast itself with resume_campaign, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The conditional clause 'Existing-customer / consented lists on active workspace capabilities start immediately' implies when a launch is immediately effective versus when it stalls for authorization, which hints at usage context. But it never says when to prefer this over resume_campaign/pause_campaign, nor does it state the prerequisite that the campaign must already be a draft.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_agentsList AI agentsA
Read-onlyIdempotent
Inspect

List one bounded, newest-first page of the authenticated workspace's agents. The result uses the same safe agent item DTO as REST and returns pagination metadata; next_cursor continues the listing and is meaningful only while has_more is true. A page holds at most limit agents and at most 25,000 characters, so it can hold fewer; an agent too large for any page is named in pagination.omitted with the tool that reads it.

NameRequiredDescriptionDefault
limitNo
cursorNoOpaque cursor returned as pagination.next_cursor.
project_idNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare a safe read-only idempotent operation, and the description adds substantial non-obvious behavior: pages are bounded by both a count (limit) and 25,000 characters, may hold fewer, and oversized agents are surfaced in pagination.omitted. This is real disclosure beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with what the tool returns before pagination caveats. Every sentence carries information, though the character-bound and omission details make it heavier than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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

With no output schema, the description steps in to describe the return: the safe agent item DTO, pagination metadata, next_cursor, has_more, and pagination.omitted. An agent has enough to call it and consume the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 50%; cursor semantics are reinforced (

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('List ... the authenticated workspace's agents') and adds distinguishing scope: bounded, newest-first, paginated. An agent can separate it from get_agent or list_calls without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Clearly explains that next_cursor continues the listing and is only meaningful while has_more is true, which tells the agent how to iterate. It stops short of explicitly naming alternatives (e.g. get_agent for a single agent, or 'the tool that reads it' for omitted agents is left unnamed).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_audio_environmentsList audio environmentsA
Read-onlyIdempotent
Inspect

List the immutable, provider-independent audio-environment catalogue. It contains an explicit Off option and version-pinned ambience presets; no provider is contacted and no selection is changed. Agent output uses volume; Simulation Lab caller input uses the separate noise_level field.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the bar is lower, but the description adds real context: the catalogue is immutable and version-pinned, no provider is contacted, and no selection is mutated. The volume vs noise_level note further clarifies how fields differ between callers, exceeding what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no filler, front-loaded with the core verb+resource and followed by only value-adding constraints. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

For a zero-parameter, no-output-schema read tool, the description supplies the catalogue's content shape (Off option, version-pinned presets) and hints at relevant fields (volume, noise_level), which partially compensates for the absence of an output schema. It stops short of enumerating the returned fields fully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

With zero parameters the baseline is 4; the description adds no parameter detail because there are none to describe.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb (List) and resource (immutable, provider-independent audio-environment catalogue), and adds scope detail: it contains an explicit Off option and version-pinned ambience presets. The resource is unique among siblings, so confusion is unlikely, but it does not explicitly contrast itself with any alternative listing tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The description implies a discovery use case (list the catalogue, no selection changed) but gives no explicit when-to-use or when-not-to-use guidance, and names no alternative. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_callsList callsA
Read-onlyIdempotent
Inspect

List one bounded, newest-first page of the workspace's calls. Each item is the REST call record without runtime_config (the agent configuration the call ran with); get_call returns the full record. A page holds at most limit calls and at most 25,000 characters, so it can hold fewer; pagination.next_cursor continues the listing and is meaningful only while pagination.has_more is true. A call too large for any page is named in pagination.omitted.

NameRequiredDescriptionDefault
limitNo
cursorNoOpaque cursor returned as pagination.next_cursor.
project_idNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare the safe read-only profile, and the description adds substantial beyond-schema behavior: newest-first ordering, per-item trimming of runtime_config, a hard character cap (25,000) that can make pages shorter than limit, and a named pagination.omitted case for oversized calls. This is exactly the kind of operational detail the structured fields 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, front-loaded with the tool's purpose and scope, with zero filler. Each sentence carries distinct information (trimming, page bounds, pagination continuation, omission).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

With no output schema, the description carries the return shape well, describing item contents and the pagination object's next_cursor, has_more, and omitted fields. The only shortfall is that project_id and full organization_id semantics remain thin, but for a paginated list tool this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 50%, and the description adds meaning for limit (page bounded by both count and characters) and cursor (continues listing, valid only while has_more). However project_id is undocumented in both schema and description, and organization_id's workspace-default behavior is left to the schema alone, so it only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (List), resource (workspace's calls), and scope (one bounded, newest-first page). It further disambiguates from the sibling get_call by noting the record is returned without runtime_config while get_call returns the full record. An agent can distinguish this from other list_* tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

It routes the agent toward get_call for the full record and explains pagination continuation via next_cursor/has_more, giving clear context for how to iterate. It stops short of an explicit 'use this when... / not when...' statement against the broader sibling set (e.g. get_call_transcript), 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.

list_campaignsList campaignsB
Read-onlyIdempotent
Inspect

List campaigns in the workspace with their latest run and counters (bounded page).

NameRequiredDescriptionDefault
limitNo
offsetNo
project_idNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context beyond the annotations: the result is a workspace-scoped, bounded page that includes each campaign's latest run and counters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler, front-loading the core action and resource while packing in scope, return content, and pagination constraint. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a simple read-only list with rich annotations but no output schema, the description does mention return content and pagination. However, it leaves project_id and the limit/offset mechanics unexplained, which is a meaningful gap given the low schema description coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 25% (only organization_id is described in the schema). The description does not explain what limit, offset, or project_id do, nor does it clarify pagination semantics beyond the vague phrase 'bounded page', so it fails to compensate for the undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb ('List') and resource ('campaigns') and adds scope ('in the workspace') plus return content ('latest run and counters', 'bounded page'). It does not explicitly differentiate from siblings like get_campaign or other list_* tools, but 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.

Usage Guidelines2/5

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

It implies use for enumerating campaigns in a workspace but gives no explicit when-to-use guidance, no exclusions, and no routing to alternatives such as get_campaign for a single campaign. Pagination parameters exist but the description offers no guidance on when or how to page.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_contact_listsList contact listsA
Read-onlyIdempotent
Inspect

List one bounded, newest-first page of the workspace's contact lists (id, name, project, source, row_count, timestamps), using the REST contact-list record. A page holds at most limit lists and at most 25,000 characters; pagination.next_cursor continues the listing and is meaningful only while pagination.has_more is true.

NameRequiredDescriptionDefault
limitNo
cursorNoOpaque cursor returned as pagination.next_cursor.
project_idNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare this a read-only, idempotent, non-destructive, non-open-world operation, so the safety profile is covered. The description adds real value beyond that: newest-first ordering, a per-page cap of both limit lists and 25,000 characters, and the condition under which the cursor is meaningful. It omits permission/auth requirements, which is 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, with pagination invariants in a tight second sentence. It is dense but every clause carries information; the phrase 'using the REST contact-list record' is the only slightly loose element.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

With no output schema, the description usefully enumerates returned fields (id, name, project, source, row_count, timestamps) and the pagination envelope. Annotations cover safety, but the unexplained project_id filter leaves a small gap for a 4-parameter list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is only 50% – project_id and limit carry no schema description. The description compensates for limit ('a page holds at most limit lists') and for cursor (via the pagination.next_cursor explanation), but says nothing about what project_id filters or how organization_id scoping behaves, so half the parameters remain underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('List ... the workspace's contact lists'), and adds scope detail (one bounded, newest-first page) plus the fields returned. This clearly separates it from get_contact_list (single record), create_contact_list (write), and list_contacts (a different resource).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives clear context for invocation: it lists the workspace's lists, not another workspace's, and explains that next_cursor only continues while has_more is true. It stops short of naming alternatives (get_contact_list, list_contacts) or stating when not to use it, so no explicit exclusion guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_contactsList a contact list's contactsA
Read-onlyIdempotent
Inspect

List one bounded page of a contact list's contacts in import order (phone_e164, name, first_name, language, time_zone, country, variables, external_reference, consent_basis), using the REST contact record. A page holds at most limit contacts and at most 25,000 characters, so it can hold fewer; pagination.next_cursor continues the listing while pagination.has_more is true. A contact too large for any page is named in pagination.omitted.

NameRequiredDescriptionDefault
limitNo
cursorNoOpaque cursor returned as pagination.next_cursor.
contact_list_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare the safe read-only, idempotent profile, and the description adds substantial non-derivable behavior: a page holds at most limit contacts AND at most 25,000 characters, so it may return fewer than requested; pagination.next_cursor/has_more drive continuation; and oversized contacts appear in pagination.omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads verb and scope, then layers pagination and edge-case behavior in one dense but well-ordered sentence. The parenthetical field enumeration earns its place given there is no output schema, though the sentence is long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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

With no output schema available, the description covers the return shape (enumerated fields), page-size limits, continuation mechanics, and the omitted-contact edge case, giving the agent everything needed to call and consume the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is only 50%, but the description compensates by explaining what limit actually bounds (contacts and characters per page) and how cursor relates to pagination.next_cursor. contact_list_id semantics remain only implied, and organization_id relies on the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('List one bounded page of a contact list's contacts') and clarifies scope with fields, ordering ('import order'), and record source ('using the REST contact record'). It is clearly distinguishable from list_contact_lists and get_contact_list without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is implied by the scoping to a single contact_list_id, and the pagination narrative tells the agent how to continue, but no alternative tool is named and there is no explicit when/when-not guidance. Adequate but not routing-grade.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_conversationsList SMS conversationsC
Read-onlyIdempotent
Inspect

List SMS conversations.

NameRequiredDescriptionDefault
project_idNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

C2.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered. The description adds nothing beyond that — no scoping behavior, no default ordering, no pagination or volume characteristics for the list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence is maximally compact, but here brevity reflects under-specification rather than efficient communication. It is front-loaded but carries almost no information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a two-parameter list tool with no output schema and incomplete parameter documentation, the description should explain what the returned conversations represent and how scope is determined. It omits all of this, leaving real gaps an agent cannot resolve from structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 50%: organization_id is documented but project_id has no description at all. The description text provides zero compensating information about either parameter or their relationship (e.g., whether project_id scopes the listing).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

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

"List SMS conversations" simply restates the tool name and title verbatim with no additional specificity. It does not distinguish this tool from siblings like list_calls, list_campaigns, or list_contacts, nor clarify what a 'conversation' contains versus a call or message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, no mention of prerequisites, filtering, or pagination. An agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_forwarding_setupsList forwarding setupsC
Read-onlyIdempotent
Inspect

Manage an existing-number forwarding setup through the canonical service. No carrier settings change, number purchase or phone call occurs. Test verification requires linked call evidence.

NameRequiredDescriptionDefault
offsetNo
project_idNo

TDQS

C2.2/5.0
Behavior3/5

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 constraints that no carrier settings change, number purchase, or phone call occurs, and notes a test-verification condition, but it leaves the list behavior itself opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, but it is not front-loaded with the actual list operation and spends sentences on side-effect exclusions and test verification rather than clarifying enumeration or pagination. The opening verb 'Manage' makes the structure misleading for a list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a read-only list tool with no output schema, the description should clarify what collection is returned, how offset works, and how project_id affects scope. It omits all of those details and instead focuses on constraints that are only loosely related to listing forwarding setups.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

The schema has two parameters with 0% description coverage, and the description does not explain offset pagination, its maximum, or whether project_id scopes results to a project. The parameter names alone carry all meaning, so the description fails to compensate for the schema coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

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

The tool is named list_forwarding_setups, but the description says 'Manage an existing-number forwarding setup,' which does not state that it lists forwarding setups and uses a singular, management-oriented verb. This is vague and risks confusion with get_forwarding_setup or update_forwarding_setup, so it does not meet the specific verb+resource bar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

The description gives no explicit indication of when to use this tool versus get_forwarding_setup, create_forwarding_setup, update_forwarding_setup, or forwarding-test tools. The note that 'Test verification requires linked call evidence' is contextual but does not guide tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_numbersList phone numbersA
Read-onlyIdempotent
Inspect

List one bounded, newest-first page of the workspace's phone numbers with registration status, using the REST number record. A page holds at most limit numbers and at most 25,000 characters, so it can hold fewer; pagination.next_cursor continues the listing and is meaningful only while pagination.has_more is true. A number too large for any page is named in pagination.omitted.

NameRequiredDescriptionDefault
limitNo
cursorNoOpaque cursor returned as pagination.next_cursor.
project_idNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A3.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description still adds substantial behavior: newest-first ordering, an explicit page ceiling of 'at most 25,000 characters' (so a page may return fewer than limit), the rule that next_cursor is meaningful only while has_more is true, and the existence of pagination.omitted for oversized numbers. These are non-obvious traits an agent cannot get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, none wasted, with the bounded-pagination constraint front-loaded before cursor semantics. It is dense but every clause carries operational information; a slightly shorter phrasing of the 25,000-character rule could tighten it further.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

With no output schema, the description usefully documents the return envelope (pagination.next_cursor, has_more, omitted) that the agent must read to page correctly. The remaining gap is project_id and any scoping behavior beyond organization_id, which is only partially covered in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is only 50%, but the description compensates by clarifying that limit is a true upper bound rather than a guaranteed count, and by tying cursor to pagination.next_cursor. project_id remains completely undocumented in both the schema and the description, leaving one gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

Names a specific verb and resource ('List one bounded, newest-first page of the workspace's phone numbers with registration status'), and the possessive 'workspace's' implicitly distinguishes owned numbers from the catalog tool. It never names a sibling explicitly, so an agent must still infer the boundary versus get_number_catalog or list_phone_servers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

The description explains pagination mechanics but gives no when-to-use, when-not-to-use, or alternative-tool guidance. An agent is not told how this list differs from get_number_catalog or get_number_rules, which is the primary routing decision for this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pbx_keysList PBX connection keysA
Read-onlyIdempotent
Inspect

List a workspace AI agent's named PBX keys, never passwords; bounded by limit/offset with has_more.

NameRequiredDescriptionDefault
limitNo
offsetNo
agent_idYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the bar is lower. The description nonetheless adds real value beyond them: it discloses that secrets are never returned ('never passwords') and that results are paginated with a has_more indicator — neither of which the schema conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the verb and resource, that still packs in the security caveat and the pagination model. No filler clauses to cut.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

There is no output schema and no annotations gap to fill, and the description covers the essential return contract (key names only, plus has_more for paging). Slightly incomplete on what a key object contains and what happens on an invalid agent_id, but adequate for a simple paginated list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden, and it does name the limit/offset bounding and the has_more signal. It does not explain agent_id beyond the possessive 'agent's', nor the 1-100 limit cap or default paging behavior, leaving the required parameter essentially to the schema's type constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (List) and resource (a workspace AI agent's named PBX keys) with scope clarified by 'never passwords'. The verb alone separates it from the sibling create_pbx_key, revoke_pbx_key and rotate_pbx_key, so an agent can route correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is only implied by the 'List' verb and the agent scoping; there is no explicit when-to-use statement, no prerequisites, and no pointer to create_pbx_key/revoke_pbx_key for the non-read paths. 'Never passwords' hints that secret retrieval happens elsewhere but does not name an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_phone_serversList phone serversB
Read-onlyIdempotent
Inspect

List customer phone servers for self-hosted media/calling.

NameRequiredDescriptionDefault
project_idNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

B3.4/5.0
Behavior3/5

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 the 'self-hosted media/calling' scope, which is useful domain context, but does not mention pagination, filtering, or return format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, efficient sentence with the verb and scope front-loaded. Nothing is wasted, though it is minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a simple read-only list tool with annotations covering safety, the description is adequate but thin: it omits any hint of pagination, result shape, or the meaning of the two scope parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 50%; organization_id is documented in the schema but project_id is not. The description adds no parameter guidance at all. Baseline 3 applies given partial schema coverage and the tool having zero required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb (List) and resource (customer phone servers), scoping it to self-hosted media/calling. It is distinguishable from create_phone_server and test_phone_server by verb, though it doesn't explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is implied by the 'List' verb and the 'customer phone servers' scope, but there is no explicit when-to-use guidance or exclusion criteria relative to siblings like test_phone_server.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_simulation_suitesList simulation suitesB
Read-onlyIdempotent
Inspect

List an AI agent's simulation suites with the health of each one's latest run. Read-only.

NameRequiredDescriptionDefault
limitNo
cursorNo
agent_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so 'Read-only' is redundant repetition with no added credit. The description does add one genuinely useful behavioral fact not in structured data: results include the health of each suite's latest run. Pagination behavior for limit/cursor is unaddressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the resource and scope; nothing is buried. Minor waste in the trailing 'Read-only' already covered by annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

No output schema exists, so the description carries the return-value burden and does partially address it (health of latest run). However, for a paged list tool with limit/cursor parameters, the absence of any pagination or result-shape detail leaves a real gap. Safety semantics are covered by annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 25% (just organization_id). The description implies agent scoping via 'an AI agent's simulation suites', but says nothing about the limit/cursor pagination controls or the organization_id default-and-must-match constraint that the schema alone covers. With low coverage the description should compensate more than it does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Specific verb (List) plus resource (simulation suites) plus scope (an AI agent's) plus the value-added 'health of each one's latest run'. It clearly distinguishes itself from the singular sibling get_simulation_suite and from start/cancel_simulation_run without needing the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No when-to-use vs. alternatives guidance. It never names get_simulation_suite for a single suite or explains when an agent should list suites vs. inspect a specific run. Usage must be inferred from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pause_campaignPause a campaignA
Destructive
Inspect

Pause a running campaign; no new attempts are placed until it is resumed.

NameRequiredDescriptionDefault
campaign_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=false. The description adds genuinely useful behavioral context beyond those annotations: it explains that the pause is temporary and prevents new attempts until resumption, which helps an agent understand the mutation's scope and reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. The core action and its effect are stated immediately and efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a simple mutation tool with annotations covering the safety profile and no output schema, the description is minimally adequate. It omits parameter guidance and does not route the agent among close siblings like cancel_campaign and resume_campaign, which leaves meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

The description provides no information about either parameter. With schema description coverage at only 50%, campaign_id is undocumented in both the schema and the description, and the description does nothing to compensate for that gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb+resource ('Pause a running campaign') and clarifies the effect ('no new attempts are placed until it is resumed'), which implicitly distinguishes it from permanent alternatives like cancel_campaign. However, it does not explicitly name siblings such as resume_campaign or cancel_campaign, so the routing value is slightly below the top band.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The phrase 'a running campaign' implies a precondition, and 'until it is resumed' signals that the action is temporary. But there is no explicit when-to-use guidance, no exclusions, and no pointer to alternatives like cancel_campaign or resume_campaign.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_simulation_runPreview a simulation runA
Read-onlyIdempotent
Inspect

What starting a run would cost and whether this deployment can run it: attempt counts, the estimated spend, the model-call ceiling, and supported_runners. Covers the WHOLE suite, so it is an upper bound -- a run confined with scenario_ids costs no more than this, and often much less. Read-only; no run is created, nothing is queued, and no budget is reserved.

NameRequiredDescriptionDefault
agent_idYes
suite_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already establish the read-only/idempotent/non-destructive profile, but the description adds substantial behavior beyond them: exactly which values come back, that nothing is created, queued, or budget-reserved, and that the estimate is an upper bound over the whole suite rather than a precise figure. That cost-model nuance is real context an agent could not derive 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the returned values, then scope semantics, then the safety statement. Every clause earns its place and there is no restatement of the name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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

There is no output schema, so the description carries the burden of describing returns and it does so explicitly. For a simple three-parameter read-only tool it covers purpose, scope, side-effect profile, and return shape, leaving nothing an agent needs in order to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema coverage is only 33%; organization_id is documented but agent_id and suite_id are bare with no format, default, or scoping semantics supplied by the description. Worse, the only parameter-like name it mentions (scenario_ids) is not a parameter of this tool at all, so it does not compensate for the coverage gap and may send the agent looking for a non-existent field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (preview) and resource (a simulation run) and enumerates the concrete outputs: attempt counts, estimated spend, model-call ceiling, and supported_runners. It also implicitly separates itself from start_simulation_run by emphasizing that no run is created, so an agent can distinguish it from the write sibling without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives clear context for when this is the right call (a pre-flight cost/feasibility check) and explains the whole-suite upper-bound semantics versus a scenario_ids-confined run. It never names start_simulation_run as the alternative or states an explicit 'do not use when', so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_voicePreview a voiceA
Destructive
Inspect

Render one bounded, rate-limited voice preview for the authenticated workspace. A text-to-speech voice speaks the caller's text (at most 200 characters); a conversation-engine voice (GPT-Live-1, Gemini Live, Eleven Realtime) plays Skysay's fixed sample and refuses typed text. This may contact a managed provider or validate BYOK and can write preview-rate and exact voice-availability state; it is not a read-only or free preview. Returned audio is bounded in-memory WAV data.

NameRequiredDescriptionDefault
textNoOptional bounded caller sentence for a text-to-speech voice. It is synthesized but not persisted or echoed. A conversation-engine voice refuses it (voice_preview_fixed_sample) and plays Skysay's fixed sample.
modelYes
agent_idNoOptional saved hosted agent id for an exact pinned managed voice retry.
deliveryNoOptional delivery profile; the preview applies exactly the provider settings a call with the same voice_polish.delivery would use.
languageYes
providerYes
voice_idYes
project_idYes
credential_idNoOptional customer-owned TTS credential id; the platform credential is never a fallback.
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
audio_environmentNoOptional selected ambience mixed only into this preview. For a text-to-speech voice, text must then be non-blank and explicit; a conversation-engine voice needs no text and the ambience is mixed over its fixed sample. The language and text are never replaced.

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations, it discloses rate limiting, that the call may hit a managed provider or validate BYOK, that preview-rate and exact voice-availability state get written, that the preview is neither read-only nor free, and that audio is bounded in-memory WAV. This is exactly the extra context the annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, front-loaded with the core action and the rate/side-effect warning, with no filler. It is packed tightly enough that the voice-type distinction and the side-effect disclosure have to share a sentence, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

For an 11-parameter, nested-object tool with no output schema, the description still covers return format, side effects, and the branching voice behavior. The remaining gap is parameter-level guidance for the five undocumented required fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

With only 55% schema description coverage, the description still never explains model, provider, voice_id, language, or project_id, and its 200-character note merely repeats the schema's maxLength. The TTS-vs-conversation-engine rule does add real meaning about how text behaves, which lifts it above a pure schema restatement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description names a specific verb and resource ('Render one bounded, rate-limited voice preview') and immediately splits behavior by voice type (text-to-speech vs conversation-engine), so an agent knows exactly what the tool produces 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.

Usage Guidelines3/5

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

It gives strong conditional guidance inside the tool (text is honored for TTS voices, refused for conversation-engine voices, ambience requires explicit text for TTS), but it never says when to choose this over an alternative such as get_agent_voice_stack or preview_simulation_run.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_forwarding_instructionsRecord forwarding instructionsCInspect

Manage an existing-number forwarding setup through the canonical service. No carrier settings change, number purchase or phone call occurs. Test verification requires linked call evidence.

NameRequiredDescriptionDefault
setup_idYes
project_idNo
base_revisionYes

TDQS

C2.7/5.0
Behavior3/5

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

The annotations already state that the tool is not read-only, not destructive, not idempotent, and not open-world. The description adds useful context that no carrier settings change, number purchase, or phone call occurs, and that test verification requires linked call evidence, but it still does not explain what is mutated, what permissions are needed, or what the operation returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded, with no obvious filler. The three sentences each contribute a constraint or scope note, though "canonical service" remains ambiguous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a three-parameter mutation tool with no output schema and no parameter descriptions, the definition is missing key operational details: what instructions are recorded, how base_revision is used, what project_id scopes, and what the result looks like. It does not provide enough for an agent to invoke the tool confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the burden for all three parameters. It only loosely implies setup_id through "existing-number forwarding setup" and provides no meaning for base_revision or project_id, leaving required concurrency and scoping parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

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

The description identifies the resource (an existing-number forwarding setup) but uses the vague verb "manage" and does not clarify whether this creates, updates, or otherwise records forwarding instructions. It also does not distinguish the tool from close siblings such as update_forwarding_setup, get_forwarding_instructions, or create_forwarding_setup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus alternatives like update_forwarding_setup or get_forwarding_instructions. The statement "Test verification requires linked call evidence" hints at a condition, but it is not framed as usage guidance or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_forwarding_stopRecord forwarding stopCInspect

Manage an existing-number forwarding setup through the canonical service. No carrier settings change, number purchase or phone call occurs. Test verification requires linked call evidence.

NameRequiredDescriptionDefault
setup_idYes
project_idNo
base_revisionYes

TDQS

C2.4/5.0
Behavior3/5

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

Annotations already declare it as a non-destructive, non-idempotent mutation. The description adds real side-effect scoping (no carrier changes, no number purchase, no call placed) and a prerequisite about linked call evidence, which is useful beyond the annotations. It still does not state what gets recorded or whether repeated calls create duplicates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler, but the leading sentence is the vaguest one, and the more useful side-effect and prerequisite details are buried in trailing clauses rather than front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a mutation tool with no output schema and zero parameter documentation, the description should explain the revision/conflict semantics and what a successful record means. It only covers exclusions, leaving the core behavior and parameter contract under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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

Schema description coverage is 0% across three parameters, so the description carries the full burden and adds nothing: setup_id, project_id, and especially base_revision (which clearly implies an optimistic-concurrency revision check) are unexplained. An agent cannot tell what base_revision must match or whether project_id is optional context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

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

The verb is 'Manage', which is generic, and the resource is described as 'an existing-number forwarding setup' rather than the stopping/recording action implied by the name. Nothing distinguishes it from siblings like update_forwarding_setup, create_forwarding_setup, or start_forwarding_test.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

'No carrier settings change, number purchase or phone call occurs' rules out several adjacent operations, and 'Test verification requires linked call evidence' hints at a precondition. However, no alternative tool is named and the condition that selects this tool over update_forwarding_setup is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_call_translationTranslate a call transcriptA
DestructiveIdempotent
Inspect

Explicitly request paid stored-text translation for an eligible new call, even with automatic translation off. $0.02 per 1,000 original words needing translation per target, minimum $0.01. Existing ready results and matching-language text cost zero.

NameRequiredDescriptionDefault
call_idYes
target_languageYes

TDQS

A3.6/5.0
Behavior4/5

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

Adds information beyond the annotations: the exact price model ($0.02/1,000 words, $0.01 minimum) and the fact that existing or same-language results cost nothing, which is consistent with idempotentHint=true. It does not explain why destructiveHint=true applies to a translation request, which is the one behavioral gap an agent might trip on.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight, front-loaded sentences: the action first, then the cost model. The pricing clause is slightly dense but every element (cost, minimum, zero-cost cases) is decision-relevant rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

There is no output schema, so the description should at least hint at what happens after the request (async job, how to retrieve results via get_call_translations) and what 'eligible' means; it covers cost but leaves outcome and eligibility undefined. Annotation-covered safety plus the cost detail keeps this at minimum-viable rather than inadequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% and both parameters (call_id, target_language) are undocumented in the schema, yet the description never clarifies identifier format, acceptable language codes, or what makes a call 'eligible.' The phrase 'per target' is the only hint about target_language and it is not enough to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

Names a specific verb and resource ('request paid stored-text translation for an eligible new call') and makes the call-vs-message scope implicitly clear against siblings like request_message_translation and get_call_translations. It does not explicitly name an alternative, but the action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives a real usage condition: this is the explicit path to use 'even with automatic translation off,' and noting that existing ready results and matching-language text cost zero tells the agent there is no need to call when results already exist. No explicit exclusions or named alternative tools, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_capabilitiesRequest workspace capabilitiesA
Destructive
Inspect

Select capabilities profiles/channels/destinations and accept the outbound policy. A destination choice is REQUIRED: either all_countries: true (every destination except the sanctioned set) or countries naming at least one ISO 3166-1 alpha-2 code; a missing choice, an empty list or an unrecognized code is refused and nothing is stored. Auto-approves within default caps once the outbound policy is accepted; the custom implementation-services profile and a suspended workspace route to review.

NameRequiredDescriptionDefault
channelsNo
profilesYes
countriesNoDestination allowlist as ISO 3166-1 alpha-2 codes, at least one, used when all_countries is not true. An empty list is refused, and so is any entry that is not a well-formed two-letter code (the refusal names it); nothing is stored on a refusal.
all_countriesNoTrue authorizes every destination except the sanctioned set and makes `countries` irrelevant. False or absent means the `countries` allowlist applies. One of the two is required.
policy_versionNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A3.6/5.0
Behavior4/5

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

Beyond the annotations, the description discloses important behavior: a missing destination choice is refused, nothing is stored on refusal, default-cap requests auto-approve once policy is accepted, and custom or suspended cases route to review. It does not fully explain what existing capabilities are replaced or destroyed on a successful call, which keeps it from a 5 for a destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and dense with useful constraints, with no obvious filler. It repeats some destination details already present in the schema, but the structure remains efficient for a mutation tool with validation rules.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

The definition covers refusal behavior, approval routing, and the destination requirement well. For a destructive six-parameter mutation with no output schema, it should say more about what happens on success, what profiles mean, and whether prior capabilities are replaced.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

The description thoroughly explains the all_countries/countries requirement, but it largely mirrors the schema descriptions for those fields. It leaves the required profiles parameter, channels, and policy_version unexplained, which is a meaningful gap at 50% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb and resource: selecting capabilities profiles/channels/destinations and accepting the outbound policy. It is clearly a mutation counterpart to get_capabilities, but it does not explicitly name or distinguish itself from that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The description implies when to use the tool by explaining the required destination choice and approval behavior. However, it does not explicitly compare this tool with alternatives such as get_capabilities, authorize_outbound, or evaluate_outbound_policy, leaving the routing decision partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_message_translationTranslate an SMSB
DestructiveIdempotent
Inspect

Explicitly request paid stored-text translation for an eligible new SMS. $0.02 per 1,000 original words needing translation per target, minimum $0.01. Cached reads never charge.

NameRequiredDescriptionDefault
message_idYes
target_languageYes

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=true), so the description's job is to add context, and it does: it discloses real cost ($0.02 per 1,000 original words per target, $0.01 minimum) and that cached reads are free. What it does not explain is why the operation is flagged destructive, e.g. whether it consumes wallet balance irreversibly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action before the pricing detail. Nearly every clause earns its place; only the pricing granularity borders on over-precision for a tool-selection description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

Cost and caching behavior are well covered, but with two required parameters at 0% schema coverage and no output schema, the description leaves the accepted target_language format, the meaning of 'eligible', and whether the translation is returned immediately or asynchronously unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% for both parameters. The description says nothing about message_id format or what target_language values are accepted (locale code? language name? one or many?), so the agent must guess the accepted format for the only two inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource: explicitly request paid stored-text translation for an SMS. The word 'request' plus 'stored-text translation' distinguishes it in spirit from the read-only sibling get_message_translations, but the sibling is never named, so the differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The phrase 'eligible new SMS' and 'cached reads never charge' imply this is for messages not yet translated, but eligibility criteria are never defined and no alternative tool (get_message_translations, request_call_translation) is named as the fallback. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_numberRequest a phone numberB
Destructive
Inspect

Create a managed phone-number request; live provider ordering and assignment still require operator approval.

NameRequiredDescriptionDefault
countryYes
agent_idNo
project_idYes
number_typeNo
customer_typeNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
agent_endpoint_idNo
customer_referenceNo
preferred_phone_numberNo
requested_capabilitiesNo
customer_purchase_confirmedNoSet true only after the customer approves the number request and displayed prices. Number setup and rental require purchased funds; browser welcome credit cannot fund this request.

TDQS

B3.3/5.0
Behavior4/5

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

Annotations cover the safety profile (destructiveHint=true, readOnlyHint=false, idempotentHint=false), so the bar is lower. The description adds real value by disclosing that live provider ordering and assignment require operator approval - key context about the deferred/asynchronous nature of the operation. It does not, however, explain what 'managed' entails or any auth/cost constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the action verb first and zero filler. It is efficient, though its brevity is also the source of the coverage gaps noted elsewhere rather than a model of completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For an 11-parameter, non-idempotent, destructive mutation with no output schema and 18% schema coverage, the description is far too thin. It leaves the meaning of most parameters, permission requirements, and the request lifecycle unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 18%, with 9 of 11 parameters undocumented, so the description must compensate - and it does not mention a single parameter. Fields like customer_type, number_type, requested_capabilities, and customer_reference carry domain-specific meaning the agent has no way to resolve from the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb+resource: 'Create a managed phone-number request.' The word 'managed' usefully signals this is a request workflow rather than direct provisioning, which separates it from siblings like list_numbers or get_number_catalog. However, it names no sibling explicitly, so differentiation is only implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The clause about operator approval implies the tool is for initiating a request that will not immediately complete. But it gives no explicit when-to-use guidance versus alternatives such as check_number_requirements or get_number_catalog, nor any prerequisites. Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resume_campaignResume a campaignC
Destructive
Inspect

Resume a paused campaign.

NameRequiredDescriptionDefault
campaign_idYes
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is known. The description adds nothing beyond the name: it doesn't say what resuming actually triggers (outbound dialing resuming, which contacts get called, whether it can be undone) or that repeated calls are not idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with zero waste and the action front-loaded. It is appropriately sized for what it contains, though the extreme brevity reflects under-specification rather than disciplined conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

This is a state-changing, non-idempotent operation with no output schema and one undocumented parameter, so the description carries real explanatory burden. It omits the required campaign state, side effects of resuming, and error conditions (e.g., resuming an already-running campaign), leaving the agent under-informed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 50%. The organization_id parameter is well documented in the schema, but campaign_id has no description anywhere, and the description text supplies no parameter meaning at all. With half the parameters undocumented, the description fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb (resume) and resource (campaign) with the precondition implied by 'paused'. It is clear, but it does not differentiate itself from the very similar launch_campaign sibling, which an agent must choose between when a campaign is not already paused.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

The phrase 'paused campaign' implies a precondition, but there is no explicit when-to-use guidance and no mention of launch_campaign or pause_campaign as alternatives. The agent must infer which sibling applies from names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revoke_pbx_keyRevoke a PBX connection keyB
DestructiveIdempotent
Inspect

Revoke all passwords for one logical PBX key. Other independently named keys are unaffected.

NameRequiredDescriptionDefault
key_idYes
agent_idYes

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description still adds genuine value by disclosing the blast radius: ALL passwords for one logical key are revoked, while independently named keys survive. It stops short of saying whether active connections drop immediately or whether revocation is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and followed by the scoping constraint. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a destructive, idempotent mutation the description conveys scope well and annotations carry the safety signal, but it omits the two required parameters entirely and says nothing about the effect on in-flight calls or the response. Adequate, not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% and the description never mentions agent_id or key_id, leaving both required parameters undocumented. It hints at the 'logical PBX key' concept but gives no clue why an agent_id is needed alongside a key_id or what format either takes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb (revoke) and resource (all passwords for one logical PBX key), plus a scope clarification that other keys are unaffected. An agent can tell this is a targeted credential revocation, though it never names the adjacent sibling rotate_pbx_key, so the boundary between revoke and rotate must be inferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no explicit when-to-use guidance and no named alternative, despite siblings like rotate_pbx_key, create_pbx_key, and list_pbx_keys that an agent must choose between. The 'other keys unaffected' clause gives blast-radius scope but is not a routing instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rotate_pbx_keyRotate a PBX connection keyA
Destructive
Inspect

Rotate a named PBX key without changing its logical id. Returns the new password once. Previous passwords keep their original grace deadlines, up to 24 hours; grace_seconds zero immediately invalidates all previous passwords.

NameRequiredDescriptionDefault
key_idYes
agent_idYes
grace_secondsNo

TDQS

A4/5.0
Behavior5/5

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

Goes well beyond the destructiveHint annotation: it discloses that the new password is returned exactly once, that existing passwords retain their original grace deadlines capped at 24 hours, and that grace_seconds=0 invalidates all previous passwords immediately. These are the non-obvious operational consequences an agent needs before invoking a destructive, non-idempotent mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct and useful information, with the one-time-return warning front-loaded before the grace-period rules. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

For a 3-parameter destructive mutation with no output schema, it covers the important gaps: it describes the return value (new password, shown once) and the lifetime of old credentials. Missing only error/precondition behavior (what happens if the key does not exist) and auth requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 0%, so the description must carry parameter meaning. It explains grace_seconds thoroughly (default 24h window, zero means immediate cutover) but leaves agent_id and key_id to their bare names; those names are largely self-explanatory, so this lands at adequate rather than compensating fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

A specific verb and resource ("Rotate a named PBX key") plus a key differentiator: the logical id is preserved. That implicitly separates it from create_pbx_key (new key) and revoke_pbx_key (destroys the key), though neither sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The rotation semantics imply when to use it (need a fresh credential without re-provisioning the key), but the description never states when to prefer revoke_pbx_key or create_pbx_key instead, nor any prerequisite such as the key existing or required permissions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_agent_template_messageSend an AI agent's SMS templateA
Destructive
Inspect

Send one of an AI agent's published SMS templates, filled with the variables and slots you give, from a number in the agent's own project, with no call behind it. The same send, policy and charge as POST /v1/agents/{agent_id}/messages; a template, agent or project it cannot find is one not-found. Returned body, metadata, error and idempotency_key require sms:read, including on replays.

NameRequiredDescriptionDefault
toNoThe recipient, E.164. to_phone_number is accepted as its alias.
bulkNo
slotsNoValues for the template's model slots, each within its max_length.
countryNo
purposeNoThe message's purpose, authorized as on POST /v1/messages.
agent_idYes
languageNoThe language to send in. Text is chosen from the call or request language, then its base language (et-EE -> et), then the agent's primary language, then, as a last resort, the template's texts in language-code order.
metadataNo
number_idNo
variablesNoValues for the agent's declared variables the template references. A referenced required variable must be present; protected variables are refused (there is no confirmation to lean on).
categoriesNo
project_idNoOptional. The agent's own project; any other answers 404 exactly as a foreign agent does.
template_idYes
relationshipNo
message_classNo
from_number_idNo
recipient_typeNo
user_requestedNo
idempotency_keyNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
to_phone_numberNo
user_authorizationNo
from_phone_number_idNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already carry destructiveHint=true, idempotentHint=false and openWorldHint=true, yet the description still adds real context beyond them: no call is created behind the send, the charge/policy parity with the messages endpoint, not-found semantics for missing template/agent/project, and that body/metadata/error/idempotency_key require sms:read even on replays. It does not cover rate limits or the destructive consequences in detail, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense, front-loaded sentences that lead with purpose and pack auth, charge and error semantics without filler. The phrasing around not-found ('a template, agent or project it cannot find is one not-found') is slightly convoluted but earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

For a 23-parameter mutation with no output schema, the description supplies auth scope, error semantics, charge parity and fill behavior, which is substantial. The gap is parameter-level guidance for the long tail of undocumented fields and any return-shape framing, so it is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

With 23 parameters at only 30% schema coverage, the description must carry weight. It adds meaning for the fill inputs ('variables and slots you give') and constrains the sending number to the agent's own project, but the many undocumented params (bulk, country, categories, relationship, message_class, recipient_type, user_requested, user_authorization, etc.) get no explanation. It partially compensates rather than fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description states a specific verb (send), a specific resource (one of an AI agent's published SMS templates) and its scope (filled with the variables and slots you give, from a number in the agent's own project, with no call behind it). The template-driven, agent-scoped, call-less nature distinguishes it sharply from the generic send_sms sibling, even without naming it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is implied well – 'with no call behind it' and 'from a number in the agent's own project' tell you the context – and it points to POST /v1/agents/{agent_id}/messages as the equivalent operation. However it never names the obvious alternative (send_sms) or states when to prefer this templated path over it, so the when-not guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_smsSend an SMSA
Destructive
Inspect

Send a policy-gated outbound SMS from one of the workspace's numbers, charged to the workspace balance. purpose, categories and user_authorization are optional and recorded when sent (see the purpose property description for the advisory catalog); recipient_type is optional and recorded, never enforced. Returned body, metadata, error and idempotency_key require sms:read, including on replays.

NameRequiredDescriptionDefault
bodyYes
purposeNoOptional, free-form outbound purpose, recorded when sent; no purpose or token is ever refused. The documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support.
categoriesNo
project_idNo
campaign_idNo
relationshipNo
recipient_typeNoOptional, never enforced or required -- outbound is not restricted to business recipients. Persisted verbatim on the call row if sent; SMS has no recipient_type column, so it is accepted but not stored there.
user_requestedNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
to_phone_numberYes
user_authorizationNo
from_phone_number_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, but the description adds real context beyond them: policy gating, billing to the workspace balance, and the non-obvious permission requirement that returned body, metadata, error and idempotency_key need sms:read 'including on replays'. It stops short of saying whether a sent message can be recalled or what a policy denial returns, which keeps it out of 5 territory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph that front-loads the action and the billing/scope facts, then moves to optional-field semantics and finally the permission caveat. Every sentence carries information, though the run-on structure makes the recording-versus-enforcing distinctions slower to parse than a short bulleted layout would.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a destructive, open-world 12-parameter mutation with no output schema, the description covers billing, permission requirements and the recording semantics of the optional fields, which is more than most. It still omits failure modes (policy rejection, insufficient balance), whether an idempotency key can be supplied on input given that it is only mentioned as a return field, and any delivery-confirmation behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is only 25% across 12 parameters, so the description has to compensate and partly does: it clarifies that purpose, categories and user_authorization are optional and merely recorded, and that recipient_type is never enforced and is not even stored on the SMS row. However, body, to_phone_number, from_phone_number_id, project_id, campaign_id, relationship and user_requested remain undocumented in both the schema and the description, leaving a substantial gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The opening clause names a specific verb and resource ('Send a policy-gated outbound SMS') and adds two scoping facts an agent needs: the message goes from one of the workspace's numbers and is charged to the workspace balance. This is enough to separate it from create_outbound_call and send_agent_template_message 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.

Usage Guidelines3/5

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

Usage is only implied: 'policy-gated' hints that evaluate_outbound_policy may need to run first, but the description never says when to call this instead of authorize_outbound or create_outbound_call, nor what to do when the policy check fails. An agent gets a general sense of the tool's role but no explicit routing rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_agent_variablesSet an AI agent's call variablesA
Destructive
Inspect

Replace an AI agent's whole call variables config, as PUT /v1/agents/{agent_id}/variables does. It is checked and republished at once, so the next call uses it; nothing is stored on a refusal. Send base_revision from get_agent_variables to be refused, rather than overwrite, when the agent changed since. A refused config returns error.body.issues, each with a code and where it points.

NameRequiredDescriptionDefault
configYesAn agent's call variables, SMS templates and caller lookup. Exported from config_schema.py (the API's copy; tests pin the two equal) for the dashboard and the docs. tests/fixtures/call_variables/config_cases.json is the accept/reject contract.
agent_idYes
base_revisionNoThe revision this edit was based on. When sent and stale, the write is refused with 409 revision_conflict. Omit for last-write-wins.
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is known. The description adds substantive behavior beyond that: the config is validated and republished atomically so the next call uses it, a refusal persists nothing, and refusals surface error.body.issues with a code and pointer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tightly packed sentences, front-loaded with the PUT-equivalent replacement semantics, then atomicity, then concurrency guidance, then error shape. No filler; each sentence contributes a distinct fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

For a destructive, nested-config mutation with annotations present and no output schema, the description covers the write semantics, concurrency contract, and refusal error shape well. It does not mention what a successful response returns (e.g., the new revision), which would help an agent chain subsequent calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 75% and base_revision/organization_id already carry schema descriptions; the description largely restates the base_revision concurrency semantics rather than adding new meaning, and says nothing about agent_id or the structure of config. Baseline 3 is appropriate when the schema does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (replace), the exact resource (an AI agent's whole call variables config), and the scope (whole config, not a partial patch), explicitly equating it to PUT /v1/agents/{agent_id}/variables. This cleanly distinguishes it from the sibling get_agent_variables, which it also names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives clear conditional guidance: send base_revision (obtained from get_agent_variables) to be refused rather than overwrite on a concurrent change, or omit it for last-write-wins. It names the sibling source for base_revision but does not explicitly contrast with other write siblings like update_agent or set_agent_voice_stack.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_agent_voice_stackPublish an agent's voice stackA
Destructive
Inspect

Save revision-bound shared voice_setup for workflow publication, or explicitly publish an ordinary voice stack, optional outgoing-only version-pinned audio environment, and selected language profiles. Each locale override may set only exact voice, transcriber, and greeting; every resulting stack and existing credential binding is validated before a frozen publication is created. The environment is never caller/STT input. An engine whose agent-catalog row says has_language_axis false (a voice-to-voice engine) refuses languages, language_profiles and follow_caller with a 400 naming the field and the engine.

NameRequiredDescriptionDefault
modelNo
voiceNo
agent_idYes
languageNo
languagesNoWhen supplied replaces the selected language set.
listeningNoWhich languages calls listen for: open (default; the transcriber hears the other party in any language when it can) or agent_language (the call's own language only, slightly more accurate there). Frozen in the publication, so changing it republishes. Refused for an engine without a language axis.
navigationNoPer-agent phone-menu navigation (enabled, max_hold_seconds, max_navigation_seconds), validated exactly like PATCH /v1/agents/{agent_id}/voice-stack. On by default: enabled is true, false (off, kept by every save) or null (follow the platform default, on), and is required; an empty object is refused with navigation_enabled_required. Never refused for the engine or the languages: an agent that cannot navigate yet (GPT-Live) keeps the setting and the voice stack reports navigation.eligible and navigation.ineligible_reason.
transcriberNo
turn_takingNoPer-agent turn-taking tuning, validated exactly like PATCH /v1/agents/{agent_id}/voice-stack.
voice_setupNoShared finite input. Requires expected_voice_setup_revision beside it. Do not mix with transcriber or overlapping turn_taking fields. With a workflow, stages input for workflow publication; ordinary calls keep their published stack. Without a workflow, publishes a compatible cascade selection or saves an independent native-engine confirmation listener. Free-form business writes require the finite listener, with additional transcription usage; conversation input remains engine-owned. GPT-Live Transcribe is qualified for finite English input with platform-managed credentials.
voice_polishNoVoice polish. delivery: how the voice performs its speech (natural, lively, calm, precise); unset keeps provider defaults. acknowledgements: while a slow reply is still being prepared, say one short bounded phrase in the agent's own voice and language, at most once per turn, after delay_ms (default 1200) of silence; off unless enabled. Phrases default to the platform's reviewed list for the agent's language; a language without one stays silent unless phrases are supplied. tool_wait: what the caller hears while a slow tool call runs, after delay_ms (default 1000): mode sound plays a quiet typing bed cut when the tool finishes (any language); mode acknowledge speaks one short phrase in the agent's voice (phrases apply to acknowledge only); off by default.
first_messageNo
follow_callerNoAutomatic multilingual policy, on by default where the transcriber can listen for the whole selected set; send it only to record an explicit choice (false stays in the opening language, true is refused where it cannot follow). Omitted scope means selected. All resolves the exact stack's compatible set at publication; provider candidate limits, or the 32-language limit of an AI agent's selection, can require selected instead.
system_promptNo
voice_frontendNoConversation engine. Omit or cascade keeps STT/LLM/TTS. gpt_live is GPT-Live-1; transcriber/model/voice become the OpenAI projection (captions stub, backend Luna/Terra, gpt-live-1 voice). Switching back to cascade requires a full STT/LLM/TTS stack. Each engine declares whether it has a language axis as has_language_axis in get_agent_catalog.
answer_detectionNoPer-agent answer-detection policy, validated exactly like PATCH /v1/agents/{agent_id}/voice-stack.
audio_environmentNoExplicit provider-independent ambience pin. Off requires volume 0; every other catalogue preset requires 1 through 100.
language_profilesNoWhen supplied replaces sparse overrides; omit to preserve them.
language_profile_revisionNo
expected_voice_setup_revisionNo

TDQS

A3.5/5.0
Behavior4/5

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

The description adds meaningful behavior beyond the annotations: it says every stack and existing credential binding is validated before a frozen publication is created, that the environment is never caller/STT input, and that engines without a language axis refuse certain fields with a 400 naming the field and engine. This is useful context for a destructive publication operation, though it does not cover all mutation and idempotency semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the save/publish purpose and contains useful details, but the sentences are dense, jargon-heavy, and sometimes awkward. It avoids obvious waste, yet the phrase 'revision-bound shared voice_setup for workflow publication' and similar wording make it harder to parse than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

Given a complex 20-parameter mutation tool with no output schema and only annotation-level safety information, the description covers the main publication behavior and a key engine restriction. It is still not complete enough about revision requirements, interactions among model/voice/transcriber fields, and lifecycle implications for an agent to call it confidently without consulting the schema deeply.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is only 55% across 20 parameters, so the description must compensate. It adds important meaning for voice_setup, languages, language_profiles, audio_environment, follow_caller, and engine language-axis restrictions, but many parameters such as model, voice, first_message, system_prompt, answer_detection, and revision fields remain thinly explained or rely entirely on the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific action: saving or publishing an agent's voice stack, with a distinction between revision-bound shared voice_setup for workflow publication and explicitly publishing an ordinary voice stack. It is clear what the tool does, though it does not directly contrast itself with nearby tools such as get_agent_voice_stack or preview_voice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

It gives some usage context, including workflow publication versus ordinary publication, and warns not to mix voice_setup with transcriber or overlapping turn_taking fields. However, it does not explicitly say when to use this instead of get_agent_voice_stack, preview_voice, update_agent, or list_audio_environments.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_forwarding_testStart forwarding testCInspect

Manage an existing-number forwarding setup through the canonical service. No carrier settings change, number purchase or phone call occurs. Test verification requires linked call evidence.

NameRequiredDescriptionDefault
setup_idYes
conditionYes
project_idNo
base_revisionYes
idempotency_keyYes

TDQS

C2.5/5.0
Behavior3/5

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

The annotations already declare readOnly=false, destructive=false and openWorld=false; the description adds genuinely new information by ruling out three concrete side effects (carrier settings changes, number purchase, phone call) and by stating a verification dependency on linked call evidence. It omits other important behavior: nothing explains why an idempotency_key is mandatory while idempotentHint=false, nor what base_revision concurrency semantics apply, nor what authorization is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler, but the opening sentence is the least informative and leads with the generic verb 'Manage' rather than the test action. The negative scoping ('No carrier settings change...') earns its place; the middle sentence structure is serviceable but not front-loaded around what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a mutating tool with four required parameters, no output schema and zero schema descriptions, the description is thin but not empty — it establishes that this acts on an existing setup and produces no external carrier effect. It still leaves the agent unclear on what a 'started test' returns, what happens after starting, and how the required revision/idempotency parameters must be supplied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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

Schema description coverage is 0% across five parameters, and the description supplies no parameter meaning at all — setup_id, condition, project_id, base_revision and idempotency_key are never mentioned. base_revision (optimistic concurrency) and idempotency_key (retry safety) are non-obvious and would have been the highest-value items to explain, and their conflict with idempotentHint=false goes unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

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

The description frames the tool as 'Manage an existing-number forwarding setup', which is broader and vaguer than the title's 'Start forwarding test' — the actual action (initiating a test run) is never stated with a verb. It does usefully narrow the resource to an already-existing setup, which separates it from create_forwarding_setup, but an agent could not distinguish it from get_forwarding_test or cancel_forwarding_test on 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.

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no when-not-to-use guidance, and no sibling tool is named as an alternative (get_forwarding_test, cancel_forwarding_test, update_forwarding_setup all compete here). The clause 'Test verification requires linked call evidence' hints at a precondition for verification, but it is oblique and does not tell the agent when to call this versus inspecting an existing test.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_simulation_runStart a simulation runA
DestructiveIdempotent
Inspect

Start a run of a simulation suite. This SPENDS the workspace's budget -- every attempt is metered, and a voice attempt costs synthesis and transcription too. preview_simulation_run returns the estimate without starting anything. idempotency_key is required and is what makes a retry safe: the same key returns the same run instead of starting a second one.

NameRequiredDescriptionDefault
agent_idYes
suite_idYes
scenario_idsNoRun only these scenarios. Omit to run them all. This is how one run is confined to the offline scenarios and another to the spoken ones.
pinned_sourceNo
idempotency_keyYesRequired, and never generated for you: a key the caller chooses is the only thing that makes a retried start return the first run instead of paying for a second one.
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only say destructive/idempotent; the description goes well beyond them by disclosing the cost model (spends workspace budget, every attempt metered, voice attempts also pay synthesis and transcription) and by explaining that the required idempotency_key is what makes a retry safe rather than a second paid run. This is exactly the extra context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the cost warning front-loaded, then the alternative, then the retry-safety rule for the required key. No filler and no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

No output schema, and the description covers what matters most for a costly mutation: spend behavior and retry safety (partially describing the return, i.e. the same run comes back). It does not cover pinned_source semantics or failure behavior, so a small gap remains for a 6-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 50%; the description reinforces idempotency_key semantics but that parameter already has a thorough schema description, and agent_id, suite_id, and pinned_source get no meaning from either source. Baseline 3 is appropriate given the schema does part of the work and the remaining gaps are mostly self-explanatory identifiers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Start a run of a simulation suite') and implicitly separates itself from the sibling family (preview/cancel/get_simulation_run) by naming preview_simulation_run as the non-starting alternative. An agent can place this tool without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Names the alternative (preview_simulation_run) and its distinguishing condition ('returns the estimate without starting anything'), which is strong routing guidance. It does not spell out an explicit when-not-to-use or a prerequisite ordering (e.g., 'preview first'), so it falls just short of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_phone_serverTest a phone serverC
Destructive
Inspect

Dry-run verify a customer phone server before assigning a number to it.

NameRequiredDescriptionDefault
noteNo
phone_server_idYes

TDQS

C2.7/5.0
Behavior1/5

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

The description asserts a 'dry-run' (i.e., no side effects), while annotations declare readOnlyHint=false and destructiveHint=true, which is a direct conflict in the safety profile an agent relies on. No compensation is offered for permissions, external effects, or irreversibility despite destructiveHint and openWorldHint being true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with the purpose front-loaded and no filler. It is efficient, though its brevity contributes to the gaps elsewhere rather than being a structural flaw itself.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a non-idempotent, destructive, open-world operation with no output schema and 0% parameter coverage, one sentence is far too thin. It omits what the test actually exercises, what the caller receives, and whether the operation has lasting effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0% for two parameters, and the description mentions neither phone_server_id nor note. The only hint is the implied target ('a customer phone server'), which does not compensate for the undocumented note field or the expected ID format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb and resource ('Dry-run verify a customer phone server'), which is distinguishable from siblings like list_phone_servers and create_phone_server. It does not explicitly name related tools such as check_number_requirements, 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.

Usage Guidelines3/5

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

'Before assigning a number to it' gives a clear pre-assignment trigger, which is implied usage guidance. However, it names no alternatives (e.g., check_number_requirements) and gives no exclusions or note about what to do with the result.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_agentUpdate an AI agentC
Destructive
Inspect

Apply the same generic PATCH fields and validation as PATCH /v1/agents/{agent_id}; unknown fields retain REST's no-op compatibility behavior.

NameRequiredDescriptionDefault
modeNo
nameNo
modelNo
toolsNo
voiceNo
statusNo
agent_idYes
languageNo
metadataNo
transcriberNo
translationNo
webhook_urlNo
call_summaryNoThe free AI call summary: enabled (default true) and an optional goal line (at most 4000 characters) the call is judged against.
begin_messageNo
first_messageNo
system_promptNo
audio_stream_urlNo
recording_enabledNo
component_credential_bindingsNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare the operation is destructive, non-read-only, and not idempotent. The description adds useful REST-compatibility behavior: unknown fields are no-ops and validation matches PATCH /v1/agents/{agent_id}. It does not explain what may be destroyed or permission requirements, but it adds meaningful 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no obvious filler. However, for a complex 19-parameter mutation tool, it is too terse and relies on opaque REST jargon rather than structured guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

Given the high parameter count, nested objects, destructive annotation, and absence of an output schema, the description is incomplete. It does not cover parameter meaning, validation constraints, required permissions, or mutation effects beyond the generic PATCH and unknown-field behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 5% across 19 parameters, so the description would need to compensate. It mentions only unknown-field no-op behavior and adds no field-level semantics for name, mode, model, tools, voice, status, metadata, transcriber, translation, webhook_url, or other parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific update action tied to the REST PATCH /v1/agents/{agent_id} endpoint, making clear it modifies an existing agent. It is clear but does not explicitly differentiate usage from siblings such as create_agent, delete_agent, or get_agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

The description gives no explicit when-to-use guidance, exclusions, or alternatives. An agent can infer it is for updating an existing agent from the required agent_id and PATCH reference, but no direct routing guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_campaignUpdate a campaignA
Destructive
Inspect

Edit a campaign's settings. A draft accepts every setting; a scheduled or paused campaign accepts name, from_number_ids, calling windows and zone, retry policy, concurrency, ends_at and language (and scheduled_start_at while scheduled). A running campaign accepts no edits until it is paused. Returns the campaign and the list of changed fields.

NameRequiredDescriptionDefault
nameNo
ends_atNo
purposeNo
agent_idNo
contactsNoReplacement audience, created as a new list inside the edit (drafts only).
languageNo
time_zoneNoIANA time zone (default UTC), matched and stored like a contact's time_zone: ignoring case, another spelling of a zone stored as the zone it names, an offset such as UTC-5 refused.
campaign_idYes
retry_policyNo
consent_basisNo
time_zone_modeNo
calling_windowsNo
contact_list_idNo
from_number_idsNo
max_concurrencyNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
contact_list_nameNo
scheduled_start_atNo
contact_list_sourceNoHow the replacement audience was collected; recorded on the new list. Defaults to csv.
retry_policy_presetNo
reserved_concurrencyNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare write/destructive/non-idempotent, so the safety profile is covered. The description adds substantial value beyond that: state-dependent field acceptance rules and an explicit statement of what is returned ('the campaign and the list of changed fields'). It stops short of spelling out what the destructive contacts replacement actually overwrites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences, front-loaded with the action and then the state gating. Every sentence carries non-redundant information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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

For a 21-param mutation tool with no output schema, the description covers the critical behavioral contract (state gating) and explicitly describes the return payload. Remaining gaps are individual parameter semantics that the thin schema leaves undocumented, but nothing an agent needs to decide when the call is legal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is only 19% across 21 params, so the description must carry weight. It does enumerate which fields are editable per state (name, from_number_ids, calling windows/zone, retry policy, concurrency, ends_at, language, scheduled_start_at), but adds no format, default, or constraint detail for the many uncovered params (contacts, agent_id, consent_basis, retry_policy_preset, reserved_concurrency, etc.). Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb+resource ('Edit a campaign's settings') and immediately frames scope by campaign state, which cleanly separates it from the state-transition siblings (launch/pause/resume/cancel) and the pure read (get_campaign). An agent can tell what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Explicitly states when/when-not: drafts accept everything, scheduled/paused accept a named subset, and running campaigns accept nothing until paused. It implicitly routes the agent to pause_campaign first, which is exactly the alternative-selection guidance that matters here.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_forwarding_setupUpdate forwarding setupCInspect

Manage an existing-number forwarding setup through the canonical service. No carrier settings change, number purchase or phone call occurs. Test verification requires linked call evidence.

NameRequiredDescriptionDefault
stepNo
agent_idNo
setup_idYes
line_typeNo
number_idNo
conditionsNoalways is exclusive with conditional forwarding.
project_idNo
provider_keyNo
base_revisionYes
source_numberNoExisting business E.164 voice number; empty only for an unfinished draft. Ownership is not inferred.
attention_emails_enabledNoOpt in verified workspace owners to route/AI-line attention emails. Does not verify or enable carrier forwarding.

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare a non-read-only, non-idempotent, non-destructive mutation with a closed-world scope, and the description adds genuinely useful negative guarantees: no carrier settings change, no number purchase, no phone call. It omits important behavior for a mutation tool, such as the optimistic-concurrency role of base_revision and what happens to unspecified fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the scope and immediately followed by the most important negative guarantees. No filler, though the middle sentence could be folded in without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For an 11-parameter, five-step mutation tool with no output schema and only generic annotations, the description leaves the workflow semantics largely unexplained—the agent cannot tell what 'step' selects or how base_revision must be supplied. What is present is accurate but insufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is only 27%, yet the description explains almost nothing about the 11 parameters—the meaning of the 'step' enum values, base_revision, line_type, number_id, provider_key, and agent_id are all left undocumented. It touches source_number ('existing-number') and the test step's evidence precondition, but this is far from compensating for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description names the resource (an existing-number forwarding setup) and the constraint that only existing setups are touched, which distinguishes it implicitly from create_forwarding_setup. However, the operative verb is the vague 'Manage' rather than 'update', and no sibling is named directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no explicit guidance on when to call this versus create_forwarding_setup, get_forwarding_setup, start_forwarding_test, or cancel_forwarding_test—all of which appear in the sibling list. The phrase 'existing-number forwarding setup' hints that creation is excluded, but the agent must infer that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_number_rulesUpdate number rulesC
Destructive
Inspect

Update customer-facing Number rules for one phone number.

NameRequiredDescriptionDefault
incomingNo
outgoingNo
number_idYes
recordingNo

TDQS

C2.1/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. What the description should add but does not: whether nested objects like incoming are replaced wholesale or merged, whether omitting outgoing leaves it untouched or clears it, and whether recording controls can be disabled. For a destructive mutation with deep nested payloads, that silence is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with no filler, which is good structurally. However, the brevity crosses into under-specification rather than conciseness: 'customer-facing' adds ambiguity rather than information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

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

A destructive, non-idempotent mutation with nested objects, no output schema, and zero parameter documentation. The description leaves the agent unable to know what a partial payload does to existing rules or how the outgoing and recording blocks interact with the number's current state.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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

Schema description coverage is 0% across four parameters, three of which are nested objects containing enums (when_called), arrays (allowed_agents, allowed_countries), and a boolean (can_be_used_as_caller_id). The description mentions none of these, so the agent gets no meaning beyond raw field names – exactly the case the description is supposed to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

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

It states a specific verb and resource (update Number rules) and scopes it to one phone number, so the basic intent is legible. But 'Number rules' is never unpacked – nothing indicates that the rules comprise incoming routing, outgoing permissions, and recording settings, which is the real substance of the operation. The read counterpart get_number_rules is never mentioned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no statement of when to use this versus get_number_rules (read) or request_number (provision), and no prerequisites or caveats are given. An agent must infer entirely from the name that this is the mutation path for an existing number.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updates
    • Changedauthorize_outbound2 fields changed
      • changedInput schema / properties / purpose / description
        Previous value: -"Required, free-form outbound purpose declaration -- never refused for being novel. Any non-empty token is accepted; the documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support."New value: +"Optional, free-form outbound purpose, recorded when sent; no purpose or token is ever refused. The documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support."
      • changedInput schema / properties / user_authorization / description
        Previous value: -"Who authorized the call and why ({authorized_by, reason}); for voice, user_requested counts only with one."New value: +"Optional: who authorized the call and why ({authorized_by, reason}). Recorded, never required."
    • Changedcreate_campaign1 field changed
      • changedInput schema / properties / purpose / description
        Previous value: -"Required, free-form outbound purpose declaration -- never refused for being novel. Any non-empty token is accepted; the documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support."New value: +"Optional, free-form outbound purpose, recorded when sent; no purpose or token is ever refused. The documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support."
    • Changedcreate_outbound_call2 fields changed
      • changedInput schema / properties / purpose / description
        Previous value: -"Required, free-form outbound purpose declaration -- never refused for being novel. Any non-empty token is accepted; the documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support."New value: +"Optional, free-form outbound purpose, recorded when sent; no purpose or token is ever refused. The documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support."
      • changedInput schema / required
        Previous value: -[
        -  "project_id",
        -  "from_number_id",
        -  "to",
        -  "purpose",
        -  "user_authorization"
        -]New value: +[
        +  "project_id",
        +  "from_number_id",
        +  "to"
        +]
    • Changedevaluate_outbound_policy2 fields changed
      • changedInput schema / properties / purpose / description
        Previous value: -"Required, free-form outbound purpose declaration -- never refused for being novel. Any non-empty token is accepted; the documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support."New value: +"Optional, free-form outbound purpose, recorded when sent; no purpose or token is ever refused. The documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support."
      • changedInput schema / required
        Previous value: -[
        -  "country",
        -  "purpose",
        -  "to",
        -  "from_number_id"
        -]New value: +[
        +  "country",
        +  "to",
        +  "from_number_id"
        +]
    • Changedpreview_voice2 fields changed
      • changedInput schema / properties / audio_environment / description
        Previous value: -"Optional selected ambience mixed only into this preview. When present, text must be non-blank and explicit; the language and text are never replaced."New value: +"Optional selected ambience mixed only into this preview. For a text-to-speech voice, text must then be non-blank and explicit; a conversation-engine voice needs no text and the ambience is mixed over its fixed sample. The language and text are never replaced."
      • changedInput schema / properties / text / description
        Previous value: -"Optional bounded caller sentence. It is synthesized but not persisted or echoed."New value: +"Optional bounded caller sentence for a text-to-speech voice. It is synthesized but not persisted or echoed. A conversation-engine voice refuses it (voice_preview_fixed_sample) and plays Skysay's fixed sample."
    • Changedsend_sms2 fields changed
      • changedInput schema / properties / purpose / description
        Previous value: -"Required, free-form outbound purpose declaration -- never refused for being novel. Any non-empty token is accepted; the documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support."New value: +"Optional, free-form outbound purpose, recorded when sent; no purpose or token is ever refused. The documented advisory catalog is: appointment, booking_confirmation, callback_requested, customer_outreach, delivery_notification, ops_alert, other, payment_reminder, personal_errand, reservation, status_check, support."
      • changedInput schema / required
        Previous value: -[
        -  "from_phone_number_id",
        -  "to_phone_number",
        -  "body",
        -  "purpose"
        -]New value: +[
        +  "from_phone_number_id",
        +  "to_phone_number",
        +  "body"
        +]
    • Changedupdate_number_rules1 field changed
      • removedInput schema / properties / incoming / properties / fallback
        Removed value: -{
        -  "type": "object"
        -}
  2. 10 tool updates
    • Addedcancel_forwarding_test
    • Addedcreate_forwarding_setup
    • Addedget_forwarding_instructions
    • Addedget_forwarding_setup
    • Addedget_forwarding_test
    • Addedlist_forwarding_setups
    • Addedrecord_forwarding_instructions
    • Addedrecord_forwarding_stop
    • Addedstart_forwarding_test
    • Addedupdate_forwarding_setup
  3. 5 tool updates
    • Addedcreate_pbx_key
    • Addedlist_pbx_keys
    • Addedrevoke_pbx_key
    • Addedrotate_pbx_key
    • Changedset_agent_voice_stack1 field changed
      • changedInput schema / properties / follow_caller / description
        Previous value: -"Explicit automatic multilingual policy. Omitted scope means selected. All resolves the exact stack's compatible set at publication; provider candidate limits, or the 32-language limit of an AI agent's selection, can require selected instead."New value: +"Automatic multilingual policy, on by default where the transcriber can listen for the whole selected set; send it only to record an explicit choice (false stays in the opening language, true is refused where it cannot follow). Omitted scope means selected. All resolves the exact stack's compatible set at publication; provider candidate limits, or the 32-language limit of an AI agent's selection, can require selected instead."
  4. 1 tool update
    • Changedset_agent_voice_stack1 field changed
      • addedInput schema / properties / listening
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Which languages calls listen for: open (default; the transcriber hears the other party in any language when it can) or agent_language (the call's own language only, slightly more accurate there). Frozen in the publication, so changing it republishes. Refused for an engine without a language axis.",
        +  "properties": {
        +    "mode": {
        +      "enum": [
        +        "open",
        +        "agent_language"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
  5. 1 tool update
    • Changedset_agent_voice_stack1 field changed
      • changedInput schema / properties / follow_caller / description
        Previous value: -"Explicit automatic multilingual policy. Omitted scope means selected. All resolves the exact stack's compatible set at publication; provider candidate limits can require selected instead."New value: +"Explicit automatic multilingual policy. Omitted scope means selected. All resolves the exact stack's compatible set at publication; provider candidate limits, or the 32-language limit of an AI agent's selection, can require selected instead."
  6. 1 tool update
    • Changedset_agent_voice_stack1 field changed
      • changedInput schema / properties / navigation / description
        Previous value: -"Per-agent phone-menu navigation (enabled, max_hold_seconds, max_navigation_seconds), validated exactly like PATCH /v1/agents/{agent_id}/voice-stack. On by default: enabled is true, false (off, kept by every save) or null (follow the platform default, on), and is required; an empty object is refused with navigation_enabled_required. Never refused for the engine or the languages: an agent that cannot navigate yet (GPT-Live, or only Estonian or Finnish) keeps the setting and the voice stack reports navigation.eligible and navigation.ineligible_reason."New value: +"Per-agent phone-menu navigation (enabled, max_hold_seconds, max_navigation_seconds), validated exactly like PATCH /v1/agents/{agent_id}/voice-stack. On by default: enabled is true, false (off, kept by every save) or null (follow the platform default, on), and is required; an empty object is refused with navigation_enabled_required. Never refused for the engine or the languages: an agent that cannot navigate yet (GPT-Live) keeps the setting and the voice stack reports navigation.eligible and navigation.ineligible_reason."
  7. 4 tool updates
    • Changedcreate_agent1 field changed
      • changedInput schema / properties / voice_frontend / enum
        Previous value: -[
        -  "cascade",
        -  "gpt_live",
        -  "gemini_live"
        -]New value: +[
        +  "cascade",
        +  "gpt_live",
        +  "gemini_live",
        +  "eleven_realtime"
        +]
    • Addeddelete_campaign
    • Addeddelete_simulation_suite
    • Changedset_agent_voice_stack1 field changed
      • changedInput schema / properties / voice_frontend / enum
        Previous value: -[
        -  "cascade",
        -  "gpt_live",
        -  "gemini_live"
        -]New value: +[
        +  "cascade",
        +  "gpt_live",
        +  "gemini_live",
        +  "eleven_realtime"
        +]
  8. 5 tool updates
    • Changedconnect_external_agent1 field changed
      • addedInput schema / properties / call_summary
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The free AI call summary: enabled (default true) and an optional goal line (at most 4000 characters) the call is judged against.",
        +  "properties": {
        +    "enabled": {
        +      "type": "boolean"
        +    },
        +    "goal": {
        +      "maxLength": 4000,
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcreate_agent1 field changed
      • addedInput schema / properties / call_summary
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The free AI call summary: enabled (default true) and an optional goal line (at most 4000 characters) the call is judged against.",
        +  "properties": {
        +    "enabled": {
        +      "type": "boolean"
        +    },
        +    "goal": {
        +      "maxLength": 4000,
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedget_call_summary
    • Changedset_agent_voice_stack1 field changed
      • changedInput schema / properties / voice_setup / description
        Previous value: -"Shared finite input. Requires expected_voice_setup_revision beside it. Do not mix with transcriber or overlapping turn_taking fields. With a workflow, stages input for workflow publication; ordinary calls keep their published stack. Without a workflow, publishes a compatible cascade selection. Native free-form input is engine-owned. GPT-Live Transcribe is workflow-only, English and platform-managed."New value: +"Shared finite input. Requires expected_voice_setup_revision beside it. Do not mix with transcriber or overlapping turn_taking fields. With a workflow, stages input for workflow publication; ordinary calls keep their published stack. Without a workflow, publishes a compatible cascade selection or saves an independent native-engine confirmation listener. Free-form business writes require the finite listener, with additional transcription usage; conversation input remains engine-owned. GPT-Live Transcribe is qualified for finite English input with platform-managed credentials."
    • Changedupdate_agent1 field changed
      • addedInput schema / properties / call_summary
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The free AI call summary: enabled (default true) and an optional goal line (at most 4000 characters) the call is judged against.",
        +  "properties": {
        +    "enabled": {
        +      "type": "boolean"
        +    },
        +    "goal": {
        +      "maxLength": 4000,
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
  9. 3 tool updates
    • Addedcheck_agent_deletion
    • Addeddelete_agent
    • Addedduplicate_agent
  10. 1 tool update
    • Changedset_agent_voice_stack2 fields changed
      • addedInput schema / properties / expected_voice_setup_revision
        Added value: +{
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / voice_setup
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Shared finite input. Requires expected_voice_setup_revision beside it. Do not mix with transcriber or overlapping turn_taking fields. With a workflow, stages input for workflow publication; ordinary calls keep their published stack. Without a workflow, publishes a compatible cascade selection. Native free-form input is engine-owned. GPT-Live Transcribe is workflow-only, English and platform-managed.",
        +  "properties": {
        +    "listener": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "oneOf": [
        +            {
        +              "not": {
        +                "required": [
        +                  "credential_id"
        +                ]
        +              },
        +              "properties": {
        +                "credential_source": {
        +                  "enum": [
        +                    "platform_managed"
        +                  ]
        +                }
        +              }
        +            },
        +            {
        +              "properties": {
        +                "credential_source": {
        +                  "enum": [
        +                    "customer_byok"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "credential_id"
        +              ]
        +            }
        +          ],
        +          "properties": {
        +            "credential_id": {
        +              "maxLength": 128,
        +              "type": "string"
        +            },
        +            "credential_source": {
        +              "enum": [
        +                "platform_managed",
        +                "customer_byok"
        +              ],
        +              "type": "string"
        +            },
        +            "languages": {
        +              "items": {
        +                "maxLength": 64,
        +                "type": "string"
        +              },
        +              "maxItems": 128,
        +              "minItems": 1,
        +              "type": "array"
        +            },
        +            "model": {
        +              "maxLength": 128,
        +              "type": "string"
        +            },
        +            "registry_name": {
        +              "pattern": "^[a-z][a-z0-9_]{0,63}$",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "registry_name",
        +            "model",
        +            "languages",
        +            "credential_source"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "turn_taking": {
        +      "additionalProperties": false,
        +      "description": "Explicit values override the preset. Workflow bounds: 300–3000 ms silence, 0–1000 ms interruption. Cascade bounds: 100–2000 and 80–2000 respectively.",
        +      "properties": {
        +        "interruption_sensitivity": {
        +          "enum": [
        +            "balanced",
        +            "low",
        +            "high"
        +          ],
        +          "type": "string"
        +        },
        +        "min_speech_ms": {
        +          "maximum": 2000,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "silence_hold_ms": {
        +          "maximum": 3000,
        +          "minimum": 100,
        +          "type": "integer"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "listener",
        +    "turn_taking"
        +  ],
        +  "type": "object"
        +}
  11. 1 tool update
    • Changedset_agent_voice_stack2 fields changed
      • changedInput schema / properties / navigation / description
        Previous value: -"Per-agent phone-menu navigation (enabled, max_hold_seconds, max_navigation_seconds), validated exactly like PATCH /v1/agents/{agent_id}/voice-stack. For an agent on GPT-Live, enabled true is refused with navigation_engine_not_supported (also when switching a navigating agent to GPT-Live)."New value: +"Per-agent phone-menu navigation (enabled, max_hold_seconds, max_navigation_seconds), validated exactly like PATCH /v1/agents/{agent_id}/voice-stack. On by default: enabled is true, false (off, kept by every save) or null (follow the platform default, on), and is required; an empty object is refused with navigation_enabled_required. Never refused for the engine or the languages: an agent that cannot navigate yet (GPT-Live, or only Estonian or Finnish) keeps the setting and the voice stack reports navigation.eligible and navigation.ineligible_reason."
      • addedInput schema / properties / navigation / required
        Added value: +[
        +  "enabled"
        +]
  12. 4 tool updates
    • Addedcreate_wallet_topup
    • Changedrequest_number1 field changed
      • addedInput schema / properties / customer_purchase_confirmed
        Added value: +{
        +  "description": "Set true only after the customer approves the number request and displayed prices. Number setup and rental require purchased funds; browser welcome credit cannot fund this request.",
        +  "type": "boolean"
        +}
    • Changedset_agent_variables1 field changed
      • addedInput schema / $defs / field / properties / keypad
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The call may enter this value on a phone menu keypad. It is never given to the model or any prompt, only keyed through the keypad.",
        +  "properties": {
        +    "class": {
        +      "enum": [
        +        "reference",
        +        "card",
        +        "pin",
        +        "government_id",
        +        "date_of_birth",
        +        "other"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "class"
        +  ],
        +  "type": "object"
        +}
    • Changedset_agent_voice_stack1 field changed
      • addedInput schema / properties / navigation
        Added value: +{
        +  "description": "Per-agent phone-menu navigation (enabled, max_hold_seconds, max_navigation_seconds), validated exactly like PATCH /v1/agents/{agent_id}/voice-stack. For an agent on GPT-Live, enabled true is refused with navigation_engine_not_supported (also when switching a navigating agent to GPT-Live).",
        +  "type": "object"
        +}
  13. 63 tool updates
    • First observedaccount_overview
    • First observedadd_contacts
    • First observedadd_do_not_call
    • First observedauthorize_outbound
    • First observedcancel_campaign
    • First observedcancel_simulation_run
    • First observedcheck_number_requirements
    • First observedconnect_external_agent
    • First observedcreate_agent
    • First observedcreate_campaign
    • First observedcreate_contact_list
    • First observedcreate_outbound_call
    • First observedcreate_phone_server
    • First observedcreate_simulation_suite
    • First observedcreate_trial_call
    • First observedevaluate_outbound_policy
    • First observedget_agent
    • First observedget_agent_catalog
    • First observedget_agent_variables
    • First observedget_agent_voice_stack
    • First observedget_call
    • First observedget_call_recording
    • First observedget_call_transcript
    • First observedget_call_translations
    • First observedget_campaign
    • First observedget_capabilities
    • First observedget_contact_list
    • First observedget_coverage
    • First observedget_message_translations
    • First observedget_number_catalog
    • First observedget_number_rules
    • First observedget_simulation_run
    • First observedget_simulation_run_results
    • First observedget_simulation_suite
    • First observedhangup_call
    • First observedlaunch_campaign
    • First observedlist_agents
    • First observedlist_audio_environments
    • First observedlist_calls
    • First observedlist_campaigns
    • First observedlist_contact_lists
    • First observedlist_contacts
    • First observedlist_conversations
    • First observedlist_numbers
    • First observedlist_phone_servers
    • First observedlist_simulation_suites
    • First observedpause_campaign
    • First observedpreview_simulation_run
    • First observedpreview_voice
    • First observedrequest_call_translation
    • First observedrequest_capabilities
    • First observedrequest_message_translation
    • First observedrequest_number
    • First observedresume_campaign
    • First observedsend_agent_template_message
    • First observedsend_sms
    • First observedset_agent_variables
    • First observedset_agent_voice_stack
    • First observedstart_simulation_run
    • First observedtest_phone_server
    • First observedupdate_agent
    • First observedupdate_campaign
    • First observedupdate_number_rules

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Enables MCP clients to manage AI voice assistants, place calls, run campaigns, handle contacts and knowledge bases, and read call transcripts. It also provides account, phone number, dialer, and analytics tools through a hosted or local MCP connection.
    25
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to provision phone numbers, send SMS, place AI voice calls, and react to inbound events via the Dial communication stack, all through MCP tools.
    539 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Gives AI agents phone numbers, email, SMS, and voice calls as MCP tools, enabling them to provision numbers, capture 2FA codes, send messages, and make calls.
    15
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.