Skip to main content
Glama

Server Details

AI phone secretary: place calls, read transcripts, list calls, agents, and stats.

Ownership verified
Status
Healthy
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP
URL
Repository
KaiCalls/kaicalls-mcp
GitHub Stars
0
Server Listing
KaiCalls MCP Server

TDQS

A3.6/5.0

Scored across 69 tools

Disambiguation3/5

Many tools are well-distinct (e.g., call vs SMS vs billing), but several overlap significantly: get_phone_flow/update_phone_flow/set_up_phone_system all manage the phone system; buy_number/request_extra_number/attach_number/detach_number all handle number changes; check_call_status/get_call_recording/get_transcript all deal with individual calls. Descriptions help but some boundaries are fuzzy.

Naming Consistency4/5

Most tools follow a clear verb_noun pattern (list_, get_, set_, update_, create_, etc.), with consistent snake_case. Minor deviations: 'check_call_status' uses 'check' vs 'get', and 'make_call' vs 'list_recent_calls' but overall consistent.

Tool Count2/5

69 tools is far beyond typical MCP server scope, even for a comprehensive platform like KaiCalls. The high count increases cognitive load and selection complexity, and many tools are redundant or overly granular (e.g., separate tools for get_activation_status, get_phone_system_status, get_setup_recovery_status).

Completeness3/5

The surface covers many domains (agents, numbers, calls, SMS, billing, campaigns, knowledge, evals, webhooks), but there are notable gaps: no tool to list/update/delete leads (only upsert_lead), no agent deletion, no campaign update/delete, no direct SMS delete or archive, no voicemail retrieval beyond listing. Some lifecycle steps require approval or manual owner action, creating dead ends.

Available Tools

69 tools
add_team_phoneAdd Team PhoneA
DestructiveIdempotent
Inspect

Add a teammate's (or the owner's) cell to the phone system's team ring group so it rings before Kai answers. Idempotent — a cell already in the group reports ring_group already_member. Owners and admins are also registered on the admin roster, so calling the business line from that cell reaches the admin secretary; a member only rings. The business's own forwarded-from office line is refused (forwarding_loop) because ringing it would bounce the call straight back. Requires the phone system to be set up first (set_up_phone_system). Mirrors POST /api/v1/phone-system action=add_ring_group_member.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name for this teammate (optional).
roleNomember only rings; owner and admin also get admin-secretary access from this cell. Defaults to admin.
business_idNoBusiness ID (required when the token can access multiple businesses).
phone_numberYesThe cell to add, US format (e.g. (908) 555-1234 or +19085551234).

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNoPresent when success is false.
errorNoPresent when success is false
memberNo
successYesWhether the tool completed successfully
business_idNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover idempotency, mutation, and open-world hints, and the description adds substantial context beyond them: the exact already_member and forwarding_loop error outcomes, the admin-secretary routing difference, and the refusal of the business's own forwarded line. This materially enriches what an agent knows before calling.

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?

Six sentences, each carrying distinct information (purpose, idempotency, role behavior, loop refusal, prerequisite, API mirror), with the purpose front-loaded. Slightly redundant with the schema's role description, and the API mirror sentence is marginal, but nothing is 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?

For a 4-parameter mutation tool with full schema coverage, a rich annotations block, and an output schema, the description covers purpose, edge-case error conditions, prerequisites, and role semantics. Return-value explanation is unnecessary given the output schema exists, and no gap an agent needs to invoke correctly 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 100%, so the baseline is 3; the schema already documents the role enum semantics and phone format. The description adds one genuinely parameter-level fact — that the business's forwarded office line is refused for phone_number — but otherwise mostly restates role behavior already present in the schema.

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

Purpose5/5

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

The first sentence states a specific verb ('Add'), a specific resource ('the phone system's team ring group'), and the operational goal (rings before Kai answers). It clearly differentiates from siblings like attach_number and set_owner_phone by scoping this tool to the ring-group membership action.

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

Usage Guidelines4/5

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

The description provides explicit context: it covers both teammates and owners/admins, notes idempotency behavior, and names the prerequisite set_up_phone_system. It stops short of explicitly contrasting with siblings (e.g., when to use set_owner_phone instead), so it lacks an exclusion-based routing statement.

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

attach_numberAttach Phone NumberA
DestructiveIdempotent
Inspect

Assign a phone number already in the KaiCalls registry pool to a business (and optionally route it directly to an agent). Does NOT purchase a new number — use search_available_numbers + buy_number for that. Mirrors POST /api/v1/phone-numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idNoAgent ID to route this number to directly (optional).
business_idNoBusiness ID (optional only when the token can access exactly one business).
phone_numberYesE.164 phone number already in the registry.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
numberNo
successYesWhether the tool completed successfully
business_idNo

TDQS

A4.2/5.0
Behavior3/5

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

The description adds context about what the operation does (assigns existing number, optional routing) and mirrors the POST endpoint, but it doesn't explain the destructive implications indicated by destructiveHint=true. Annotations already carry some safety signals, but the description could say more about what changes or gets detached/replaced.

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: the main action, the key non-goal with alternatives, and the API mapping. No filler and every sentence contributes.

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 mutation with an output schema, the description provides the key disambiguation from buy_number, states the registry requirement, and mirrors the API endpoint. It is sufficient for an agent to correctly select and invoke this tool, though a bit more detail on side effects would make it fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains each parameter. The description reinforces that phone_number must already be in the registry pool, which adds a small amount of usage context over the schema but is mostly redundant with parameter descriptions.

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

Purpose5/5

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

Description clearly states the tool's action: assigning an already-owned pool number to a business and optionally routing to an agent. It also differentiates from buy_number by saying it does NOT purchase a new number, distinguishing it from the closest sibling.

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

Usage Guidelines5/5

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

Explicitly says when not to use it and points to alternatives: 'Does NOT purchase a new number — use search_available_numbers + buy_number for that.' This gives an agent clear routing between the related tools.

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

buy_numberBuy Phone NumberA
DestructiveIdempotent
Inspect

Request a real phone-number purchase. This is APPROVAL-GATED: the carrier bills immediately on execution, so the tool only prepares a request for authenticated owner review. Caller-supplied human_confirmed, dashboard_session, or system_policy fields never authorize execution. Relay the stored request and review URL to the owner; do not claim a number was purchased while approval is pending. Existing entitlement and carrier reservation checks still apply. Mirrors POST /api/v1/phone-numbers/purchase via numbers.purchase.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoWho is asking: { type: agent|human|system|integration, id, display_name }.
reasonNoOptional reason recorded in the durable audit.
dry_runNoValidate tenant, scope, and policy without buying anything.
agent_idNoAgent ID to route this number to directly once purchased (optional; requires the number to also be voice-runtime-imported, which is not guaranteed at purchase time — prefer a follow-up attach_number call).
authorityNoAttribution only. human_confirmed and other caller-supplied modes cannot authorize a purchase. Authenticated owner review of the exact stored request is required.
source_refNoExternal source reference, such as a ticket or automation run ID.
business_idNoBusiness ID (optional only when the token can access exactly one business).
phone_numberYesThe exact E.164 phone number to purchase, as returned by search_available_numbers.
idempotency_keyNoStable key for the purchase request; repeating it returns the original outcome. Defaults to a key derived from the phone number — pass your own to retry a previously failed purchase.
queue_for_approvalNoCreate a durable owner-review request (default true). Setting false returns needs_approval, but an authority-envelope retry still cannot execute.

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
errorNoPresent when success is false
resultNoOn executed: { number, vapi_registered, agent_attached, compliance: { high_risk_category, disclosure_note } }.
statusNo
messageNo
successYesWhether the tool completed successfully
summaryNo
approvalNo
request_idNo
risk_levelNo
business_idNo

TDQS

A4.4/5.0
Behavior5/5

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

The description adds critical behaviors well beyond what annotations indicate: it says the carrier bills immediately on approval, supplies caller-supplied authorization is insufficient, and emphasizes not to claim the purchase is complete while approval is pending. It states that existing entitlement and carrier reservation checks apply, giving a clear failure-mode expectation. This is valuable behavioral disclosure not present in annotations.

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

Conciseness4/5

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

The description is front-loaded with the key purpose, approval-gating status, and immediate consequence, which is excellent. The final 'Mirrors POST /api/v1/phone-numbers/purchase' sentence is perhaps a token technical detail that might be redundant, but the six-sentence structure is compact and informative without being overly verbose.

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

Completeness5/5

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

For a tool with high safety implications, approval gating, and several behavioral caveats, the description addresses the most crucial things an agent needs to know to invoke it correctly: it's approval-gated, how to handle the response, what never authorizes, and that existing checks apply. With the output schema present, there is no need to explain return values here, so the description is 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?

The schema covers 100% of the 10 parameters with detailed descriptions, so the top-line description does not need to explain them. The description mentions caller-supplied fields (human_confirmed, dashboard_session, system_policy) only to state they never authorize, which slightly deepen the meaning of the authority parameter but mostly repeats what is already in the schema. Baseline 3 applies.

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

Purpose5/5

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

The description clearly states the tool 'Request a real phone-number purchase' and immediately breaks the meaning of the name buy_number by signaling it is approval-gated, so it only prepares an owner-review request rather than authorizing an immediate purchase. This distinguishes it from a simple car-buying action and is distinguishable from sibling tools like request_extra_number, especially since the description describes a specific API flow and an explicit 'Mirrors POST /api/v1/phone-numbers/purchase' behavior.

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 clearly sets the context: use this tool to purchase a real number, and after invocation you must relay the stored request and review URL to the owner rather than treating the purchase as complete. It does not explicitly name when not to use this tool or alternative sibling tools (e.g., attach_number), but the approval-gated flow and the 'do not claim a number was purchased' instruction are strong usage guidance.

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

check_call_statusCheck Call StatusA
Read-onlyIdempotent
Inspect

Check the status of a call by its ID

ParametersJSON Schema
NameRequiredDescriptionDefault
call_idYesThe call ID to check

Output Schema

ParametersJSON Schema
NameRequiredDescription
callNo
errorNoPresent when success is false
successYesWhether the tool completed successfully

TDQS

A4/5.0
Behavior3/5

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

Annotations already provide a strong behavioral profile: readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds no additional behavioral context beyond saying 'Check', which is consistent with the annotations. It doesn't disclose potential quirks like whether the response is cached or live, but the annotation coverage lowers the burden.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with zero wasted words. It states the verb, the target resource, and the parameter in one pass, making it easy to scan and understand.

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 low-complexity tool with one parameter, strong annotations, and an output schema, the description covers the essential selection and invocation context. It doesn't mention how to obtain a valid call_id or enumerate possible statuses, but those are secondary given the output schema and simple purpose.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already explains call_id as 'The call ID to check'. The description's 'by its ID' adds no quantitative or formatting detail beyond the schema, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Check'), a clear resource ('status of a call'), and the key discriminator ('by its ID'). This differentiates the tool from siblings like list_recent_calls, get_call_recording, and get_phone_system_status without requiring the agent to infer intent.

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 phrase 'by its ID' provides clear context for when to use this tool: when the agent has a specific call_id and needs that call's status. It doesn't explicitly name alternative tools or exclusions, but for a simple single-resource lookup the usage context is reasonably clear.

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

choose_customer_routeChoose Customer RouteA
DestructiveIdempotent
Inspect

APPROVAL-GATED. After setup proof is complete, save forwarding, published_number, both, or testing. This unlocks the command center but does not claim customer coverage; selected live routes remain pending until independently verified. A number is not fully set up until the owner's own phone is on file (see get_activation_status / set_owner_phone) and forwarding is verified.

ParametersJSON Schema
NameRequiredDescriptionDefault
choiceYes
authorityNo
business_idYes
source_phoneNoExisting business number, required for forwarding or both.
idempotency_keyYes
activation_session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
routesNo
statusNo
successYesWhether the tool completed successfully
business_idNo
instructionsNo
deployment_choiceNo
activation_session_idNo
command_center_unlockedNo
customer_coverage_activeNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already signal not read-only and idempotent true; the description adds genuinely useful behavior: approval-gating, that it does not claim customer coverage, that the number is not fully set up until forwarding/owner phone are verified. This goes beyond the flag values.

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?

Every sentence carries distinct information: approval flag, precondition + action, downstream effect, and caveat with related tools. 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?

The description covers approval state, prerequisites, side effects, and what it does NOT do (claim customer coverage). Given the output schema and annotations, most operation-level context is present; the main gap is richer parameter semantics.

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 very low (only source_phone is self-explanatory). The description clarifies the meaning of the choice values (forwarding/published_number/both/testing), but leaves key parameters like business_id, activation_session_id, idempotency_key, and authority unexplained. The description does not sufficiently compensate for the schema's gaps.

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 action ('save forwarding, published_number, both, or testing') and the concrete consequence ('unlocks the command center'). It is clear that this is a configuration/selection operation, not a validation step, and it distinguishes the tool from later verification steps.

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 states a precondition ('after setup proof is complete'), warns about approval gating, and points to get_activation_status/set_owner_phone for verification. It does not explicitly say 'use this when X, otherwise use sibling Y,' but the guidance is sufficient for basic routing.

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

configure_agent_business_rulesConfigure Agent Business RulesA
DestructiveIdempotent
Inspect

Safely add or replace a named operational rules section inside an agent inbound prompt, then route the prompt patch through the governed agent.patch broker. Use this for cross-business handoffs, callback language, alert promises, and client-specific operating rules without round-tripping the whole prompt manually.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoreplace (default) or append.
actorNoWho is asking: { type: agent|human|system|integration, id, display_name }.
rulesYesPlain-language operational rules to insert as bullets, e.g. callback capture, sister-location boundaries, urgent alert handling.
dry_runNoValidate and show the prompt patch metadata without writing.
agent_idYesKaiCalls agent ID to update
authorityNoAttribution only. Caller-supplied authority cannot authorize live changes; authenticated owner review of the stored request is required.
source_refNoExternal source reference, such as a support ticket or assistant conversation ID.
business_idNoBusiness ID. Required when the agent has multiple accessible assignments.
section_titleNoPrompt section heading to replace/append. Default: Operational handoff rules.
idempotency_keyNoRequired for writes. Reuse the same key when retrying the same proposed prompt change.
queue_for_approvalNoWhen authority is missing, create a pending dashboard approval instead of returning needs_approval.

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
errorNoPresent when success is false
resultNo
statusNo
successYesWhether the tool completed successfully
summaryNo
agent_idNo
approvalNo
request_idNo
business_idNo
rules_countNo
section_titleNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already flag mutating/destructive/idempotent behavior; the description adds the governance context ('governed agent.patch broker') and claims safety, which are useful for an agent deciding to trust the call. It does not explicitly say that 'replace' overwrites an existing section or detail the review requirement, but the schema's authority field covers that.

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

Conciseness5/5

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

Two sentences, front-loaded with the action, and every clause earns its place: purpose, governance path, and use cases. No redundant restating of title or schema.

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

Completeness4/5

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

For a complex 11-parameter tool with a rich schema and output schema, the description supplies the situational context and safety framing needed for selection. It could be more complete about approval/destructive behavior, but those details are already in the schema parameter descriptions.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter has a useful description (idempotency_key, authority caveat, business_id condition). The description adds only high-level examples of rule content, which is helpful but not necessary for parameter understanding.

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

Purpose5/5

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

The description names a precise action and target: 'add or replace a named operational rules section inside an agent inbound prompt,' and identifies the routing path ('agent.patch broker'). The listed use cases (handoffs, callback language, alert promises) make it clear this is not the generic update_agent_config sibling.

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?

'Use this for...' explicitly enumerates the intended scenarios and contrasts with 'round-tripping the whole prompt manually.' It does not state when to avoid it or name a specific alternative tool, so it falls 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.

configure_staff_alertsConfigure Staff AlertsA
DestructiveIdempotent
Inspect

Save business-owned staff alert recipients and post-call escalation rules. Saving settings does not prove provider delivery or owner receipt; activation notification proof is tracked separately.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoValidate and show the proposed settings without writing.
business_idNoBusiness ID (optional only when the token has exactly one accessible business)
escalation_rulesNoPost-call escalation rules evaluated against completed transcripts. Each rule is { id?, when, then, enabled? }. v1 action then includes text_owner.
sms_notificationsNoEnable or disable SMS staff alerts for this business.
notification_emailNoComma-separated string or array of staff email addresses that receive escalation emails.
notification_phoneNoComma-separated string or array of staff phone numbers that receive SMS escalation alerts.
email_notificationsNoEnable or disable email staff alerts for this business.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
dry_runNo
successYesWhether the tool completed successfully
settingsNo
business_idNo
current_settingsNo
proposed_settingsNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already signal write, idempotent, and destructive behavior, so the bar is lower. The description adds a useful caveat that saving does not prove provider delivery or owner receipt, with proof tracked separately. It does not, however, clarify what the destructive aspect means, such as whether existing recipients or rules are overwritten or merged.

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

Conciseness5/5

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

Two sentences with no filler. The first sentence states the operation clearly, and the second adds an important behavioral caveat. The structure is compact and 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?

The schema is thorough, output schema exists, and annotations cover safety traits. The description supplies the key caveat about lack of delivery proof, which is valuable. It would be more complete with explicit overwrite semantics or a why-to-use sentence, but the core information 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 100%, so the baseline is 3. The description adds only high-level context by mentioning recipients and escalation rules, but the schema already documents each parameter in enough detail. No extra credit is warranted.

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

Purpose5/5

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

The description uses a specific verb ('Save') with a clear resource ('business-owned staff alert recipients and post-call escalation rules'). This clearly distinguishes the tool from notification/proof siblings by narrowing scope to staff alert configuration and escalation rules.

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 or alternative-routing instructions. The note that activation notification proof is tracked separately hints at a boundary with proof tools, but it does not tell the agent when to prefer this tool over siblings like confirm_notification_destination.

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

confirm_notification_destinationConfirm Activation Notification DestinationA
DestructiveIdempotent
Inspect

APPROVAL-GATED. Save the owner-approved SMS or email destination for the exact active activation session. Delivery starts only when the inbound call artifact is ready, and settings alone never count as delivery proof.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
authorityNo
business_idYes
destinationYes
idempotency_keyYes
activation_session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
statusNo
attemptNo
successYesWhether the tool completed successfully
business_idNo
delivery_startedNo
destination_maskedNo
activation_session_idNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already mark this as a non-readOnly, destructive, idempotent operation. The description adds valuable behavior beyond that: approval is required, delivery is deferred until the inbound call artifact is ready, and saving settings alone is not delivery proof. No contradiction with annotations.

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

Conciseness5/5

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

Three short sentences, front-loaded with the most important approval-gating note and no filler. Each sentence adds a distinct fact: what is saved, when delivery starts, and what does not count as delivery proof.

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 annotations and an output schema present, the description covers the essential non-obvious semantics: approval, exact session scoping, async delivery trigger, and the delivery-proof caveat. It does not spell out every parameter, but the remaining gap is modest for a 6-parameter mutation with a rich schema.

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 parameter meaning. It explains channel (sms/email) and destination, and partially covers activation_session_id via 'exact active activation session,' but it does not clarify idempotency_key, business_id, or the authority object.

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 and resource: 'Save the owner-approved SMS or email destination for the exact active activation session.' This clearly identifies what is being persisted and scopes it to a single session, distinguishing it from notification retry, sending, or alert configuration tools.

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

Usage Guidelines4/5

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

It gives clear context: this is approval-gated and should be used to set the destination for the active session, not as proof of delivery. It does not explicitly name sibling alternatives such as retry_activation_notification or list when-not-to-use conditions, so it stops short of a 5.

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

create_agentCreate AgentAInspect

Create a new KaiCalls agent — the secretary that answers this business’s calls (the live voice agent plus KaiCalls records) — with a system prompt, greeting, voice, and model. Mirrors POST /api/v1/agents. Every subsequent mutation to this agent is versioned (assistant_config_versions) and reversible via rollback_config — inspect history with get_change_history / list_config_versions. Compliance: KaiCalls automatically applies state-aware AI-disclosure and consent handling to every agent it provisions, and flags high-risk business categories for extra review.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesAgent display name.
modelNoLanguage model selection: { provider, model, temperature } (optional).
voiceNoRaw voice selection: { provider, voiceId } (optional).
metadataNoExtra KaiCalls metadata to store (optional).
business_idYesBusiness ID to create the agent under.
first_messageNoSpoken greeting (optional).
system_promptYesThe agent's inbound system prompt / instructions.
voice_catalog_idNoPreferred: a curated catalog id from list_voices (optional).

Output Schema

ParametersJSON Schema
NameRequiredDescription
agentNo
errorNoPresent when success is false
successYesWhether the tool completed successfully
complianceNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations (readOnlyHint=false, openWorldHint=true) already indicate a mutating, open-world operation. The description adds valuable behavioral context: every mutation is versioned and reversible via rollback_config, and it discloses that compliance features (AI-disclosure, consent handling) are automatically applied. It does not contradict annotations and enriches the safety profile beyond what annotations convey.

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

Conciseness4/5

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

The description is structured and efficient: it front-loads the core purpose in the first sentence, then adds versioning and compliance details in subsequent sentences. It avoids redundant phrasing and each sentence carries distinct information. It is slightly longer than strictly necessary but remains clear and well-organized.

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 an output schema present and annotations covering the basic safety profile, the description covers the essential context: it defines the agent concept, notes the versioning/reversibility mechanism, and highlights compliance behavior. It does not detail error handling or return values, but these are either covered by the output schema or less critical for an initial creation call.

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

Parameters3/5

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

Schema coverage is 100%, so the schema fully documents all 8 parameters. The description adds a few semantic hints (e.g., voice_catalog_id is 'preferred', the agent concept as a 'secretary'), but these are marginal and do not substantially supplement the schema. The baseline of 3 is appropriate given high coverage.

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

Purpose5/5

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

The description clearly states the action (create) and the resource (a KaiCalls agent) with a specific definition ('the secretary that answers this business’s calls'). It also names the endpoint it mirrors (POST /api/v1/agents) and enumerates the key configuration inputs (system prompt, greeting, voice, model), which distinguishes it from siblings like update_agent_config and list_agents.

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 this is the creation tool by mentioning 'Every subsequent mutation to this agent is versioned' and referencing rollback_config and history tools, but it does not explicitly state when to use this vs. alternatives (e.g., 'use update_agent_config for existing agents'). The context is clear but the guidance is implicit rather than directive.

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

create_campaignCreate CampaignA
Destructive
Inspect

Create an outbound call campaign (cadence + lead batch) and optionally launch it immediately. Launching queues calls for the orchestrator; existing TCPA/consent gating still applies at dial time. Requires admin role on the business.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCampaign name.
launchNoWhen true, launch the campaign immediately after creating it.
agent_idNoAgent ID to place the calls. Required when launch is true.
lead_idsNoLead IDs to enroll in the campaign (optional at create time).
business_idNoBusiness ID (required only when the token can access multiple businesses).
descriptionNoOptional campaign description.
cadence_configYesCadence configuration. { template: standard|aggressive|nurture|custom, attempts: number }.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
queuedNo
successYesWhether the tool completed successfully
campaignNo
launchedNo
sequence_idNo
total_leadsNo

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnly=false, destructiveHint=true, and idempotent=false, but the description adds valuable specifics: launching queues calls for the orchestrator, TCPA/consent gating still applies at dial time, and an admin role is required. This goes beyond the annotations by explaining side effects and prerequisites.

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

Conciseness5/5

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

The description is two sentences with no filler. The core action is front-loaded ('Create an outbound call campaign...'), then the optional launch consequence and permission requirement are stated efficiently. Every sentence contributes.

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 tool with 7 parameters, nested objects, and an output schema, the description covers the essential behavior, side effects, and prerequisites. The output schema renders return-value explanation unnecessary. It lacks some explicit guidance on when to choose alternatives, but it is otherwise complete enough for an agent to invoke 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 description coverage is 100%, so the schema already documents all 7 parameters including the nested cadence_config object. The description does not add per-parameter detail beyond the schema, but it does clarify the high-level concepts (campaign = cadence + lead batch) and the purpose of the launch flag. This meets the baseline for high schema coverage.

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

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: 'Create an outbound call campaign' and clarifies its composition ('cadence + lead batch') and the optional launch behavior. This clearly separates it from sibling tools like list_campaigns or make_call, so an agent can identify the right tool from the name and 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 Guidelines3/5

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

The description gives useful context about the launching behavior and the admin role requirement, which helps an agent decide when this tool is appropriate. However, it does not explicitly mention alternatives or state when NOT to use this tool (e.g., choosing make_call for an immediate one-off call instead of a campaign).

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

create_checkoutCreate or Resume CheckoutA
Idempotent
Inspect

Create or resume an owner-bound hosted Stripe checkout for a current plan from list_plans. Requires business_id, plan_id, and a durable idempotency_key. Reuse the same key for retries; a changed plan requires a new key. The owner must open the returned link and authorize payment in Stripe. This tool never proves payment or phone activation. After checkout, use get_checkout_status with the returned session_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
plan_idYes
business_idYes
idempotency_keyYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already indicate idempotent, non-readonly, non-destructive, and open-world behavior. The description adds real value on top: idempotency-key mechanics, the human authorization step in Stripe, and the explicit warning that this tool never proves payment or phone activation. There is no contradiction with the annotations.

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

Conciseness5/5

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

The description is concise at five sentences, each earning its place: purpose and resource, required params, idempotency guidance, human authorization flow, and exact follow-up routing. Front-loading the purpose minimizes the cognitive cost for the agent.

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 state-changing checkout tool with no output schema, the description does a solid job: it names all required inputs, the owner-authorization step, the follow-up tool, and the caveat about payment proof. A minor gap is that it does not detail what fields the response will contain besides session_id and the link, but the agent has enough to invoke and verify 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 description coverage is 0%, so the description must compensate. It gives meaningful semantics for idempotency_key (durable, retry pattern, new key needed for plan change) and plan_id (current plan from list_plans), but it only name-drops business_id without explaining its meaning or source, leaving a gap for agents.

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 clear verb and resource: 'Create or resume an owner-bound hosted Stripe checkout for a current plan from list_plans.' It also distinguishes this tool from nearby siblings like get_checkout_status by naming the follow-up tool explicitly, and it clarifies the plan source.

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 direct usage conditions: use a current plan from list_plans, reuse the idempotency key for retries, and change the key when changing plans. It also explicitly says when not to use this tool for payment proof and routes to get_checkout_status with the returned session_id.

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

delete_webhookDelete WebhookA
DestructiveIdempotent
Inspect

Remove a business outbound webhook by ID. Mirrors DELETE /api/v1/webhooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWebhook ID to remove.
business_idNoBusiness ID (optional only when the token can access exactly one business).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
messageNo
successYesWhether the tool completed successfully
business_idNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already disclose destructive and idempotent behavior, so the description does not need to repeat those. It adds 'by ID' and the DELETE endpoint mapping, which is useful but does not reveal additional consequences like permanence or side effects beyond what annotations provide.

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

Conciseness5/5

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

The description is two short sentences, front-loaded with the core action, and includes a useful API reference without redundancy. Excellent conciseness.

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

Completeness4/5

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

With the output schema present, annotations covering destructiveness/idempotency, and a clear parameter schema, the description is largely complete for a simple delete operation. It could mention permanence or downstream effects, but nothing essential 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?

The schema covers 100% of the parameters with clear descriptionsyk. The description adds no extra parameter semantics beyond confirming that the removal is by 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?

The description states a specific action ('Remove a business outbound webhook by ID') and reinforces it with the HTTP DELETE mapping. This makes the tool’s purpose unmistakable and distinguishes it from set_webhook and get_webhook.

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 (when removing a webhook by ID), but it does not explicitly state when not to use it or contrast it with alternatives like set_webhook. The guidance is adequate but not explicit.

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

detach_numberDetach Phone NumberA
DestructiveIdempotent
Inspect

Release a phone number from a business back to the unassigned registry pool. Mirrors DELETE /api/v1/phone-numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idNoBusiness ID (optional only when the token can access exactly one business).
phone_numberYesE.164 phone number to release.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYes
business_idNo
released_phone_numberNo

TDQS

A4.1/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. The description adds context by explaining the result (number returns to the unassigned registry pool) and the HTTP semantics (DELETE /api/v1/phone-numbers), which is helpful and does not contradict annotations.

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

Conciseness5/5

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

Two sentences, the first conveys the core action and result, the second a precise API reference. No filler; front-loaded and efficient.

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

Completeness5/5

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

For a simple two-parameter tool with an output schema and strong annotations, this description covers the purpose, resource, and outcome. It is sufficiently complete for an agent to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (business_id and phone_number) carry full descriptions in the schema. The tool description adds no extra meaning to them, and with baseline 3, the schema does 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 and resource: 'Release a phone number from a business back to the unassigned registry pool.' It also adds the REST mirror, which reinforces the exact action and helps distinguish it from attach_number/buy_number.

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 action itself implies usage: when you need to release a number. But there is no explicit guidance about when not to use it, no mention of alternatives like attach_number or buy_number, and no exclusions or conditions stated.

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

get_activation_statusGet Activation StatusA
Read-onlyIdempotent
Inspect

Read the persisted proof-first activation status for one accessible business. Returns masked evidence, the exact next action, and whether the command center/full MCP surface is unlocked. It cannot assert or advance proof. A number is not fully set up until the owner's own phone is on file (see owner_phone_on_file) and forwarding is verified — do not report the line as live/working on the strength of proof state alone.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idNoBusiness ID (optional only when the token reaches exactly one business).
oauth_transaction_idNoOpaque OAuth transaction identifier used only to bind a completed receipt.
activation_session_idNoOptional exact session ID. A superseded or foreign session is rejected.
origin_conversation_idNoOpaque client conversation identifier used only to bind a completed receipt.
receipt_idempotency_keyNoClient key for replay-safe delivery of a completed activation receipt.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
proofNo
stateNo
routesNo
successYesWhether the tool completed successfully
business_idNo
next_actionNo
activation_receiptNo
owner_phone_on_fileNoWhether the owner's own mobile number is on file. False means no SMS nudge, ring-first, or forwarding verification can reach a human — the line is not fully set up regardless of proof state.
activation_session_idNo
notification_attemptsNo
command_center_unlockedNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds valuable behavioral context beyond that: it clarifies the tool cannot mutate proof state, describes what it returns, and warns against misinterpreting proof state as full setup. This directly aids the agent in acting correctly without contradicting the annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose and return contents, and ends with a concise critical caution. There is no filler or redundancy; 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 read-only tool with no required parameters and an output schema provided, the description adequately covers purpose, return contents, and interpretation caveats. It does not mention potential errors or prerequisites, but given the tool's simplicity and the presence of an output schema, nothing essential is missing. Slight deduction for not addressing error conditions, which are often relevant in practice.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (business_id, oauth_transaction_id, activation_session_id, origin_conversation_id, receipt_idempotency_key) is already documented in the input schema. The description does not add extra parameter-level semantics; it only adds general behavioral context. Baseline 3 is appropriate because the schema carries the full parameter load.

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 ('Read') and a precise resource ('persisted proof-first activation status for one accessible business'). It clearly differentiates from siblings like get_setup_recovery_status or get_phone_system_status by specifying the return contents (masked evidence, next action, unlock state). The purpose is unambiguous and actionable.

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 gives explicit context on how to interpret results ('do not report the line as live/working on the strength of proof state alone') and notes a limitation ('It cannot assert or advance proof'). However, it does not name a specific alternative tool or explicitly state when to prefer this over a sibling; the usage guidance is implicit rather than comparative.

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

get_analyticsGet AnalyticsA
Read-onlyIdempotent
Inspect

Get a dashboard summary (lead counts by status, conversion rate, call volume and duration, top agents, and business outcomes by type) over a recent time window.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLookback window in days (default 30, max 90)

Output Schema

ParametersJSON Schema
NameRequiredDescription
callsNo
errorNoPresent when success is false
leadsNo
agentsNo
periodNo
successYesWhether the tool completed successfully
outcomesNo
outcomes_totalNo

TDQS

A4.1/5.0
Behavior3/5

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

The annotations already carry the safety profile (readOnlyHint=true, idempotent, non-destructive), so the description only needs to add behavior beyond that. It adds the time-window concept and the dashboard-summary scope, but nothing extra about rate limits, caching, or data freshness—acceptable when annotations already cover safety.

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 tightly worded sentence front-loads the action and resource, then enumerates the included metrics in a clear parenthetical. There is zero filler or redundancy.

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?

An output schema is present, and the description succinctly states what the tool returns (a dashboard summary with listed metrics) and exposes the time-window semantics. Combined with the schema's param and returned structure, nothing needed for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, with the single parameter 'days' fully documented (min, max, default). The description's phrase 'recent time window' merely reinforces the schema without adding new constraints or behavioral rules, so baseline 3 applies.

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

Purpose5/5

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

The description states a specific verb and resource: 'Get a dashboard summary' and enumerates the exact metrics (lead counts, conversion rate, call volume, top agents, business outcomes). This distinguishes it from sibling tools like get_usage or list_recent_calls, which have different scopes and data shapes.

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 gives clear context: use when you want a high-level dashboard summary over a recent window. Though it doesn't explicitly exclude alternatives or name a sibling tool, the context is specific enough for an agent to select it over single-call or detailed-report tools.

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

get_balanceGet BalanceA
Read-onlyIdempotent
Inspect

Get plan terms and usage for accessible businesses. No-card trials report 25 lifetime minutes, zero price and no overage; paid plans report the mapped subscription price and billing-cycle usage. Answered-call allowance usage is the raw billable call count, matching dashboard and right-sizing. A separate weighted count is informational only, not allowance consumption or right-sizing. Phone allowance includes purchased extra lines. A balance does not prove activation or inbound routing. Mirrors GET /api/v1/balance; unavailable billing data returns an error.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYesWhether the tool completed successfully
businessesNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare this read-only, idempotent, and non-destructive, and the description adds substantial non-obvious behavioral detail: trial-specific constants, paid-plan mapping, raw vs weighted usage semantics, extra-line inclusion, and an error case when billing data is unavailable. This goes well beyond what the annotations and schema convey, and nothing contradicts the annotations.

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

Conciseness5/5

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

The main purpose is front-loaded in the first sentence, and every subsequent sentence earns its place by disambiguating the meaning of 'balance'—trial behavior, allowance counts, phone allowances, activation caveats, and error behavior. It is dense but not padded, and it avoids repeating annotation or schema information.

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

Completeness5/5

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

For a zero-parameter, read-only endpoint with an output schema, the description supplies everything an agent needs: expected value semantics, the exact endpoint it mirrors, the error case, and misleading interpretations to avoid. No material selection or interpretation context 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?

The tool has zero parameters and the input schema documents that completely, so there is no parameter ambiguity. Per the baseline for zero-parameter tools, the description does not need to add parameter-level detail and introduces none.

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 ('Get plan terms and usage') and then defines what 'balance' means with concrete distinctions: trial vs paid plans, raw billable usage vs informational weighted count, and phone allowance including extra lines. It also states what a balance does not prove (activation or inbound routing), which helps separate it from adjacent concerns. However, it never names sibling tools like get_usage or list_plans, so differentiation is implicit rather than explicit.

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

Usage Guidelines4/5

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

The description gives useful contextual guidance: no-card trials report fixed minutes and zero price, paid plans report mapped price and billing-cycle usage, and only the raw billable call count should be treated as allowance consumption. It also warns that a balance does not prove activation or inbound routing, providing a when-not cue. It does not explicitly name alternatives or say 'use get_usage for detailed call records', so routing guidance is contextual but not fully explicit.

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

get_business_infoGet Business InfoA
Read-onlyIdempotent
Inspect

Read back what a business already has: profile details, how many agents are configured, and recent call volume. Start here when someone wants a business number that answers missed calls, so nothing is created twice.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idNoBusiness ID (optional, defaults to first accessible business)

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYesWhether the tool completed successfully
businessNo
agent_countNo
calls_last_30_daysNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false; the description reinforces this with 'Read back' and 'nothing is created twice.' It adds a little context but does not disclose anything beyond the annotation safety profile.

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?

Front-loaded with the core read-back purposeable, then a single routing sentence. Every sentence earns its place.

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

Completeness5/5

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

Given the low complexity, the presence of an output schema, and the annotations' safety profile, the description says enough about what data is returned and when to call the tool. No critical gap for selection or invocation.

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

Parameters3/5

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

One parameter with 100% schema coverage. The description adds no parameter-level detail; the schema already documents the default behavior, so the baseline 3 applies.

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

Purpose5/5

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

The description uses a specific verb (

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?

States a clear trigger condition: use this first when someone wants a business number that answers missed calls, so nothing is created twice. It does not name alternatives or exclusions, so it stops short of a full when-to-use/when-not-to-use guide.

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

get_call_recordingGet Call RecordingA
Read-onlyIdempotent
Inspect

Get the real call recording URL for a call so reviewers can listen to the voice/audio instead of relying only on the transcript.

ParametersJSON Schema
NameRequiredDescriptionDefault
call_idYesThe KaiCalls call ID to get the recording for

Output Schema

ParametersJSON Schema
NameRequiredDescription
callNo
errorNoPresent when success is false
successYesWhether the tool completed successfully
recording_availableNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds that the tool returns a 'real call recording URL' rather than audio content itself, which is useful context. It does not mention URL expiration, access restrictions, or whether the recording is always available, but annotations cover the safety profile.

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, focused sentence that explains both what the tool does and why it matters. No filler, front-loaded with the key purpose.

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

Completeness4/5

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

For a simple one-parameter read-only lookup with an output schema and clear annotations, the description is sufficient. It could mention URL expiration or auth requirements, but those are not critical for selection or invocation.

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

Parameters3/5

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

Schema coverage is 100%, and the single parameter call_id is already fully described in the schema. The description adds no additional meaning about the parameter beyond its existence, so it meets the baseline without providing extra value.

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

Purpose5/5

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

The description clearly states the action ('Get'), the resource ('call recording URL'), and the purpose ('so reviewers can listen to the voice/audio'). It also differentiates from get_transcript by emphasizing audio over transcript.

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

Usage Guidelines4/5

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

The description implies when to use this tool: when reviewers need the actual voice/audio rather than the transcript, which differentiates it from the sibling get_transcript. However, it does not explicitly state when not to use it or name the alternative directly, so it falls just short of full guidance.

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

get_change_historyGet Agent Change HistoryA
Read-onlyIdempotent
Inspect

List an agent's recent config-change audit trail (change_type, change_source, old/new value, timestamp) from admin_change_history — the same record the admin_get_change_history voice tool reads over the phone. Every mutation KaiCalls makes to an agent (via update_agent_config, configure_agent_business_rules, the admin call-in secretary, or the dashboard) is logged here and reversible with rollback_config.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 20, max 100).
agent_idYesAgent ID to fetch change history for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
changesNo
successYesWhether the tool completed successfully
agent_idNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description goes beyond annotations by explaining the data lineage (where the audit entries come from, including the phone tool) and stating that the changes are reversible through rollback_config, which implies a non-destructive read view. This adds meaningful behavioral context without contradicting the annotations.

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

Conciseness5/5

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

The description is compact at two sentences, begins with the core result details, and packs the source, the covered mutations, the relationship to the voice tool, and the rollback capability into one dense block. No filler or redundancy. Each sentence earns its place.

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

Completeness5/5

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

Given the output schema exists, the description does not need to replicate return formats. It successfully covers the purpose, data fields, source store, provenance, possible callers, and even a related rollback sibling. Nothing critical for correct invocation is missing: an agent would know what it reads, why it exists, and how to use it in context.

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

Parameters3/5

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

Schema coverage is 100%; both agent_id and limit are fully described in the input schema. The description does not add extra semantics for the parameters themselves, only reasserts 'recent' and 'limit' indirectly via 'recent' in the first sentence. Since the schema carries the full parameter burden, 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 opens by stating the specific resource ('agent's recent config-change audit trail') and enumerates the exact fields returned (change_type, change_source, old/new value, timestamp). It places the tool at admin_change_history and connects it to the same record read by the admin_get_change_history voice tool, so the purpose is unambiguous even before looking at 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?

The description clearly indicates this tool is appropriate for inspecting config-change history and explicitly explains that every mutation made through named tools (update_agent_config, configure_agent_business_rules, the admin call-in secretary, the dashboard) is logged here. It also notes that these changes are reversible with rollback_config, which gives the agent a reason to invoke this tool. It does not explicitly exclude alternatives such as list_config_versions, but the context is strong enough for correct selection.

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

get_checkout_statusGet Checkout StatusA
Read-onlyIdempotent
Inspect

Read a Stripe-verified subscription checkout receipt for a business you own. Requires business_id and session_id from checkout. Confirmed billing does not prove agent, number, or call activation; use get_activation_status for setup proof. This tool never creates checkout or retries provisioning.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
business_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYesWhether the tool completed successfully
checkoutNo
billing_onlyNo
activation_verifiedNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark read-only, idempotent, non-destructive. Description adds value: ownership requirement, 'confirmed billing does not prove activation' caveat, and explicit statement that it never mutates checkout/provisioning state. No contradictions with annotations.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core read operation, then prerequisites, caveat, and side-effect disclaimer. No filler or repetition of schema/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?

Covers ownership requirement, parameter provenance, semantic caveat about what billing does not prove, and explicit non-creation/non-retry behavior. Output schema exists, so return values need no elaboration.

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 has 0% description coverage)Skip, so description must carry the semantic weight. It explains that both parameters are required, business_id is the owned business, and session_id comes from checkout. Could specify formats/sources further, but enough for an agent to invoke correctly.

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?

Clear verb ('Read') + specific object ('Stripe-verified subscription checkout receipt') + ownership scoping ('for a business you own'), and immediately distinguishes itself from get_activation_status. No ambiguity about what this tool does.

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

Usage Guidelines5/5

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

Explicitly names prerequisites ('business_id and session_id from checkout'), states what the result does NOT prove, points to the correct alternative tool (get_activation_status), and clarifies out-of-scope behavior ('never creates checkout or retries provisioning').

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

get_conversationGet SMS ConversationA
Read-onlyIdempotent
Inspect

Get a single SMS conversation thread by ID. Mirrors GET /api/v1/sms/conversations?id=.

ParametersJSON Schema
NameRequiredDescriptionDefault
conversation_idYesThe conversation ID to fetch.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYesWhether the tool completed successfully
conversationNo

TDQS

A4.1/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 adds the endpoint mirror, which is minor context but not substantial behavioral detail 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.

Conciseness5/5

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

Two concise sentences, front-loaded with the core purpose and no wasted words. The endpoint mirror is a useful supplementary detail that earns its place.

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

Completeness5/5

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

For a single-parameter read-only fetch with a full output schema, the description plus annotations cover what an agent needs. There are no missing prerequisites, side effects, or routing details required for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the single parameter conversation_id is already well documented. The description's mention of 'by ID' reinforces but does not add meaningful new semantics beyond the schema.

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

Purpose5/5

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

The description states a specific verb and resource: 'Get a single SMS conversation thread by ID.' This clearly differentiates it from sibling tools like list_conversations or list_sms_messages, which handle broader listing operations.

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 makes clear this tool is for fetching one conversation by ID, which implies the correct context. It does not explicitly name alternatives or state when not to use it, but the singular scope is clear enough for an agent to route appropriately.

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

get_extra_number_statusGet Extra Number Request StatusA
Read-onlyIdempotent
Inspect

Read an owner-authorized extra-number request. Billing, assignment and live activation are distinct. Unknown checkout or provider outcomes retain the original request and number; never start a replacement purchase.

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes
business_idYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the read-only nature is known. The description adds behavioral context about unknown outcomes: 'Unknown checkout or provider outcomes retain the original request and number,' which is valuable beyond annotations. It also reinforces the non-destructive intent with 'never start a replacement purchase.'

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

Conciseness5/5

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

The description is three sentences with no wasted words. It front-loads the core purpose, then adds a critical behavioral note. Every sentence contributes meaningful information, and the structure is clear and scannable.

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

Completeness4/5

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

For a simple read tool with two parameters and no output schema, the description adequately covers what the tool does and a key behavioral nuance. It hints at distinct aspects (billing, assignment, activation) but does not detail the response format or enumerate possible statuses. Given the tool's simplicity and annotations covering safety, it is reasonably complete but could be more explicit about return content.

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 compensate for parameter meaning. The description does not explain request_id or business_id beyond their obvious names, and it doesn't clarify their format or relationship. The names are self-explanatory, but no additional semantic value is provided, leaving the agent to infer.

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 action ('Read an owner-authorized extra-number request') and clarifies the scope by noting 'Billing, assignment and live activation are distinct,' which differentiates it from related status tools. It also explicitly warns against starting a replacement purchase, distinguishing it from purchase/request actions.

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

Usage Guidelines4/5

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

The description provides clear guidance on when not to use this tool ('never start a replacement purchase') and implies that unknown outcomes should be checked here rather than initiating a new purchase. However, it does not explicitly name alternative tools like get_checkout_status or get_activation_status, so usage context is clear but lacks explicit exclusions.

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

get_leadGet LeadA
Read-onlyIdempotent
Inspect

Get full details for a single lead by ID, including the latest AI lead score and explanation.

ParametersJSON Schema
NameRequiredDescriptionDefault
lead_idYesThe lead ID to fetch

Output Schema

ParametersJSON Schema
NameRequiredDescription
leadNo
errorNoPresent when success is false
successYesWhether the tool completed successfully

TDQS

A4.1/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 minor context about return content but does not disclose additional behavioral details such as not-found behavior or freshness of the score.

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

Conciseness5/5

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

A single sentence that is fully informative, front-loaded with the action and resource, and contains no filler or repetition.

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

Completeness5/5

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

For a simple single-ID read operation with a full output schema and safety annotations, the description is complete. Nothing an agent needs to call this tool correctly 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 description coverage is 100%, so the parameter is already documented as 'The lead ID to fetch'. The description adds no new parameter-level meaning beyond reinforcing that the fetch is by 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?

The description states a specific verb ('Get') and a specific resource ('full details for a single lead by ID'), and distinguishes it from list_leads by indicating this is for one lead. The mention of the latest AI lead score and explanation adds useful specificity.

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 clearly implies usage when a lead_id is known and full detail is needed, and the singular wording contrasts with list_leads for bulk retrieval. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to choose correctly.

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

get_operational_settingsGet Operational SettingsA
Read-onlyIdempotent
Inspect

Audit the business-level operational setup required before changing a live account: staff alert recipients, SMS/email alert flags, escalation rules, textable send-link entries, and assigned agent voice/model/greeting metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idNoBusiness ID (optional, defaults to first accessible business)

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
agentsNo
successYesWhether the tool completed successfully
businessNo
business_linksNo
available_setup_toolsNo
notification_settingsNo

TDQS

A4.1/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 established. The description's word 'Audit' reinforces this and adds useful context about when the read-only behavior matters, but it does not disclose additional behavioral traits such as authentication needs, rate limits, or side-effect details.

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

Conciseness5/5

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

The description is a single, well-organized sentence that front-loads the action and scope, then uses a concise list to specify the audited components. There is no filler or redundant repetition of the title or schema.

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

Completeness5/5

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

For a read-only tool with one optional parameter, clear schema coverage, and an output schema, the description covers the operational purpose and scope completely. An agent has enough information to decide when to call it and what it will return.

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 does not discuss the business_id parameter, but the input schema provides 100% coverage with a clear explanation: 'Business ID (optional, defaults to first accessible business)'. With full schema coverage, the baseline of 3 applies because the schema carries the parameter-semantics burden.

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

Purpose5/5

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

The description uses a specific verb ('Audit') and a clear resource ('business-level operational setup'), then enumerates exactly what is included: staff alert recipients, alert flags, escalation rules, textable send-link entries, and agent voice/model/greeting metadata. This makes it easy to distinguish from sibling configuration tools like configure_staff_alerts or configure_textable_links.

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 gives a clear usage context: this is 'required before changing a live account', so an agent knows when to call it. It does not explicitly name alternatives or say when not to use it, but the audit-versus-configure contrast with sibling tools is strongly implied.

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

get_phone_flowGet Phone FlowA
Read-onlyIdempotent
Inspect

Read how calls ring on the business's hosted phone system: which cells and desk phones ring, for how many seconds, and whether after-hours callers go straight to the AI receptionist. Reconciled from the phone system on every call. Mirrors POST /api/v1/phone-system action=get_flow. Returns 409 when the hosted phone system is not set up for this business.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idNoBusiness ID (required when the token can access multiple businesses).

Output Schema

ParametersJSON Schema
NameRequiredDescription
flowNo
lineNo
errorNoPresent when success is false
successYesWhether the tool completed successfully
readbackNoOne-sentence plain-English description.
kai_extensionNo
business_hours_availableNo

TDQS

A4.2/5.0
Behavior4/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 valuable behavioral context: data is 'reconciled from the phone system on every call' (indicating freshness/accuracy), and it explicitly discloses the 409 error condition when the hosted phone system is not set up. This goes beyond the annotations.

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

Conciseness5/5

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

Three sentences with no waste. The core purpose is front-loaded, followed by a data-freshness note and an error condition. 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?

The tool has an output schema, so return values don't need explanation. The description covers purpose, data source, and a key error condition. It could mention pagination or rate limits, but for a simple read-only tool with one optional parameter, this is nearly complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents the single business_id parameter. The description doesn't add parameter-specific details beyond what the schema provides, but with only one parameter and full coverage, the baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool reads how calls ring on the business's hosted phone system, specifying the exact details it returns (which cells and desk phones ring, duration, after-hours routing to AI receptionist). It distinguishes itself from siblings like get_phone_system_status and update_phone_flow by focusing on the read-only flow behavior.

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

Usage Guidelines4/5

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

The description implies when to use this tool: when you need to understand call routing behavior on the hosted phone system. It mentions the mirror of POST /api/v1/phone-system action=get_flow, which provides an API-level reference. However, it doesn't explicitly state when not to use it or name alternative tools for related but different queries (e.g., get_phone_system_status for overall system health).

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

get_phone_system_statusGet Phone System StatusA
Read-onlyIdempotent
Inspect

Read whether the business's hosted phone system is set up: Kai's extension, the team ring group and dial plan ids (never secrets), the phone-system line, and next_step — the one line to relay to the owner. Use it to confirm a set_up_phone_system run or before adding team phones. Mirrors GET /api/v1/phone-system.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idNoBusiness ID (required when the token can access multiple businesses).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idsNo
lineNo
errorNoPresent when success is false
successYesWhether the tool completed successfully
next_stepNo
business_idNo
provisionedNo
kai_extensionNo
provisioned_atNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context: dial plan ids are 'never secrets' and next_step is 'the one line to relay to the owner.' No contradiction with annotations; adds behavioral nuance 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?

Two efficient sentences. Front-loaded with the primary purpose, then enumerates returned fields, then gives usage contexts. No padding or repetition; every clause contributes.

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 output schema exists, the description appropriately focuses on purpose and use cases. For a single-parameter read-only tool with clear annotations, nothing essential is missing; it even clarifies the 'never secrets' detail.

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

Parameters3/5

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

Schema covers business_id at 100% with a clear description. The tool description does not mention the parameter, but since schema coverage is high, the description does not need to compensate. 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?

States a specific verb+resource: read the phone system status. Lists exact contents (Kai's extension, ring group, dial plan ids, phone-system line, next_step) which distinguishes it from sibling get_* tools like get_activation_status or get_phone_flow. Clear, non-tautological purpose.

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

Usage Guidelines4/5

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

Explicitly states when to use it: to confirm a set_up_phone_system run or before adding team phones. Provides clear context but does not mention alternatives or when not to use it, which is typical for a read-only status tool.

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

get_setup_recovery_statusGet Setup Recovery StatusA
Read-onlyIdempotent
Inspect

Read an owner-authorized setup recovery request by its business and idempotency key. Running requests are never automatically stolen, including stale requests. A ready receipt does not prove live activation.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idYes
idempotency_keyYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already show read-only and idempotent. The description adds non-obvious behavior: running requests are never automatically stolen (even stale ones) and a ready receipt does not prove live activation. No contradiction with annotations.

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

Conciseness5/5

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

Three concise sentences, front-loaded with the core purpose, followed by two high-signal caveats.

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 simple read tool with rich annotations stan, the description covers scoping and behavioral caveats welltwenty, but without an output schema or return-shape statement, an agent is left guessing what the response contains. Still fairly complete with name/title.

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 0% schema description coverage, the description must supply parameter meaning. It clarifies the two parameters are a lookup key by 'business and idempotency key,' but it doesn't explain their format, validity, or behavior when matches are absent.

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

Purpose5/5

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

The description uses a specific verb ('Read'), names the resource ('owner-authorized setup recovery request'), and specifies the exact lookup keys ('business and idempotency key'). It clearly distinguishes this from sibling status tools by naming the unique resource.

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 owner-authorized qualifier gives some context on when the tool applies, but there is no explicit guidance on when to choose this over alternative get_* tools. The usage context is implied rather than stated.

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

get_transcriptGet TranscriptA
Read-onlyIdempotent
Inspect

Get the transcript and summary of a completed call

ParametersJSON Schema
NameRequiredDescriptionDefault
call_idYesThe call ID to get the transcript for

Output Schema

ParametersJSON Schema
NameRequiredDescription
callNo
errorNoPresent when success is false
successYesWhether the tool completed successfully
transcriptNo
transcript_lengthNo
transcript_availableNo
transcript_truncatedNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark it readOnly, idempotent, and non-destructiveikuha. The description adds that it returns both a transcript and a summary screporting the completed-call requirement, which is useful behavioral context beyond the annotations.

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

Conciseness5/5

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

One clear, front-loaded sentence states exactly what the tool does without wasted wording.

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 a single documented parameter, an output schema, and annotations covering side effects, the description is nearly complete. It could explicitly note what happens if the call is not completed, but the 'completed call' qualifier conveys the main constraint.

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 only parameter is fully described in the schema (100% coverage), so the tool description does not need to add extra meaning. 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 uses a specific verb and resource: 'Get the transcript and summary of a completed call.' It clearly identifies both the payload and the precondition (completed call), which distinguishes it from sibling tools like check_call_status or get_usage.

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 narrows usage to completed calls but does not explicitly mention alternatives, exclusions, or when not to use it. The 'completed call' qualifier gives context, yet an agent isn't told what to use for in-progress calls or where this fits among the many sibling tools.

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

get_usageGet API UsageB
Read-onlyIdempotent
Inspect

List recent API usage events (endpoint, method, status code, cost) for the caller's account. Mirrors GET /api/v1/usage.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoISO date/time upper bound (optional).
limitNoMax results to return (default 100, max 500).
startNoISO date/time lower bound (optional).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
usageNo
successYesWhether the tool completed successfully
has_moreNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already convey readOnly, idempotent, and non-destructive behavior. The description adds the 'caller's account' scoping and the REST endpoint mirror, but it does not mention result ordering, pagination behavior, default time window, or whether cost is estimated or final.

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

Conciseness5/5

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

Two concise sentences deliver the core purpose and endpoint mapping without waste. The key action and resource are front-loaded, and the mirror reference adds useful context without bloating the text.

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 read-only, optional-parameter list tool with a full input schema and an output schema, the description covers the essential context. Minor gaps remain around default date range and when to choose this over similar observability/analytics tools, but these are not critical for invoking 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 description coverage is 100%, so the parameters start, end, and limit are already documented in the schema. The description adds no parameter-specific meaning beyond framing the resource as usage events, so the baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states a specific verb ('List'), resource ('recent API usage events'), and useful attributes (endpoint, method, status code, cost), scoped to the caller's account. It is unambiguous, though it does not explicitly differentiate from sibling tools like get_analytics or list_observability_events.

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 such as get_analytics, list_observability_events, or list_tool_execution_logs. The phrase 'Mirrors GET /api/v1/usage' identifies the backing endpoint but provides no selection criteria or exclusions.

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

get_webhookGet Webhook ConfigurationA
Read-onlyIdempotent
Inspect

List the configured outbound webhook(s) for a business, including supported event types. Mirrors GET /api/v1/webhooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idNoBusiness ID (optional only when the token can access exactly one business).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
eventsNo
successYesWhether the tool completed successfully
webhooksNo
business_idNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, which cover the safety profile. The description adds useful context by mentioning that it returns supported event types, and the 'Mirrors GET /api/v1/webhooks' line suggests a standard read-only API response. This goes beyond the annotations without contradicting them.

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

Conciseness5/5

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

The description is a single, dense sentence that leads with the core function ('List the configured outbound webhook(s)'), includes the scope and a key detail (event types), and ends with a helpful API reference. No wasted words.

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

Completeness5/5

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

Given the tool's simplicity (0 required params, 1 optional param with full schema coverage, output schema present, and annotations covering safety), the description is complete. An agent can understand what the tool returns and the business scope, and the annotation and schema cover the rest.

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 100% schema description coverage, the single business_id parameter is already fully documented, including the nuance that it is optional when the token accesses one business. The description adds no additional parameter meaning beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool lists configured outbound webhooks for a business, includes supported event types, and explicitly mirrors GET /api/v1/webhooks. This distinguishes it clearly from sibling tools like set_webhook and delete_webhook, giving a specific verb and resource.

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 the tool is for reading webhook configurations but does not explicitly state when to use it versus alternatives like set_webhook or delete_webhook. There is no mention of exclusions or when not to use this tool, leaving the agent to infer from the 'List' and read-only hints.

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

list_agentsList AgentsA
Read-onlyIdempotent
Inspect

List the KaiCalls agents on the authenticated account. Use this before setting anything up, to see whether this business already has a secretary answering its calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 50, max 100)
offsetNoZero-based pagination offset (default 0)
business_idNoBusiness ID to filter by (optional, must be accessible)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
errorNoPresent when success is false
limitNo
agentsNo
offsetNo
filtersNo
successYesWhether the tool completed successfully
has_moreNo
next_offsetNo

TDQS

A4/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 the account-scoped behavior and the business-filtering hint, but it does not disclose pagination behavior beyond what the schema already provides. It does not contradict annotations.

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

Conciseness5/5

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

Two sentences with no filler. The core action and scope are front-loaded, and the use-case guidance is a single clause. Every word 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 read-only list tool with a rich output schema, full parameter documentation, and annotations covering safety, the description is nearly complete. The only minor gap is that it doesn't explicitly state when not to use it or mention pagination behavior, but those are covered by the schema and the tool's simplicity.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters (limit, offset, business_id). The description adds a small amount of context by mentioning the business filter implicitly ('this business'), but it does not add meaning beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('List') and resource ('KaiCalls agents on the authenticated account'), and it distinguishes itself from sibling tools by clarifying scope (account-level listing). It also adds a practical use case ('before setting anything up, to see whether this business already has a secretary answering its calls'), which makes the tool's purpose immediately clear.

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

Usage Guidelines4/5

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

The description gives a clear context for when to use the tool ('before setting anything up') and what question it answers ('whether this business already has a secretary answering its calls'). It does not explicitly name alternatives or exclusions, but the context is strong enough for an agent to select it over siblings like list_numbers or list_recent_calls.

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

list_campaignsList CampaignsA
Read-onlyIdempotent
Inspect

List outbound call campaigns for the authenticated business.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 25, max 100)
offsetNoZero-based pagination offset (default 0)
statusNoFilter by campaign status (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
errorNoPresent when success is false
limitNo
offsetNo
filtersNo
successYesWhether the tool completed successfully
has_moreNo
campaignsNo
next_offsetNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to repeat those. It adds useful behavioral scope ('for the authenticated business') and the 'outbound' qualifier, giving the agent important access context without contradicting annotations.

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

Conciseness5/5

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

A single sentence delivers the full purpose without filler or repetition. The differentiating qualifiers 'outbound' and 'authenticated business' are front-loaded, making the description efficient and easy to scan.

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

Completeness4/5

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

The input schema, output schema, and annotations already cover most needed details. It would be slightly stronger if it supplied allowed status values or explicitly directed users to a sibling tool, but for a simple, optional-parameter listing operation the description is adequate.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains limit, offset, and status. The description adds no additional parameter semantics, which matches the baseline score of 3 when structured data carries the parameter documentation.

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 ('List') and a well-defined resource ('outbound call campaigns') scoped to the authenticated business. This clearly distinguishes it from sibling tools like create_campaign, list_agents, or list_numbers without relying on the tool name alone.

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

Usage Guidelines4/5

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

The context is clear—an agent should use this when listing the current business's outbound call campaigns. However, it does not explicitly name alternatives or state when not to use it, though the read-only listing nature makes the intent obvious.

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

list_config_versionsList Agent Config VersionsA
Read-onlyIdempotent
Inspect

List an agent's hashed, redacted assistant config version history (rollback lineage included). Pass version to fetch one version's full redacted config_snapshot instead of the list. Mirrors GET /api/v1/agents/versions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax versions to return when listing (optional, default 50, max 100).
versionNoFetch a single version by its per-agent version_number, including its redacted config_snapshot (optional; omit to list).
agent_idYesAgent ID (required).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYesWhether the tool completed successfully
versionNo
agent_idNo
versionsNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations cover read-only/idempotent safety, and the description adds genuine behavioral detail: results are hashed and redacted, version history includes rollback lineage, and passing version returns a full redacted config_snapshot. No contradiction with annotations.

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

Conciseness5/5

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

Three terse sentences front-load the core operation, then explain the alternate mode and endpoint correspondence. 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 an output schema and read-only/idempotent annotations present, the description covers the key behaviors: history listing, snapshot retrieval, and hashing/redaction. No critical missing info for a tool this simple.

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 describes all parameters (100% coverage), so baseline is 3. The description adds meaning by explaining the version parameter's effect (return single full snapshot vs list) and noting the data is hashed/redacted.

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 action and resource: 'List an agent's hashed, redacted assistant config version history (rollback lineage included).' This distinguishes it from every sibling tool, and the added behavior for single-version fetch is explicit.

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 describes what the tool does and the conditional use of the version parameter to fetch a single config snapshot. It doesn't explicitly name alternatives or exclusions, but the context is clear enough that an agent knows when to call it.

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

list_conversationsList SMS ConversationsA
Read-onlyIdempotent
Inspect

List SMS conversation threads (counterparty timeline metadata) for the authenticated business, most recent first. Mirrors GET /api/v1/sms/conversations.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 50, max 100).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYesWhether the tool completed successfully
has_moreNo
conversationsNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already cover read-only, idempotency, and non-destructive behavior, so the bar for adding behavioral context is lower. The description adds useful context about ordering ('most recent first') and the scope ('authenticated business'), but it does not go into pagination or return details. This is acceptable given the output schema and annotations.

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

Conciseness5/5

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

Two sentences with no wasted words. The key action and scope are front-loaded, and the API mirror line provides a useful reference without padding. 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 simple read-only list tool with one optional parameter and an output schema, the description is nearly complete. It specifies the resource, scope, and ordering, and the complexity is low, so little more is required. A slight improvement would be to mention that this returns threads, not individual messages, but that is already implied by 'threads' and the sibling 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 100% for the single optional limit parameter, which is fully documented with min/max and default. The description adds nothing beyond the schema, so a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action (list), the resource (SMS conversation threads), and the scope (authenticated business, most recent first). It also distinguishes itself from siblings like list_sms_messages and get_conversation by specifying 'threads' and 'counterparty timeline metadata', and maps to a precise API endpoint.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as get_conversation or list_sms_messages. It simply states what the tool does without any conditions, exclusions, or references to sibling tools, leaving the agent to infer selection criteria.

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

list_evalsList Agent EvalsA
Read-onlyIdempotent
Inspect

List canned mock-conversation eval scenarios for an agent (or all accessible agents). Mirrors GET /api/v1/evals.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idNoFilter by agent ID (optional).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
evalsNo
successYesWhether the tool completed successfully

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds valuable context beyond that by clarifying that 'evals' are canned mock-conversation scenarios and by noting the API mirror ('GET /api/v1/evals'), which helps the agent understand the nature and scope of the operation.

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

Conciseness5/5

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

Two sentences contain the essential purpose, scope, and API correspondence with no filler. The primary action and resource are front-loaded, making the intent immediately clear.

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

Completeness4/5

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

For a simple, optional-filter list tool, the description plus schema and annotations cover what an agent needs: the resource type, the filtering behavior, and the safety profile. The output schema is present, so return-value documentation is handled structurally. It could mention pagination or permissions, but these are minor against the low complexity.

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 for the single parameter is 100%, so the baseline is 3. The description adds meaningful nuance by stating that omitting agent_id returns all accessible agents, which the schema's 'optional' wording does not fully convey. This enriches the parameter semantics beyond the schema alone.

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

Purpose5/5

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

The description uses a specific verb ('List') and a specific resource ('canned mock-conversation eval scenarios'), with clear scoping ('for an agent (or all accessible agents)'). This distinguishes it from siblings like run_eval, which would execute rather than list evals.

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 clearly implies when to use the tool: when you need to view predefined eval scenarios rather than run them. However, it does not explicitly name run_eval as the alternative or state when-not-to-use, leaving the routing to inference from the sibling list.

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

list_knowledgeList Agent KnowledgeA
Read-onlyIdempotent
Inspect

List agent knowledge base entries for a business. Mirrors GET /api/v1/knowledge.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoFree-text search over title/content (optional).
categoryNoFilter by category (optional).
business_idNoBusiness ID (optional only when the token can access exactly one business).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYesWhether the tool completed successfully
knowledgeNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description carries little additional safety burden. 'Mirrors GET /api/v1/knowledge' adds an HTTP-method mapping but no further behavioral detail such as pagination or result limits.

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

Conciseness5/5

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

Two short sentences with no filler; the main action is front-loaded and the API mirror reference provides a useful anchor without redundancy.

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

Completeness5/5

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

For a simple, read-only list operation with all parameters documented in the schema, an output schema present, and safety annotations covering side effects, the description is complete enough. Nothing essential to calling the tool correctly 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 description coverage is 100%, with each parameter already explained in the input schema. The description adds no extra meaning to query, category, or business_id beyond what is in the schema, so the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description names a specific verb ('List') and resource ('agent knowledge base entries for a business'), and the 'Mirrors GET /api/v1/knowledge' line anchors it to a concrete API operation. It is clear enough to distinguish from siblings like upsert_knowledge, though it does not explicitly name the alternative.

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

Usage Guidelines3/5

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

The tool's purpose makes it obvious it should be used when listing knowledge entries, but the description gives no explicit when-to-use/when-not-to-use guidance or alternatives. Context is clear but exclusions are absent, leaving usage to be 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.

list_leadsList LeadsA
Read-onlyIdempotent
Inspect

List leads for the authenticated business, with optional status/source/agent filters. Includes the latest AI lead score when available.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 50, max 100)
offsetNoZero-based pagination offset (default 0)
sourceNoFilter by lead source (optional)
statusNoFilter by lead status (optional)
agent_idNoFilter by agent ID (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
errorNoPresent when success is false
leadsNo
limitNo
offsetNo
filtersNo
successYesWhether the tool completed successfully
has_moreNo
next_offsetNo

TDQS

A4.2/5.0
Behavior4/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 valuable context by noting it includes the latest AI lead score when available, which is beyond the structured annotations and informs the agent about data content. No contradictions with annotations.

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

Conciseness5/5

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

Two concise sentences with zero filler. The primary purpose is stated first, followed by a single highlight (AI lead score) and a note on filters. Perfectly front-loaded and every word earns its place.

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

Completeness4/5

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

Given the tool has an output schema and annotations covering read-only/idempotent behavior, the description is sufficient. It covers scope and filters, and the schema documents pagination. It doesn't mention ordering or edge cases, but with the output schema present and no nested objects, nothing essential is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100% and each parameter already has a clear description (limit, offset, source, status, agent_id). The tool description adds only a grouping phrase ('optional status/source/agent filters') which restates the schema without adding new meaning. Baseline 3 is appropriate since the schema handles the semantic load.

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 a concrete resource ('leads') scoped to the authenticated business, and it names the optional filters (status/source/agent). It clearly distinguishes from the sibling 'get_lead' (single lookup) and 'upsert_lead' (create/update) without needing to open their schemas.

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

Usage Guidelines4/5

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

The description makes clear it lists multiple leads for the current business, which implies it is for browsing/filtering rather than fetching a single lead. It doesn't explicitly name alternatives or state when not to use it, but the context is unambiguous enough that an agent would not confuse it with get_lead or upsert_lead.

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 phone numbers assigned to the accessible business(es), with capability and compliance flags. Assignment does not prove inbound routing, activation, or customer coverage — and a number is not fully set up until the owner's own phone is on file (see get_activation_status / set_owner_phone) and forwarding is verified. Mirrors GET /api/v1/numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idNoBusiness ID to filter by (optional).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
numbersNo
successYesWhether the tool completed successfully

TDQS

A4.1/5.0
Behavior4/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 safety is covered. The description adds genuine behavioral nuance beyond annotations: the assignment-vs-activation caveat, the requirement that an owner phone be on file, and forwarding verification. It also discloses the API correspondence ('Mirrors GET /api/v1/numbers'). No contradiction with annotations.

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

Conciseness4/5

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

Three sentences, with the core purpose front-loaded and every subsequent clause earning its place — the caveats prevent misinterpretation and the sibling references guide follow-up. The second sentence is dense, but each clause is non-obvious and operationally relevant. Slightly more verbose than strictly necessary, but no waste.

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 low-complexity tool (1 optional filter param, full annotations, output schema present), this is nearly complete. The main risks — misreading assignment as activation and skipping owner-phone setup — are explicitly addressed. Minor omissions like pagination or ordering behavior are acceptable given the output schema and the tool's simplicity.

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

Parameters3/5

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

Schema description coverage is 100% — the single optional parameter business_id is already documented in the schema with its filtering meaning. The description's 'accessible business(es)' phrasing loosely aligns with the param but adds no syntax, format, or semantic detail beyond the schema. Baseline 3 is appropriate when the schema carries the full parameter burden.

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

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+scope: 'List phone numbers assigned to the accessible business(es), with capability and compliance flags.' This clearly distinguishes it from sibling tools like search_available_numbers (unassigned numbers), get_activation_status (setup state), and get_extra_number_status (status of a specific number). An agent can tell exactly what this tool returns.

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

Usage Guidelines4/5

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

The description provides clear context on when this tool's data is insufficient: 'Assignment does not prove inbound routing, activation, or customer coverage' and explicitly routes the agent to get_activation_status / set_owner_phone for full setup verification. It doesn't formally name an exclusion for searching unassigned numbers, but the 'assigned to' scope plus the caveats make the boundary obvious.

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

list_observability_eventsList Observability EventsA
Read-onlyIdempotent
Inspect

List a business-scoped timeline of compact call-runtime events and redacted integration-delivery attempts. Mirrors GET /api/v1/observability-events and uses bounded keyset pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
limitNo
cursorNoOpaque next_cursor returned by the previous page.
sourceNoEvent stream to read (default: all).
call_idNoRuntime-event call UUID filter.
outcomeNoIntegration-delivery filter.
providerNoIntegration-delivery filter.
severityNoRuntime-event filter.
object_idNoIntegration-delivery filter.
operationNoIntegration-delivery filter.
event_typeNoRuntime-event filter.
business_idNoBusiness ID (optional only when the token can access exactly one business).
object_typeNoIntegration-delivery filter.
connection_idNoIntegration connection UUID filter.
correlation_idNoRuntime-event filter.
conversation_idNoRuntime-event filter.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
eventsNo
successYesWhether the tool completed successfully
paginationNo
business_idNo

TDQS

A4/5.0
Behavior4/5

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

Beyond the readOnly/idempotent/destructive annotations, the description adds meaningful behavior: events are 'compact', integration-delivery attempts are 'redacted', and pagination is 'bounded keyset'. These details tell the agent about response scope and paging mechanics, which annotations alone do not convey.

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

Conciseness5/5

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

Two tight sentences: the first states the core purpose and scope, the second adds endpoint equivalence and pagination behavior. No filler or redundancy; key facts are 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?

For a 17-parameter tool with no required params and a rich schema plus output schema, the description supplies the essential orientation: business scope, redaction, and paging behavior. It does not enumerate filter grouping, but the 82% schema coverage and output schema fill most practical 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 82%, so the schema already carries most parameter meaning; the baseline of 3 applies. The description adds only a high-level 'business-scoped' and 'bounded keyset pagination' signal that corroborates the business_id and cursor/limit parameters without detailing them.

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-object pair—'List a business-scoped timeline of compact call-runtime events and redacted integration-delivery attempts'—which clearly identifies the resource and scope. The endpoint mirror (GET /api/v1/observability-events) reinforces that this is uniquely the observability-events listing tool among siblings.

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

Usage Guidelines3/5

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

The description conveys that this is the right tool for reading business-scoped observability events, but it never states explicit when-to-use/when-not-to-use conditions or names alternative tools. Usage is implied by the event-domain vocabulary rather than stated as guidance.

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

list_overage_chargesList Overage ChargesA
Read-onlyIdempotent
Inspect

List the idempotent overage-minutes ledger from billing_overage_charges (legacy per-minute-overage tiers only — 2026 plans carry no overage). GET /v1/balance/get_balance only returns an aggregate; this returns the underlying per-period ledger rows. Mirrors GET /api/v1/overage-charges.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
limitNo
statusNo
business_idNoBusiness ID (optional only when the token can access exactly one business).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
chargesNo
successYesWhether the tool completed successfully
business_idNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the legacy scope and ledger-vs-aggregate semantic, but does not disclose pagination behavior or how status filtering behaves; this is acceptable but not additive 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.

Conciseness5/5

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

Three sentences, each earning its place: scope, contrast with the aggregate endpoint, and API mirror. No filler; key scoping 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?

Output schema and annotations cover return shape and safety, while the description adds the crucial domain context (legacy-only, ledger rather than aggregate). It does not mention default limit or status implications, but those are visible in the schema, leaving only a minor completeness 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 description coverage is only 20% (only business_id has a description), and the description does not compensate. From/to are only implicitly tied to 'per-period,' and limit/status are left unexplained. With five optional parameters, this is a notable 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?

Description identifies a specific resource (billing_overage_charges ledger) and scope (legacy per-minute-overage tiers). It explicitly distinguishes this from the aggregate returned by get_balance, so an agent can tell it apart from sibling tools without inspecting schemas.

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

Usage Guidelines5/5

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

States a clear legacy-only condition and contrasts with get_balance, which only returns an aggregate. This tells the agent when to use this tool and when to prefer a different one, with no ambiguity.

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

list_plansList PlansA
Read-onlyIdempotent
Inspect

Read the canonical public KaiCalls plan catalog, monthly USD prices and allowances. Does not select a plan, create checkout, or change billing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
plansNo
successYesWhether the tool completed successfully

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark it read-only and idempotent, but the description adds behavioral specificity: it returns the canonical public catalog including monthly USD prices and allowances, and explicitly disclaims selection/checkout/billing 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 with the core action front-loaded. No filler, no repetition of the tool name, and every clause adds information.

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

Completeness5/5

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

For a zero-parameter, read-only list tool with an output schema available, this description is complete: it states what the agent will retrieve, the format/scope (monthly USD prices and allowances), and what will not happen.

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

Parameters4/5

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

The tool has zero parameters, so there is no parameter ambiguity. The description adds useful context about the returned data (monthly USD prices and allowances), which is the baseline expectation for a parameterless catalog lookup.

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?

Opens with a specific verb and object: 'Read the canonical public KaiCalls plan catalog.' It also clarifies what the tool does not do (select a plan, create checkout, or change billing), distinguishing it clearly from action-oriented siblings.

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

Usage Guidelines4/5

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

Provides clear read-only context and explicitly excludes side-effect actions like checkout creation and billing changes. It stops short of routing the agent to a specific sibling tool for those actions, so it is not a full 5.

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

list_productsList Agent ProductsA
Read-onlyIdempotent
Inspect

List a business's agent product catalog. Mirrors GET /api/v1/products.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoFree-text search over name/description (optional).
categoryNoFilter by category (optional).
inventoryNoInclude current inventory quantity per product (optional).
business_idNoBusiness ID (optional only when the token can access exactly one business).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYesWhether the tool completed successfully
productsNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, so the description's 'Mirrors GET' only confirms read-only behavior. It does not add useful behavioral context such as pagination, authentication requirements, or response implications, but it also does not contradict the annotations.

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

Conciseness5/5

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

Two sentences with no filler: the first names the action and resource, the second maps it to the actual API endpoint. Every word contributes value and the main purpose 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?

Combined with the full input schema, informative annotations, and output schema, the description is mostly sufficient for invocation. It lacks guidance on when to choose this tool over sibling mutations and does not mention pagination or return-value caveats, but these are secondary given the structured metadata.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters including the nuance around business_id. The description does not add parameter-specific meaning, but with full schema coverage the baseline score of 3 is appropriate.

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

Purpose5/5

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

States the verb 'List' and the specific resource, 'a business's agent product catalog,' and reinforces it with 'Mirrors GET /api/v1/products.' This read-only retrieval framing clearly distinguishes it from the sibling upsert_product mutation tool and other list tools.

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

Usage Guidelines2/5

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

No explicit when-to-use guidance or alternative routing is provided. Given many sibling list_* and upsert_* tools, an agent has no stated criteria for choosing this tool over alternatives such as upsert_product, though the read-only wording implies retrieval.

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

list_recent_callsList Recent CallsB
Read-onlyIdempotent
Inspect

List recent calls for the authenticated business

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 20, max 100)
offsetNoZero-based pagination offset (default 0)
statusNoFilter by status (optional)
agent_idNoFilter by agent ID (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
callsNo
countNo
errorNoPresent when success is false
limitNo
offsetNo
filtersNo
successYesWhether the tool completed successfully
has_moreNo
next_offsetNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already convey readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'recent' time scope and 'authenticated business' boundary, but it does not disclose ordering, time-window semantics, or pagination behavior beyond what the schema already provides.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler or redundant restatement of the title. It communicates the core action and scope efficiently, earning 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 list tool with fully documented parameters and an output schema, the description is mostly sufficient. However, it leaves 'recent' undefined and does not help the agent decide between this tool and sibling call-related tools, which creates a meaningful contextual gap.

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

Parameters3/5

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

Schema description coverage is 100%, with every parameter documented (limit, offset, status, agent_id). The tool description adds no additional meaning to these parameters, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description uses a clear verb and resource: 'List recent calls for the authenticated business'. It distinguishes the tool from list_sms_messages, list_voicemails, and list_conversations by the resource type, but it does not define 'recent' or explicitly differentiate it from call-status or recording siblings.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool versus related siblings like check_call_status, get_call_recording, or get_transcript. The description provides no alternatives, exclusions, or preconditions, leaving the agent to infer the appropriate context 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.

list_rightsize_recommendationsList Plan Right-Size RecommendationsA
Read-onlyIdempotent
Inspect

List per-period auto-right-size decisions from plan_rightsize_recommendations, including the dry_run -> notified -> (kept | applied | superseded) lifecycle. Answers "is this business about to get right-sized". Mirrors GET /api/v1/rightsize-recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
limitNo
actionNo
statusNo
business_idNoBusiness ID (optional only when the token can access exactly one business).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYesWhether the tool completed successfully
business_idNo
recommendationsNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral context by disclosing the dry_run -> notified -> (kept | applied | superseded) lifecycle and the per-period nature of the results. No contradictions with annotations.

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

Conciseness4/5

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

The description is tight and front-loaded, with an effective one-line purpose followed by useful lifecycle and API context. The 'Mirrors GET /api/v1/rightsize-recommendations' sentence is slightly redundant but still informative and not fluff.

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

Completeness4/5

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

With a rich input schema, output schema, and strong read-only/idempotent annotations, the description provides enough behavioral framing: what is listed, the lifecycle, the filtering period, and the role of the tool. It does not explain optional filter defaults, but those are already visible in the schema.

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

Parameters3/5

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

Schema description coverage is only 17%, so the description carries extra responsibility. It adds 'per-period' meaning for the from/to filters and the lifecycle states align with status, but it does not explain the action enum, limit pagination, or business_id semantics beyond the minimal schema.

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

Purpose5/5

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

The description names a specific action and resource ('List ... auto-right-size decisions'), ties it to a concrete state lifecycle, and states the human-facing question it answers. It is clearly distinct from generic list_plans or list_subscription_history siblings.

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

Usage Guidelines4/5

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

The description establishes clear intended use by asking 'is this business right about to be right-sized' and explicitly names the mirroring API endpoint. It does not enumerate exclusions or compare against sibling list tools, but the use case is unambiguous.

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

list_sms_messagesList SMS MessagesA
Read-onlyIdempotent
Inspect

List recent SMS messages for the authenticated business. Filter by conversation or direction (inbound/outbound).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 50, max 100)
offsetNoZero-based pagination offset (default 0)
directionNoFilter by direction: inbound or outbound (optional)
conversation_idNoFilter by conversation ID (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
errorNoPresent when success is false
limitNo
offsetNo
filtersNo
successYesWhether the tool completed successfully
has_moreNo
messagesNo
next_offsetNo

TDQS

A4.1/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 'recent' scoping and authenticated-business context, but does not describe sorting or time-window behavior. This is acceptable given annotations.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. It states the core action, scope, and filtering options efficiently.

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 a complete parameter schema, an output schema, and annotations covering side effects, the description provides sufficient context for correct invocation. Nothing essential 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 description coverage is 100%, so the schema already documents all four parameters. The description only restates the direction and conversation filters without adding extra semantic detail beyond what the schema provides.

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

Purpose5/5

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

The description clearly states the verb and resource: 'List recent SMS messages' for the authenticated business. It also names the two key filters, immediately distinguishing this tool from sibling list tools like list_voicemails or list_conversations.

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 gives clear context: this is for retrieving recent SMS messages and optionally narrowing by conversation or direction. It does not explicitly exclude alternatives, but the intended use is obvious from the description and tool name.

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

list_subscription_historyList Subscription Change HistoryA
Read-onlyIdempotent
Inspect

List plan/price change history from subscription_change_history — the billing analogue of admin_change_history, written from the Stripe webhook and the right-size apply job. Mirrors GET /api/v1/subscription-history.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
limitNo
sourceNoe.g. stripe_webhook, rightsize_apply_job.
business_idNoBusiness ID (optional only when the token can access exactly one business).
change_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
changesNo
successYesWhether the tool completed successfully
business_idNo

TDQS

A3.9/5.0
Behavior3/5

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

The description adds provenance (Stripe webhook, rightsize apply job) and API mirroring, which is useful beyond the read-only/idempotent annotations. It does not mention pagination behavior, default time range, or auth requirements.

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

Conciseness5/5

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

Two tight sentences with the core purpose front-loaded. The analogue and endpoint reference earn their place; 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?

Covers provenance and API mirror but, with no output schema, does not describe returned fields, sorting, or default window. Adequate for a simple list tool but not fully complete.

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

Parameters3/5

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

Schema coverage is low, so the description must compensate. It helps contextualize 'source' and 'change_type' (plan/price changes from Stripe/rightsize), but it does not clarify 'from', 'to', 'limit', or 'business_id' semantics.

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 ('List') and resource ('plan/price change history'), and immediately distinguishes it as the billing analogue of admin change history. An agent can tell exactly what this tool does.

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

Usage Guidelines4/5

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

Explains this is the billing counterpart to admin change history and mirrors a REST endpoint, giving clear context for when it applies. It stops short of explicitly stating when not to use it or naming a preferred sibling for non-billing cases.

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

list_tool_execution_logsList Tool Execution LogsA
Read-onlyIdempotent
Inspect

List per-call voice-agent tool execution traces — outcome, latency, timeout, and a redacted result preview for each routed tool call. Mirrors GET /api/v1/tool-execution-logs. Answers "did this tool call actually work".

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
limitNo
call_idNoCall/conversation id filter.
tool_nameNoTool name filter (e.g. send_sms).
business_idNoBusiness ID (optional only when the token can access exactly one business).
tool_call_idNoExact tool_call_id filter.
outcome_statusNoOutcome envelope status filter (e.g. success, needs_clarification, unavailable, queued, retryable_delay, hard_failure).

Output Schema

ParametersJSON Schema
NameRequiredDescription
logsNo
errorNoPresent when success is false
successYesWhether the tool completed successfully
business_idNo

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the read-only/idempotent annotations, the description discloses that result previews are redacted, that latency and timeout are captured, and that logs are per-call. This adds meaningful behavioral context without contradicting the annotations, though it does not mention ordering, pagination, or data availability delays.

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

Conciseness5/5

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

Two sentences with no filler: the first fronts the resource and key data fields, the second gives the API mapping and the practical question the tool answers. Every clause earns its place.

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

Completeness5/5

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

For an optional-filter list operation with a read-only annotation and an output schema, the description provides everything needed to select and invoke the tool: resource scope, output contents, API correspondence, and the intended diagnostic use. No critical information 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?

The schema already documents five of eight parameters with descriptions, while the remaining three (to, from, limit) have self-evident names, formats, and defaults. The description adds little direct parameter guidance, but it does contextualize the outcome_status filter through 'outcome'. This is adequate but not exemplary given the 63% schema coverage.

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

Purpose5/5

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

Description uses a specific verb and resource ('List per-call voice-agent tool execution traces') and enumerates meaningful output aspects: outcome, latency, timeout, and redacted result preview. It also connects the tool to an explicit API endpoint and a user-facing question ('did this tool call actually work'), which clearly separates it from generic list tools.

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

Usage Guidelines4/5

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

The description provides a clear use context by framing the tool as the way to answer whether a tool call actually worked and by mentioning per-call routed tool executions. It does not explicitly name alternatives or exclusion conditions, but the context is strong enough for an agent to select this tool for log/trace inspection.

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

list_voicemailsList VoicemailsA
Read-onlyIdempotent
Inspect

List recent voicemails for the authenticated business, including transcripts and recording URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 20, max 100)
offsetNoZero-based pagination offset (default 0)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
errorNoPresent when success is false
limitNo
offsetNo
successYesWhether the tool completed successfully
has_moreNo
voicemailsNo
next_offsetNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already cover read-only, non-destructive, idempotent behavior. Description adds the 'recent' and 'authenticated business' context, but it does not disclose ordering, pagination behavior, or any rate/access limitations. It does not contradict annotations, so a neutral score 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.

Conciseness5/5

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

One short sentence that front-loads the core action, resource, scope, and return content. Every phrase earns its place; no redundant 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 simple read-only listing endpoint, the description plus schema covers the essential context: what is listed, for whom, and what the response includes. The word 'recent' is slightly ambiguous (no time window) but not critical for a basic list call.

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

Parameters3/5

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

The input schema provides complete descriptions for both parameters (limit, offset), including defaults and bounds. The description adds no additional parameter meaning, so it stays at the baseline for high schema coverage.

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

Purpose5/5

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

The description names a specific verb ('list'), a specific resource ('voicemails'), and scope ('for the authenticated business'), and adds key content details ('transcripts and recording URLs') that distinguish it from sibling list tools like list_recent_calls or list_leads.

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 the tool is for retrieving recent voicemails for the authenticated business, which gives clear context. However, it does not explicitly state when to prefer this over sibling tools or mention any exclusions.

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

list_voicesList Voice CatalogA
Read-onlyIdempotent
Inspect

List the curated, credential-free voice catalog (id, display name, accent, language, gender, sample URL) used to configure agent voices. Mirrors GET /api/v1/voices.

ParametersJSON Schema
NameRequiredDescriptionDefault
genderNoFilter by gender: male or female.
languageNoFilter by language label, e.g. English or Spanish.
providerNoFilter by voice provider id, e.g. 11labs or azure.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
voicesNo
successYesWhether the tool completed successfully

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows it's safe. The description adds that the catalog is 'curated' and 'credential-free', and points to a REST endpoint, which helps set expectations of the data source. However, it does not describe the output format beyond listing fields, though an output schema exists. The added context justifies a 3, but not higher because the critical behavioral cues are already in annotations.

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

Conciseness5/5

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

The description is two sentences with zero fluff. It is front-loaded with the action and resource, followed by a useful note about the REST endpoint. Every word earns its place.

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

Completeness5/5

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

For a simple filterable list tool, the description, combined with the input schema and annotations, is complete. It mentions the purpose (configuring agent voices), the output fields, and the credential-free nature. The output schema covers return values. Nothing is obviously missing for an agent to invoke it correctly.

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

Parameters3/5

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

The input schema has 100% description coverage, with each parameter described as a filter by gender, language, or provider. The description does not add any additional meaning beyond what the schema provides. Per the rubric, with high coverage, the baseline is 3, and the description doesn't elevate it.

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

Purpose5/5

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

The description clearly states the tool lists a curated voice catalog with specific fields (id, display name, accent, language, gender, sample URL) and mentions it mirrors the REST endpoint GET /api/v1/voices. This is a specific verb (list) and resource (voice catalog), distinguishing it from many sibling list_* tools. The inclusion of 'credential-free' is a helpful qualifier.

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

Usage Guidelines4/5

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

The description implies the tool is for configuring agent voicesaine, and indicates a REST endpoint. It doesn't explicitly name alternatives or state when not to use it, but the purpose is clear enough. The description's note that it is 'credential-free' could suggest it should be used when no credentials are required, though this is implicit. Since there are no sibling voice-related tools, this is acceptable.

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

list_workflow_templatesList Workflow TemplatesA
Read-onlyIdempotent
Inspect

List the cadence/campaign workflow templates KaiCalls can run (standard, aggressive, nurture, custom), including each template's retry interval, defaults (call windows, days, attempts), and a ready-to-use cadence_config example. Call this before create_campaign so an external agent can trigger a multi-step sequence with launch=true instead of guessing the cadence_config shape blind. Static catalog — no per-business state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
usageNo
successYesWhether the tool completed successfully
defaultsNo
templatesNo
cadence_config_fieldsNo

TDQS

A4.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 agent knows it is safe to call. The description adds that it returns a ready-to-use config example and is a static catalog, which is useful. However, it does not detail the output structure beyond that, but given annotations cover safety, score 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?

Three sentences long, front-loaded with the core purpose and concrete detailsheb. The second sentence explains when to use it, and the third adds a clarifying constraint. No waste, though it could be slightly more concise by merging the second and third sentences, but overall it is efficient.

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 zero parameters, rich annotations, and an output schema, the description is complete. It tells the agent why to use it (to get cadence_config example), what it returns (templates with details), and its scope (static). The output schema covers the exact structure, so nothing critical 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 zero parametersches, the schema provides no information, so the description carries full burden. It succinctly explains the content of the output (retry interval, defaults, example) which is key for using the tool. Although it does not describe each field in the output schema, that may be covered by the output schema itself. A score of 4 is justified because it clearly communicates what the tool returns without needing parameter descriptions.

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

Purpose5/5

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

The description clearly states the tool lists workflow templates with specific details (retry intervals, defaults, cadence_config example), distinguishing it from generic list tools. It also explains the purpose of informing create_campaign, which differentiates it from other 'list_' siblings.

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

Usage Guidelines5/5

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

Explicitly instructs to call this before create_campaign, providing a clear use case and routing rationale. It also mentions that it is a static catalog with no per-business state, which implies when it might not be needed (e.g., for dynamic data), and indirectly contrasts with create_campaign.

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

make_callMake CallA
Destructive
Inspect

Initiate an outbound voice preview via a KaiCalls AI agent. This lets the owner hear Kai, but it is preview only and never proves inbound routing or advances activation. Pass an idempotency_key to make the request safely retryable.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesPhone number to call (E.164 format, e.g. +19085551234)
nameNoCaller/lead name (optional)
contextNoCall context or reason (optional)
lead_idNoExisting lead ID to associate (optional)
agent_idYesKaiCalls agent ID to use for the call
first_messageNoOverride the agent greeting message (optional)
idempotency_keyNoClient-chosen key that makes this call exactly-once: retries with the same key never place a second call (optional but recommended)
connector_activation_callNoTrue only for the one-time connector activation call the recipient explicitly requested in this conversation. This is not permission for marketing, SMS, or future calls.

Output Schema

ParametersJSON Schema
NameRequiredDescription
callNo
errorNoPresent when success is false
successYesWhether the tool completed successfully
replayedNo
intent_idNo
preview_onlyNo
idempotency_keyNo
counts_toward_activationNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations mark this as mutating/destructive, and the description goes further: it performs a real outbound call, is preview-only, has activation limitations, and is retry-safe with an idempotency key. This is meaningful behavioral context beyond what readOnlyHint/destructiveHint already communicate.

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 core action, and zero filler. 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?

Covers the crucial distinction between preview call and inbound routing/activation, which is the main risk of misuse. It doesn't discuss post-call outputs or prerequisites, but those are minor given output_schema exists and the core constraint is stated.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description does highlight idempotency_key behavior in prose, but that guidance is already present in the parameter's schema description, so it adds no new semantic information.

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?

Opens with exact action and resource ('Initiate an outbound voice preview via a KaiCalls AI agent'), then immediately disambiguates scope ('preview only' — not inbound routing or activation). An agent can tell what this tool does and what it does not do.

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 frames when this tool is appropriate ('owner hear Kai', preview only) and explicitly states it never proves inbound routing or advances activation. It does not name an alternative sibling tool for activation verification, so it misses the top bar for routing guidance.

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

report_issueReport an IssueAInspect

Report a problem with your KaiCalls agent, phone number, billing, or account. Saves the report to your change history and notifies KaiCalls support so a person can follow up — use this any time something is broken or not working as expected.

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryYesOne-line summary of the problem (max 200 characters).
categoryNoWhat part of the product this issue relates to.other
severityNoHow badly this is affecting the business.medium
business_idNoBusiness ID (optional only when the token can access exactly one business).
descriptionYesFull details: what happened, what you expected, and any relevant call or time.
reporter_emailNoEmail address support should reply to, if different from the account email.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYesWhether the tool completed successfully
categoryNo
severityNo
report_idNo
business_idNo
support_notifiedNo

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses that the tool saves to change history and notifies support, which is beyond what annotations provide (annotations only say not read-only, not idempotent, not destructive). It doesn't mention potential rate limits or response format, but the key behavioral outcomes are covered. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single, dense sentence that front-loads the core purpose and follows with important consequences. It avoids redundancy and delivers all critical information in a compact form.

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?

The tool has a schema with 100% parameter documentation, an output schema (not shown but exists), and no nested objects. The description covers the purpose, the scope of issues, the action taken (saves to history, notifies support), and when to use it. Nothing critical is missing for an agent to call it correctly.

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

Parameters3/5

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

The schema has 100% description coverage, so the schema already explains each parameter. The description adds context about the overall action (saves to history, notifies support) but does not add specific parameter-level semantics beyond what the schema already provides. Therefore, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb ('report a problem'), the resource (KaiCalls agent, phone number, billing, or account), and explicitly distinguishes it from other tools by noting it saves to change history and notifies support. This distinguishes it from siblings like 'request_kaicalls_update' and configuration 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 explicitly states when to use this tool: 'use this any time something is broken or not working as expected.' It implicitly distinguishes from configuration tools (which are for settings changes) and update tools (which are for feature requests). While it doesn't explicitly name alternatives, the context is clear enough.

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

request_extra_numberReview an Extra NumberA
Idempotent
Inspect

Reserve an exact pool number and request an owner-only browser review of its recurring extra-line price. Requires numbers:write and billing:write. Never charges included or prepaid capacity; use attach_number for included allocation. This tool does not approve payment or prove activation.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYes
business_idYes
phone_numberYes
idempotency_keyYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already provide idempotentHint, openWorldHint, readOnlyHint=false.Image The description goes beyond them by disclosing permission requirements ('Requires numbers:write and billing:write') and explicitly negating two side effects ('Does not approve payment or prove activation'). These clarifications add real behavioral context beyond what annotations alone convey. Note: readOnlyHint=false is consistent with the write nature of reserving/reviewing, so no contradiction.

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

Conciseness5/5

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

Three sentences, each carrying distinct information: core operation, prerequisite scopes, and a sibling-routing exclusion with a non-goal disclaimer. No filler and the primary action 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?

The description covers the operation's purpose, prerequisites, and non-goals. It names the alternative (attach_number) and clarifies what the tool does not do. With four required string parameters and no output schema, the description is close to complete for invocation, though it could clarify the meaning of idempotency_key and the unique owner-only nature. Still, it's strong.

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 has 0% description coverageaging and the description does not explain what business_id, agent_id, phone_number, or idempotency_key mean in this context. 'exact pool number' hints at phone_number but doesn't map parameters to their roles or constraints. The description should explicitly connect these parameters to the operation.

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 crisp verb-object pair: 'Reserve an exact pool number and request an owner-only browser review of its recurring extra-line price.' This clearly distinguishes the action from sibling tools like attach_number or buy_number, using specific resources ('pool number', 'extra-line price') and an explicit qualifier ('owner-only').

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 gives an explicit exclusion with a direct alternative: 'Never charges included or prepaid capacity; use attach_number for included allocation.' This tells the agent when NOT to use this tool and names the sibling to use instead. It doesn't elaborate on broader conditions (e.g., when you'd need a browser review vs. direct attach), but the key decision point is covered.

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

request_kaicalls_updateRequest KaiCalls UpdateA
DestructiveIdempotent
Inspect

Ask the KaiCalls on-behalf update broker to perform a scoped, governed mutation. Supported intents: phone.emergency_address.set, transcripts.sink.configure, agent.patch, numbers.purchase, agent.config.rollback. Prefer update_agent_config for prompt/voice/model edits, configure_agent_business_rules for a single named operational prompt section, upsert_lead for lead create/update, send_sms for outbound texts, configure_staff_alerts for alert recipients/rules, and configure_textable_links for send-link setup. Mutating requests need an idempotency_key; high-risk changes need human authority. The broker returns needs_user_input, needs_approval, pending_approval, executed, denied, or unsupported — never an unaudited side effect.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoWho is asking: { type: agent|human|system|integration, id, display_name }.
intentYesUpdate intent: phone.emergency_address.set, transcripts.sink.configure, agent.patch, numbers.purchase, or agent.config.rollback
reasonNoRequired when changing the raw voice-agent configuration; recorded in the durable audit.
targetNoTarget identifiers, e.g. { phone_number } for E911 or { agent_id } for agent.patch.
dry_runNoValidate tenant, scope, schema, authority, and policy without executing.
payloadNoIntent payload. E911: address + disclosure_acknowledged=true. transcripts: webhook_url + events. agent.patch: name, inbound_prompt, outbound_prompt, sms_prompt, first_message, voice, model, max_duration, metadata, vapi_config, transfer_enabled, transfer_phone_number.
authorityNoHow the change was authorized: { mode: none|agent_asserted|human_confirmed|dashboard_session|system_policy, confirmed_by, confirmed_at, confirmation_ref }. human_confirmed requires all three confirmation fields.
requesterNoOptional legacy requester metadata for audit trails (prefer actor).
source_refNoExternal source reference, such as a Discord message or automation run ID.
business_idNoBusiness ID. Required when the API key can access multiple businesses.
idempotency_keyNoRequired for any mutating request. Repeating a key returns the original outcome instead of re-running provider side effects.
queue_for_approvalNoWhen authority is missing, create a pending dashboard approval instead of returning needs_approval.

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
errorNoPresent when success is false
intentNo
resultNo
statusNo
messageNo
successYesWhether the tool completed successfully
summaryNo
approvalNo
request_idNo
risk_levelNo
business_idNo
missing_fieldsNo

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses that this broker never produces an unaudited side effect, returns only a fixed set of outcomes (needs_user_input, needs_approval, pending_approval, executed, denied, unsupported), and requires idempotency_key for mutations and human authority for high-risk changes. The annotations say destructiveHint=true and idempotentHint=true, which align with the description — no contradiction. The description adds meaningful operational context that the annotations alone do not convey.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: scope, supported intents, sibling alternatives, required keys, authority requirement, and return outcomes. The alternative tool routing is front-loaded, and the behavioral guarantees are stated compactly at the end. No fluff.

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

Completeness5/5

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

Given the tool's complexity (12 params, nested objects, multiple intents, mutation semantics), the description covers the critical behavioral contract: return values, idempotency, authority, and routing to alternatives. The output schema exists and the input schema is fully documented, so the description need not repeat those details.

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

Parameters4/5

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

The input schema already has 100% parameter coverage, so the baseline is 3. The description adds value by specifying which intents map to which payload fields (E911 requires address + disclosure_acknowledged=true; transcripts requires webhook_url + events), which helps an agent construct the payload correctly without relying solely on the schema's generic wording.

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 identifies the tool as a governed mutation broker for specific intents, listing exact intent values and naming the sibling tools it should not be used for. This distinguishes it from the many update/configure siblings without needing to inspect each 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 lists preferred alternatives for several use cases (update_agent_config for prompt/voice/model edits, configure_agent_business_rules for a single named operational prompt section, upsert_lead for lead create/update, send_sms for outbound texts, configure_staff_alerts for alert recipients/rules, configure_textable_links for send-link setup). This gives the agent clear routing guidance beyond what the schema alone provides.

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

retry_activation_notificationRetry Activation NotificationA
DestructiveIdempotent
Inspect

APPROVAL-GATED. Retry only the current terminal or time-eligible activation notification channel for the exact active session. Requires a new idempotency key; ambiguous provider outcomes are never blindly resent.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
authorityNo
business_idYes
idempotency_keyYes
activation_session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
statusNo
attemptNo
successYesWhether the tool completed successfully
business_idNo
activation_session_idNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true. The description adds valuable behavioral context: it is approval-gated, requires a new idempotency key, and 'ambiguous provider outcomes are never blindly resent.' This goes beyond the annotations and clarifies the safety/retry semantics. No contradiction with annotations.

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

Conciseness5/5

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

Three sentences with no filler. The approval-gated warning is front-loaded, the scope is precise, and the idempotency requirement is stated compactly. 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 mutation tool with an output schema and annotations covering safety, the description is largely complete. It explains the retry scope, the idempotency requirement, and the cautious behavior around ambiguous outcomes. It does not explain the authority parameter or the output schema, but the output schema exists and the core invocation semantics are covered.

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. It explains the purpose of idempotency_key ('Requires a new idempotency key') and channel ('current terminal or time-eligible activation notification channel'), but it does not explain business_id, activation_session_id, or authority. The description adds some meaning but leaves several parameters 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 ('Retry') and resource ('activation notification channel for the exact active session'), and distinguishes it from a generic retry by specifying 'current terminal or time-eligible' and 'exact active session.' It does not explicitly name a sibling alternative, but the scope is clear enough to differentiate from retry_setup and confirm_notification_destination.

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 gives clear context: retry only the current terminal or time-eligible channel for the exact active session, and requires a new idempotency key. It implies when to use (when a notification needs retrying for an active session) but does not explicitly state when not to use it or name alternative tools. The 'APPROVAL-GATED' flag adds a usage constraint.

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

retry_setupReconcile Existing SetupA
DestructiveIdempotent
Inspect

Reconcile database pointers for an existing imported signup phone reservation. Owner-only, entitlement-checked, single-flight and idempotent. Never creates agents, buys numbers, changes provider routing or sends messages. PBX, missing imports, and stale claims return review blockers. Reuse the same key to read/replay the outcome; a failed request requires review before a new key. Ready means database agreement, not activation.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYes
business_idYes
idempotency_keyYes

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations, the description discloses single-flight execution, owner/entitlement requirements, the safety boundary of actions it will never take, the review-blocker failure mode, and the semantics of 'ready.' Without an outputSchema, these behavioral clarifications are particularly valuable.

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 definition is intentionally dense rather than verbose, with purpose front-loaded and caveats structured from scope to failure semantics. A bit more structure could make the operational guarantees easier to parse, but no sentence 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 a mutation tool with no output schema, the description covers permissions, idempotency, failure blockers, and the meaning of 'ready', which is an effective full invocation model. It still does not provide a clear picture of the response shape or how business_id/agent_id are used, so it is strong but not fully 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 three required parameters are present, but the description only clarifies semantics of the idempotency key: 'Reuse the same key to read/replay the outcome.' It does not explain what business_id and agent_id identify or how they map to the imported signup reservation, leaving two required parameters 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?

The description opens with a specific verb and resource: 'Reconcile database pointers for an existing imported signup phone reservation.' It also distinguishes itself from siblings through explicit negative scope: it never creates agents, buys numbers, changes provider routing, or sends messages, and it distinguishes 'database agreement' from actual activation.

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 gives clear positive context: it is for an existing imported signup reservation, owner-only, entitlement-checked, and requires review after failure. It also provides a clear negative scope, but it does not name sibling tools such as retry_activation_notification, so an agent must still infer the exact alternative for other setup/activation flows.

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

rollback_configRollback Agent ConfigurationA
DestructiveIdempotent
Inspect

Request a rollback to a prior assistant_config_versions snapshot. This changes live greeting, voice, prompt and model settings, so authenticated owner review of the exact stored request is required. Caller-supplied authority fields never authorize execution. Discover a target with list_config_versions or get_change_history; relay the pending request's review URL. The agent.config.rollback executor preserves version recording and secret exclusion after trusted approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoWho is asking: { type: agent|human|system|integration, id, display_name }.
reasonNoOptional human-readable reason recorded in the audit trail.
dry_runNoValidate tenant, scope, and policy without touching the live config.
agent_idYesAgent ID to roll back.
authorityNoAttribution only. Caller-supplied modes cannot authorize a rollback; authenticated owner review of the exact stored request is required.
source_refNoExternal source reference, such as a ticket or automation run ID.
version_idNoTarget assistant_config_versions row id to restore. One of version_number/version_id is required.
business_idNoBusiness ID (optional only when the token can access exactly one business).
version_numberNoTarget assistant_config_versions.version_number to restore. One of version_number/version_id is required.
idempotency_keyNoStable key for the rollback request; repeating it returns the original outcome. Defaults to a key derived from agent + version — pass a fresh key to repeat a rollback that already executed.
queue_for_approvalNoCreate a durable owner-review request (default true). Setting false returns needs_approval, but an authority-envelope retry still cannot execute.

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
errorNoPresent when success is false
resultNoOn executed: { agent_id, restored_from_version, restored_fields, skipped_fields, new_version_number, warning? }.
statusNo
messageNo
successYesWhether the tool completed successfully
summaryNo
agent_idNo
approvalNo
request_idNo
risk_levelNo
business_idNo

TDQS

A4.5/5.0
Behavior5/5

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

This is a destructive, idempotent, non-read-only tool, and the description adds meaningful behavioral context beyond the annotations: it changes live settings, requires authenticated owner review, explicitly states caller-supplied authority fields never authorize execution, and notes the executor preserves version recording and secret exclusion after approval. It also implies idempotent retry behavior consistent with the idempotentHint 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?

Four sentences, each earning its place: what the tool does, what side effects and approvals apply, how to discover a target and complete the flow, and what the executor guarantees. The most decision-relevant facts are front-loaded, and the additional length is justified for a destructive, approval-gated operation.

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 destructive annotations, a full input schema, an output schema, and 11 parameters, the description provides the missing operational context: where to find a valid target, the review URL relay step, and the auth model. An agent has enough information to select and correctly invoke the tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 11 parameters, including nuanced ones like idempotency_key, authority, and queue_for_approval. The tool description reinforces the authority limitation and the approval workflow, but it does not add parameter-level meaning beyond what the rich schema descriptions already provide.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Request a rollback to a prior assistant_config_versions snapshot.' It also names the live settings affected (greeting, voice, prompt, model), which clearly distinguishes it from generic agent configuration updates and from list-only tools like list_config_versions.

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 gives a clear usage workflow: discover a target with list_config_versions or get_change_history, then relay the pending request's review URL. It explains the approval requirement and that authority fields cannot authorize execution. However, it does not explicitly state when to prefer rollback_config over the similarly adjacent update_agent_config sibling, leaving some inference to the agent.

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

run_evalRun Agent EvalA
Destructive
Inspect

Run a single eval scenario (eval_id) or every scenario for an agent (agent_id) against its live voice agent and grade the result. Bills voice-agent compute. Mirrors POST /api/v1/evals/run.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNoBlock until the run completes (default true).
eval_idNoRun a single eval scenario by ID.
agent_idNoRun every eval scenario for this agent.
max_wait_msNoPer-run wait cap in ms when wait is true (default 60000, max 110000).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
totalNo
failedNo
passedNo
run_idNo
statusNo
resultsNo
successYesWhether the tool completed successfully
completedNo
vapi_run_idNo

TDQS

A4.2/5.0
Behavior4/5

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

The description adds important behavior beyond the annotations: it explicitly warns that the operation 'Bills voice-agent compute' and targets a 'live voice agent', indicating real-world cost and side effects. This complements the destructiveHint=true annotation rather than contradicting it.

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

Conciseness5/5

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

Two tight sentences lead with the core action, immediately explain the two parameter-driven modes, then add the crucial cost warning and an API reference. Every clause carries meaning 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 tool with an output schema and fully documented parameters, the description covers the essential decision points: which mode to use, what happens (grading), and the cost implication. It does not explain asynchronous behavior when wait=false, but the schema already documents wait and max_wait_ms, so this is not a critical gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents wait, eval_id, agent_id, and max_wait_ms. The description adds useful context about the two operation modes but does not add new detail beyond the structured schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific action ('Run'), the exact resource ('single eval scenario' or 'every scenario for an agent'), the target ('live voice agent'), and the outcome ('grade the result'). It clearly distinguishes between eval_id and agent_id modes, so an agent knows what the tool operates on even among many siblings.

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

Usage Guidelines4/5

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

The description provides clear usage context: use this tool to execute evaluations and grade results, with either eval_id or agent_id. It does not explicitly state when not to use it or name an alternative tool, but the function is specific enough that an agent can infer when it applies.

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

search_available_numbersSearch Available NumbersA
Read-only
Inspect

Search the carrier for phone numbers available to purchase (real-time Twilio inventory lookup). Mirrors GET /api/v1/phone-numbers/search.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 10, max 20).
countryNoTwo-letter country code (default US).
area_codeNoPreferred area code (optional).
business_idNoSearch that business's carrier inventory (optional; defaults to the platform carrier).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYesWhether the tool completed successfully
available_numbersNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already communicate read-only and non-destructive behavior. The description adds the meaningful 'real-time Twilio inventory lookup' detail, but does not disclose pagination, rate limits, or that results may change between calls.

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

Conciseness5/5

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

The description is concise and front-loaded with the core action ('Search the carrier for phone numbers available to purchase'), with the API mirror note as useful supporting context. No filler or redundant restatement of the tool name.

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

Completeness4/5

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

With a rich input schema, output schema, and safety annotations, the description covers the essential purpose and real-time nature of the operation. It does not explicitly guide the agent to use this before buy_number, but the context is mostly complete for a simple read-only lookup.

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

Parameters3/5

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

The schema description coverage is 100%, so all parameters are already documented in the input schema. The description adds no extra semantic nuance about parameter usage beyond framing this as an inventory lookup.

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 operation: 'Search the carrier for phone numbers available to purchase,' and clarifies it as a real-time Twilio inventory lookup. This clearly differentiates it from purchasing and number-management siblings like buy_number, attach_number, or list_* tools.

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

Usage Guidelines3/5

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

The phrase 'available to purchase' implies this tool should be used to discover numbers before buying or attaching them, but the description never explicitly says when to use it versus buy_number or attach_number. Guidance 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.

send_smsSend SMSA
Destructive
Inspect

Send an outbound text message from one of your agents' phone lines to a recipient, routed through the governed messaging API. Compliance gates (opt-out / Do-Not-Call / quiet-hours), rate limits, and message logging all apply. Provide from_agent_id (the sending agent), to (recipient phone in E.164), and message. Optionally link lead_id to attribute the text and respect that lead's automation-pause state.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient phone number in E.164 format (e.g. +18135551234).
lead_idNoOptional lead ID to link and honor the lead's automation-pause state.
messageYesText message body.
from_agent_idYesAgent ID whose phone line the text is sent from.
idempotency_keyNoOptional caller-supplied key. A replay with the same key returns the original send outcome instead of sending again — use it when retrying after an uncertain response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toNo
fromNo
errorNoPresent when success is false
successYesWhether the tool completed successfully
message_sidNo

TDQS

A3.9/5.0
Behavior4/5

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

The description discloses behavior beyond the annotations: compliance gates (opt-out / Do-Not-Call / quiet-hours), rate limits, message logging, and the side effect of honoring a lead's automation-pause state when lead_id is supplied. These add meaningful context on top of readOnlyHint=false / destructiveHint=true, which only signal that the call has side effects without describing what they are.

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 with a clear front-loaded action, a compliance caveat, and a parameter walkthrough. The third sentence partially duplicates the schema's parameter descriptions, but the first sentence is pure signal and the second earns its place by surfacing the governed-messaging context.

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

Completeness4/5

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

The definition is complete enough given the scaffolding: an output schema exists (so return values are covered elsewhere), the input schema is fully documented, and annotations already convey safety/destructiveness. The description adds the compliance and logging context an agent needs to anticipate failed sends, while idempotency_key semantics are left to the schema, which is acceptable.

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

Parameters3/5

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

With schema description coverage at 100%, the baseline is 3. The narrative mostly restates what the schema already says (from_agent_id = sending agent, to = E.164, lead_id = automation-pause), adding little new meaning. It does cluster the key parameters into a call-to-action sentence, which slightly eases comprehension, but not enough to exceed the baseline.

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

Purpose5/5

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

The description opens with a specific verb-plus-resource statement: "Send an outbound SMS from one of your agents' phone lines to a recipient," which distinguishes it from siblings like make_call (voice) and list_sms_messages (read-only listing). The governed-messaging-API detail further positions it uniquely among the 80+ 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?

The description implies when the tool is used (sending agent-originated SMS under compliance constraints) and states the operating environment, but it never explicitly routes the agent to alternative tools or says when NOT to use it (e.g., vs make_call for voice, or list_sms_messages for retrieval). No sibling tool is named, so the agent must infer the boundary from purpose alone.

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

set_owner_phoneSet Owner PhoneA
DestructiveIdempotent
Inspect

Save the owner's own mobile number on the business record so Kai can ring it first and so activation/forwarding follow-ups can reach a human. A number is not fully set up until this is on file and forwarding is verified — connecting the number alone does not prove the owner can be reached. US numbers only; the number is normalized to E.164 and rejected if it cannot be validated as a US mobile/landline number. When ring_first is true (default), also configures ring-first routing so calls hit this cell before overflowing to the secretary — the same path used at signup.

ParametersJSON Schema
NameRequiredDescriptionDefault
ring_firstNoWhen true (default), ring this number first and overflow to the secretary. When false, only saves the number.
business_idNoBusiness ID (optional only when the token can access exactly one business).
owner_phoneYesThe owner's own mobile number, US format (e.g. (908) 555-1234 or +19085551234).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
statusNo
successYesWhether the tool completed successfully
next_stepNo
business_idNo
ring_first_statusNo
owner_phone_maskedNo
ring_first_appliedNo

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already indicate write and destructive behavior, but the description adds crucial context: normalization to E.164, validation as a US mobile/landline, the ring_first routing configuration, and the nuance that connecting the number alone doesn't prove reachability. This goes beyond what annotations provide.

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

Conciseness4/5

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

The description is about five sentences, front-loading the core purpose and setup context. It's not bloated, but could be slightly tighter by removing redundant explanation of the ring_first default. Still well-structured and readable.

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 an output schema present, return values are covered. The description covers purpose, normalization, validation, ring_first behavior, and setup implications. It doesn't detail failure modes or error messages, but for a write operation with these annotations, this is sufficiently complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters well. The description adds minimal extra parameter semantics—it re-explains ring_first's behavior and normalization, which are largely in the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Save') and resource ('owner's own mobile number on the business record') and clearly explains the purpose (ring first, reach a human). It distinguishes from siblings like add_team_phone and attach_number by emphasizing 'owner's own' and the ring-first path.

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

Usage Guidelines4/5

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

The description provides context on when this is used: as part of setup, noting that a number isn't fully set up until this is on file and forwarding is verified. It also clarifies US-only numbers and the ring_first default behavior. It does not explicitly name alternatives or when-not-to-use, but the 'owner's own' scope and setup context make the use case clear.

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

set_up_phone_systemSet Up Phone SystemA
DestructiveIdempotent
Inspect

Turn the business's number into a hosted phone system: Kai is installed as extension 700, the owner's mobile joins a team ring group, and a dial plan rings the team first and hands the call to Kai when nobody picks up. Idempotent and resumable — a re-run reuses everything already created and reports it under reused. Needs a complete US street address on file (the emergency-services and tax location) and the owner's mobile: when either is missing the tool fails with code missing_address or missing_owner_mobile plus required_field and next_action saying exactly what to collect — pass it back as business_address or owner_mobile. Returns the status shape (extension, ring group, dial plan ids, the phone-system line) and next_step, the one line to relay to the owner (forward your line here / dial 700 from any office phone). Mirrors POST /api/v1/phone-system action=provision.

ParametersJSON Schema
NameRequiredDescriptionDefault
personaNoWhich phones the business runs on, if the owner said: cell_only (just the owner's cell) or office (desk phones / an existing office line that will forward in). Shapes next_step; optional.
business_idNoBusiness ID (required when the token can access multiple businesses).
owner_mobileNoThe owner's own mobile number (US). Optional when set_owner_phone already saved one; required when the last attempt returned missing_owner_mobile.
business_addressNoThe business street address to save before provisioning. Optional when a complete address is already on file; required when the last attempt returned missing_address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idsNo
codeNoPresent when success is false.
lineNoThe phone-system line (E.164), if a number is attached.
errorNoPresent when success is false
reusedNo
createdNo
successYesWhether the tool completed successfully
warningsNo
next_stepNoThe one line to relay to the owner.
business_idNo
next_actionNoWhat to collect and how to retry, when blocked.
provisionedNo
kai_extensionNo
required_fieldNoPresent when setup is blocked on a missing input.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true (the description reinforces the re-run reuse behavior, which is an addition). It discloses failure modes and error codes (missing_address / missing_owner_mobile), return shape, and the idempotent/reused behavior, which is valuable 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.

Conciseness4/5

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

The description is long but each sentence earns its place: it covers the provisioning behavior, error handling, return shape, and the API mapping. It is front-loaded with the core action, though it's somewhat dense and could be tightened.

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?

The description covers preconditions (address + mobile on file), failure modes with exact error codes, return shape, next_step guidance, the persona parameter's effect, and the API endpoint it mirrors. Even without a separate output schema visible, the agent has enough to invoke and handle the response 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 high (business_address, owner_mobile, persona are all described). The description adds context by tying parameters to failure codes (missing_address / missing_owner_mobile), but it mostly reinforces the schema descriptions rather than adding new semantics beyond noting the `reused` report and the next_action flow.

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 ('Turn ... into'), resource ('hosted phone system'), and detailed behavior (installs extension 700, team ring group, dial plan). It clearly distinguishes this tool from siblings like order_phone_number by describing the full provisioning workflow rather than just purchasing a number.

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 gives strong contextual guidance: it says the tool needs a complete US street address and the owner's mobile, explains when it failseb and names the endpoint it mirrors. It doesn't explicitly state 'use this instead of order_phone_number when you want to provision a hosted system', so it misses a direct alternative comparison, but the context is clear enough.

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

set_webhookSet WebhookA
Destructive
Inspect

Create or update a business outbound webhook (URL + subscribed events). Returns a webhook secret on first creation only. Mirrors POST /api/v1/webhooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoExisting webhook ID to update (omit to create new).
eventsNoEvent types to subscribe to (see get_webhook for the supported list).
is_activeNoEnable or disable delivery.
business_idNoBusiness ID (optional only when the token can access exactly one business).
descriptionNoHuman label for this webhook.
webhook_urlYesHTTPS/HTTP destination URL for event delivery.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
eventsNo
messageNo
successYesWhether the tool completed successfully
webhookNo
business_idNo
webhook_secretNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover readOnly=false, destructive=true, openWorld=true, and idempotent=false. The description adds genuinely useful non-obvious behavior beyond the annotations: 'Returns a webhook secret on first creation only' — an actionable disclosure (capture the secret at creation; don't expect it on update). It could add what exactly is overwritten/destroyed on update, but with annotations present the bar is lower and this clears 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?

Three sentences with no wasted words: purpose front-loaded first, the secret behavior second, and the API anchor third. Each sentence has clear function, and the most important operational caveat (secret only on first creation) surfaces early.

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 6-parameter mutation tool, the full schema and output schema carry most of the burden while the description covers the crucial behavior an agent can't derive from them: the one-time secret and the create-vs-update mode. Remaining gaps — exact overwrite semantics on update and required permissions — are not covered, but annotations and use of enrich schema reduce the need.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already well documented in the schema. The description adds only marginal semantic value ('URL + subscribed events' maps to webhook_url/events), which is insufficient to exceed the baseline of 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?

The description uses a specific verb+resource ('Create or update a business outbound webhook') and scopes it to (URL + subscribed events), which an agent can act on directly. It does not explicitly name or contrast the webhook siblings (get_webhook, delete_webhook), but the create/update semantics make the distinction self-evident.

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 (whenever a webhook needs to be created or updated) but gives no explicit when-not or alternative guidance. The schema hint in the events parameter ("see get_webhook for the supported list") nudges toward the read sibling, but the description itself does not position this tool against get_webhook or delete_webhook.

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

update_agent_configUpdate Agent ConfigurationA
DestructiveIdempotent
Inspect

Edit an agent's live runtime configuration — greeting/first message, inbound or SMS prompt, voice, language model, max call duration, and call-transfer settings — routed through the governed update broker so every change keeps the consent + audit trail (a versioned config snapshot and change history). Every write here is reversible: inspect what changed with get_change_history or list_config_versions, then undo it with rollback_config. Mutating changes need an idempotency_key; high-impact live changes need human authority (an authority envelope) or queue_for_approval for dashboard sign-off. For just a single named operational-rules section, prefer configure_agent_business_rules.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoAgent display name.
actorNoWho is asking: { type: agent|human|system|integration, id, display_name }.
modelNoLanguage model selection: { provider, model, temperature }.
voiceNoVoice selection: { provider, voiceId }.
dry_runNoValidate and summarize the change without writing.
agent_idYesKaiCalls agent ID to update.
authorityNoAttribution only. Caller-supplied authority cannot authorize live changes; authenticated owner review of the stored request is required.
sms_promptNoSMS reply prompt.
source_refNoExternal source reference, such as a support ticket or conversation ID.
business_idNoBusiness ID. Required when the agent has multiple accessible assignments.
max_durationNoMaximum call duration in seconds.
first_messageNoSpoken greeting / first message callers hear.
inbound_promptNoFull inbound system prompt that drives the agent.
idempotency_keyNoRequired for writes. Reuse the same key when retrying the same change.
outbound_promptNoOutbound (campaign) system prompt.
transfer_enabledNoEnable/disable live call transfer.
queue_for_approvalNoWhen authority is missing, create a pending dashboard approval instead of returning needs_approval.
transfer_phone_numberNoNumber to transfer qualified calls to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
errorNoPresent when success is false
resultNo
statusNo
messageNo
successYesWhether the tool completed successfully
summaryNo
agent_idNo
approvalNo
request_idNo
risk_levelNo
business_idNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond what the annotations state, the description discloses the governed update broker, consent and audit trail, versioned snapshots, change history, reversibility via rollback_config, and idempotency/approval requirements. This is substantial behavioral context that would be important for correct and safe invocation.

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

Conciseness5/5

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

The description is dense but highly organized: purpose first, then auditability and reversibility, then mutation requirements, then sibling routing. Each sentence earns its place and no content is duplicated or wasted.

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

Completeness5/5

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

For a high-impact mutation tool with 18 parameters, the description covers the operational context an agent needs: governance, audit trail, idempotency, approval flows, reversibility, and alternatives. The presence of an output schema means not explaining return shape is an acceptable shortcut.

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

Parameters4/5

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

Schema coverage is 100%, so the description doesn't need to restate per-field details. It does add meaningful grouping and behavioral context around important parameters like idempotency_key, authority, and queue_for_approval, lifting it above baseline without making it a full parameter-by-parameter reference.

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 action and resource: editing an agent's live runtime configuration. It enumerates the field categories clearly, including greeting, prompts, voice, model, max call duration, and transfer settings, and explicitly distinguishes this from configure_agent_business_rules.

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 gives actionable when-to-use guidance: mutating changes need idempotency_key, high-impact changes need authority or queue_for_approval, and single operational-rules edits should go to configure_agent_business_rules. It also points the agent to rollback_config, get_change_history, and list_config_versions for the associated workflow.

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

update_phone_flowUpdate Phone FlowA
DestructiveIdempotent
Inspect

Replace how calls ring on the business's hosted phone system with a full phone flow: { version: 1, hours: { mode: 'always' | 'business_hours', afterHours: 'kai' }, ring: { members: [{ kind: 'cell', phone: E.164, label, requirePressOne } | { kind: 'desk_phone' | 'user', userId, label }], timeoutSeconds: 5-120 }, overflow: 'kai' }. Applied idempotently (only real differences are written); every member passes the forwarding-loop guard; business_hours mode derives the schedule from the business hours already on file. Read the current flow with get_phone_flow first and send it back with your edits. Mirrors POST /api/v1/phone-system action=save_flow.

ParametersJSON Schema
NameRequiredDescriptionDefault
flowYesThe complete phone flow to apply.
business_idNoBusiness ID (required when the token can access multiple businesses).

Output Schema

ParametersJSON Schema
NameRequiredDescription
flowNo
errorNoPresent when success is false
changesNo
successYesWhether the tool completed successfully
readbackNo

TDQS

A4.4/5.0
Behavior4/5

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

Beyond annotations (idempotentHint, destructiveHint), the description adds concrete behavioral details: idempotent application ('only real differences are written'), the forwarding-loop guard, and the business_hours derivation. These are useful and go beyond what annotations state. No contradiction with annotations; the destructiveHint aligns with 'Replace'.

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

Conciseness4/5

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

The description is long but every sentence carries necessary content: purpose, schema example, behavioral notes, usage prerequisite, and API reference. It is front-loaded with the purpose and structured logically. While dense, there is no filler or repetition.

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

Completeness4/5

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

Given the complex nested 'flow' object, the description covers the full structure, idempotency behavior, guard, business hours derivation, and the prerequisite read-write pattern. An output schema exists, so return value details are not needed. It omits error cases or edge conditions but is sufficient for an agent to use it correctly.

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

Parameters5/5

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

The schema only describes 'flow' as 'The complete phone flow to apply' with no structure. The description compensates fully by specifying the exact JSON shape, including version, hours mode, afterHours, ring members (with kind, phone, label, requirePressOne), timeoutSeconds range, overflow, and the enums for hours.mode. This is essential semantics not present in the schema.

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

Purpose5/5

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

The description clearly states a specific action ('Replace how calls ring') on a specific resource ('the business's hosted phone system') with a full phone flow. It distinguishes itself from the sibling 'get_phone_flow' by explicitly referencing it as the read counterpart, and the API mirror adds further precision.

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 gives an explicit prerequisite: 'Read the current flow with get_phone_flow first and send it back with your edits.' This is a clear usage guideline for the correct sequence, though it does not enumerate situations where the tool should not be used (e.g., when a simpler update is needed). The guidance is adequate for distinguishing from read operations.

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

upsert_knowledgeCreate or Update Agent KnowledgeA
Destructive
Inspect

Create a new agent knowledge base entry, or update one when id is provided. Mirrors POST /api/v1/knowledge. Creating requires title, content, and content_type.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoKnowledge item ID to update (omit to create).
tagsNo
titleNo
contentNo
categoryNo
business_idNoBusiness ID. Required for create when the token can access multiple businesses.
content_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
successYesWhether the tool completed successfully
knowledgeNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, so the agent knows this is a mutating operation. The description adds that it mirrors POST /api/v1/knowledge and that creating requires specific fields, which is useful. However, it doesn't disclose what happens on update (e.g., partial vs full replacement), whether updates are reversible, or any side effects. With annotations covering the destructive nature, 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.

Conciseness5/5

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

Three sentences with zero waste. The core create/update distinction is front-loaded, the HTTP endpoint reference is useful context, and the required-fields note is placed at the end. 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 7-parameter mutation tool with an output schema, the description covers the essential decision (create vs update) and the required fields. The output schema presumably documents return values, so that gap is covered. What's missing is any note about validation rules or behavior on conflicting data, but the description is largely complete for an agent to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is only 29%, so the description must compensate. It does explain the key semantic distinction for `id` (omit to create, provide to update) and lists the required fields for creation. However, it doesn't clarify the meaning of tags, category, content_type, or business_id beyond what the schema already says. The description adds some value but doesn't fully compensate for the 71% 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?

The description clearly states the tool's dual function: create a new knowledge base entry or update one when `id` is provided. It also names the exact HTTP endpoint it mirrors (POST /api/v1/knowledge), which is a specific verb+resource. This distinguishes it from sibling tools like list_knowledge and upsert_lead/upsert_product.

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 gives clear context for when to use this tool: create when no id, update when id is provided. It also states required fields for creation (title, content, content_type). However, it doesn't explicitly mention when NOT to use it or name alternatives like list_knowledge for reading, so it misses the explicit exclusion guidance that would earn a 5.

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

upsert_leadCreate or Update LeadA
Destructive
Inspect

Create a new lead or update existing leads for the authenticated business, routed through the governed leads API (business access-checked, usage-logged, and audited). To create one, pass lead with at least one of name/phone/email plus optional status/source/notes/agent_id/etc. To update, pass updates: an array of { id, ...fields } for one or many existing leads (status, name, phone, email, notes, address, city, state, zip). Updates are access-checked per row and report partial success.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadNoFields for a NEW lead: name, first_name, last_name, phone, email, status, source, notes, address, city, state, zip, agent_id, message. At least one of name/phone/email is required.
updatesNoUpdate existing leads. Each item is { id, ...fields } where fields are a subset of name, first_name, last_name, email, phone, status, source, notes, address, city, state, zip. Max 100 per call.
business_idNoBusiness ID. Required for create when the API key can access multiple businesses.

Output Schema

ParametersJSON Schema
NameRequiredDescription
leadNo
errorNoPresent when success is false
failedNo
resultsNo
successYesWhether the tool completed successfully
updatedNo
operationNocreate or update

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds valuable behavioral context: the API is governed with business access checks, usage logging, and auditing; updates are access-checked per row and report partial success. This is meaningful additional disclosure beyond what annotations provide.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary purpose, and every clause adds useful information. No filler or redundancy.

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

Completeness4/5

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

For a mutation tool with nested objects and an output schema, the description is quite complete. It covers create/update behavior, requirements, access checks, and partial success. Minor gaps: it doesn't specify what happens if both 'lead' and 'updates' are provided, or error handling beyond partial success. Given the annotations and schema, this is adequate.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the create vs. update distinction, the requirement that 'lead' must have at least one of name/phone/email, and the structure of 'updates' as an array of {id, ...fields}. While some of this is in the schema, the description ties it together and clarifies usage.

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

Purpose5/5

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

The description clearly states the tool creates or updates leads, with a specific verb and resource. It distinguishes between create (pass 'lead') and update (pass 'updates'), making its purpose unambiguous and differentiating it from read-only siblings like get_lead and list_leads.

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

Usage Guidelines4/5

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

The description provides clear usage patterns: how to create (with required fields) and how to update (with array of updates). It implies when to use it (for any lead create/update) but doesn't explicitly mention alternatives or when not to use it. However, the context is clear enough that an agent can decide without further guidance.

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

upsert_productCreate or Update Agent ProductA
Destructive
Inspect

Create a new product row, or update one when id is provided. Mirrors POST /api/v1/products. Creating requires name and business_id. Pass quantity to set/update inventory.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoProduct ID to update (omit to create).
skuNo
nameNo
priceNo
categoryNo
quantityNoInventory quantity to set (optional).
attributesNo
business_idNoBusiness ID. Required for create when the token can access multiple businesses.
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false
productNo
successYesWhether the tool completed successfully

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already signal destructive mutation, and the description adds the create/update branch and inventory-setting behavior. However, it does not disclose whether an update overwrites omitted fields or how conflicts are handled, leaving part of the behavioral picture unclear.

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

Conciseness5/5

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

Three sentences with no filler; the core create/update behavior is front-loaded, and each sentence adds distinct, useful 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?

Core invocation is covered and the output schema plus annotations reduce the need for return-value detail. However, with 9 parameters, a nested attributes object, and several undocumented fields, the description is not fully sufficient on its own.

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 33%, so the description must compensate. It adds meaning for id, name, business_id, and quantity, but sku, price, category, attributes, and description remain undocumented in both the schema and the description.

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

Purpose5/5

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

States a specific verb and resource: 'Create a new product row, or update one when `id` is provided.' It clearly distinguishes itself from sibling upsert_knowledge and upsert_lead by naming products, and clarifies the two modes of operation.

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

Usage Guidelines4/5

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

Provides explicit guidance on when to update ('when `id` is provided') and what creating requires ('name and business_id'). It does not name alternative tools, but no dedicated create/update product sibling exists, so the contextual guidance is sufficient.

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. 3 tool updates
    • Changedlist_tool_execution_logs1 field changed
      • changedInput schema / properties / call_id / description
        Previous value: -"Vapi call/conversation id filter."New value: +"Call/conversation id filter."
    • Changedlist_voices1 field changed
      • changedInput schema / properties / provider / description
        Previous value: -"Filter by provider, e.g. vapi, 11labs, or azure."New value: +"Filter by voice provider id, e.g. 11labs or azure."
    • Changedrequest_kaicalls_update1 field changed
      • changedInput schema / properties / reason / description
        Previous value: -"Required when changing raw vapi_config; recorded in the durable audit."New value: +"Required when changing the raw voice-agent configuration; recorded in the durable audit."
  2. 25 tool updates
    • Addedadd_team_phone
    • Changedbuy_number2 fields changed
      • changedInput schema / properties / authority / description
        Previous value: -"How the purchase was authorized: { mode, confirmed_by, confirmed_at, confirmation_ref }. human_confirmed requires all three confirmation fields; anything weaker returns pending_approval."New value: +"Attribution only. human_confirmed and other caller-supplied modes cannot authorize a purchase. Authenticated owner review of the exact stored request is required."
      • changedInput schema / properties / queue_for_approval / description
        Previous value: -"When authority is insufficient, create a durable dashboard approval (default true). Set false to get needs_approval and retry yourself with the same idempotency_key once a human confirms."New value: +"Create a durable owner-review request (default true). Setting false returns needs_approval, but an authority-envelope retry still cannot execute."
    • Addedchoose_customer_route
    • Changedconfigure_agent_business_rules2 fields changed
      • changedInput schema / properties / authority / description
        Previous value: -"Human-grade authority for live prompt changes: { mode: human_confirmed|dashboard_session|system_policy, confirmed_by, confirmed_at, confirmation_ref }."New value: +"Attribution only. Caller-supplied authority cannot authorize live changes; authenticated owner review of the stored request is required."
      • changedInput schema / properties / source_ref / description
        Previous value: -"External source reference, such as a support ticket or Claude conversation ID."New value: +"External source reference, such as a support ticket or assistant conversation ID."
    • Addedconfirm_notification_destination
    • Addedcreate_checkout
    • Addedget_activation_status
    • Changedget_balance2 fields changed
      • addedOutput schema / properties / businesses / items / properties
        Added value: +{
        +  "allowance_model": {
        +    "enum": [
        +      "minutes",
        +      "answered_calls"
        +    ],
        +    "type": "string"
        +  },
        +  "answered_calls_allowance": {
        +    "type": [
        +      "number",
        +      "null"
        +    ]
        +  },
        +  "answered_calls_raw": {
        +    "description": "Unweighted billable call count for reporting.",
        +    "type": [
        +      "number",
        +      "null"
        +    ]
        +  },
        +  "answered_calls_used": {
        +    "description": "Raw billable call count used for allowance reporting, matching dashboard and right-sizing; null for minute plans.",
        +    "type": [
        +      "number",
        +      "null"
        +    ]
        +  },
        +  "answered_calls_weighted": {
        +    "description": "Informational only, not allowance consumption or right-sizing: ordinary calls 1, human-answered silent-listen calls 0.5; null for minute plans.",
        +    "type": [
        +      "number",
        +      "null"
        +    ]
        +  },
        +  "business_id": {
        +    "type": "string"
        +  },
        +  "minutes_allowance": {
        +    "type": "number"
        +  },
        +  "minutes_used": {
        +    "type": "number"
        +  },
        +  "overage_allowed": {
        +    "type": "boolean"
        +  },
        +  "period_end": {
        +    "description": "Null for lifetime trial usage; does not imply the trial cannot expire.",
        +    "type": [
        +      "string",
        +      "null"
        +    ]
        +  },
        +  "period_kind": {
        +    "enum": [
        +      "lifetime_trial",
        +      "billing_cycle"
        +    ],
        +    "type": "string"
        +  },
        +  "period_start": {
        +    "type": "string"
        +  },
        +  "phone_numbers": {
        +    "description": "Active registered numbers, including unassigned numbers.",
        +    "type": "integer"
        +  },
        +  "phone_numbers_allowance": {
        +    "type": "integer"
        +  },
        +  "plan_key": {
        +    "type": "string"
        +  },
        +  "plan_name": {
        +    "type": "string"
        +  },
        +  "price_monthly": {
        +    "description": "Mapped subscription base price in USD; zero for no-card trial. Excludes add-ons and tax.",
        +    "type": "number"
        +  },
        +  "subscription_status": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / businesses / items / required
        Added value: +[
        +  "business_id",
        +  "plan_key",
        +  "plan_name",
        +  "price_monthly",
        +  "allowance_model",
        +  "minutes_used",
        +  "minutes_allowance",
        +  "answered_calls_used",
        +  "answered_calls_raw",
        +  "answered_calls_weighted",
        +  "answered_calls_allowance",
        +  "phone_numbers",
        +  "phone_numbers_allowance",
        +  "subscription_status",
        +  "overage_allowed",
        +  "period_start",
        +  "period_end",
        +  "period_kind"
        +]
    • Addedget_checkout_status
    • Addedget_extra_number_status
    • Addedget_phone_flow
    • Addedget_phone_system_status
    • Addedget_setup_recovery_status
    • Addedlist_plans
    • Changedmake_call3 fields changed
      • addedInput schema / properties / connector_activation_call
        Added value: +{
        +  "description": "True only for the one-time connector activation call the recipient explicitly requested in this conversation. This is not permission for marketing, SMS, or future calls.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / counts_toward_activation
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / preview_only
        Added value: +{
        +  "type": "boolean"
        +}
    • Addedreport_issue
    • Addedrequest_extra_number
    • Addedretry_activation_notification
    • Addedretry_setup
    • Changedrollback_config2 fields changed
      • changedInput schema / properties / authority / description
        Previous value: -"How the rollback was authorized: { mode, confirmed_by, confirmed_at, confirmation_ref }. human_confirmed requires all three confirmation fields; anything weaker returns pending_approval."New value: +"Attribution only. Caller-supplied modes cannot authorize a rollback; authenticated owner review of the exact stored request is required."
      • changedInput schema / properties / queue_for_approval / description
        Previous value: -"When authority is insufficient, create a durable dashboard approval (default true). Set false to get needs_approval and retry yourself with the same idempotency_key once a human confirms."New value: +"Create a durable owner-review request (default true). Setting false returns needs_approval, but an authority-envelope retry still cannot execute."
    • Changedsearch_available_numbers1 field changed
      • addedInput schema / properties / business_id
        Added value: +{
        +  "description": "Search that business's carrier inventory (optional; defaults to the platform carrier).",
        +  "type": "string"
        +}
    • Addedset_owner_phone
    • Addedset_up_phone_system
    • Changedupdate_agent_config1 field changed
      • changedInput schema / properties / authority / description
        Previous value: -"Human-grade authority for live changes: { mode: human_confirmed|dashboard_session|system_policy, confirmed_by, confirmed_at, confirmation_ref }."New value: +"Attribution only. Caller-supplied authority cannot authorize live changes; authenticated owner review of the stored request is required."
    • Addedupdate_phone_flow
  3. 1 tool update
    • Changedsend_sms1 field changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Optional caller-supplied key. A replay with the same key returns the original send outcome instead of sending again — use it when retrying after an uncertain response.",
        +  "type": "string"
        +}
  4. 1 tool update
    • Changedmake_call4 fields changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Client-chosen key that makes this call exactly-once: retries with the same key never place a second call (optional but recommended)",
        +  "type": "string"
        +}
      • addedOutput schema / properties / idempotency_key
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / intent_id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / replayed
        Added value: +{
        +  "type": "boolean"
        +}
  5. 8 tool updates
    • Changedbuy_number19 fields changed
      • addedInput schema / properties / actor
        Added value: +{
        +  "description": "Who is asking: { type: agent|human|system|integration, id, display_name }.",
        +  "type": "object"
        +}
      • changedInput schema / properties / agent_id / description
        Previous value: -"Agent ID to route this number to directly once purchased (optional; requires the number to also be Vapi-imported, which is not guaranteed at purchase time — prefer a follow-up attach_number call)."New value: +"Agent ID to route this number to directly once purchased (optional; requires the number to also be voice-runtime-imported, which is not guaranteed at purchase time — prefer a follow-up attach_number call)."
      • addedInput schema / properties / authority
        Added value: +{
        +  "description": "How the purchase was authorized: { mode, confirmed_by, confirmed_at, confirmation_ref }. human_confirmed requires all three confirmation fields; anything weaker returns pending_approval.",
        +  "type": "object"
        +}
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "description": "Validate tenant, scope, and policy without buying anything.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Stable key for the purchase request; repeating it returns the original outcome. Defaults to a key derived from the phone number — pass your own to retry a previously failed purchase.",
        +  "type": "string"
        +}
      • addedInput schema / properties / queue_for_approval
        Added value: +{
        +  "description": "When authority is insufficient, create a durable dashboard approval (default true). Set false to get needs_approval and retry yourself with the same idempotency_key once a human confirms.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / reason
        Added value: +{
        +  "description": "Optional reason recorded in the durable audit.",
        +  "type": "string"
        +}
      • addedInput schema / properties / source_ref
        Added value: +{
        +  "description": "External source reference, such as a ticket or automation run ID.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / approval
        Added value: +{
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / business_id / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / code
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / compliance
        Removed value: -{
        -  "properties": {
        -    "disclosure_note": {
        -      "type": "string"
        -    },
        -    "high_risk_category": {
        -      "type": "boolean"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedOutput schema / properties / message
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / number
        Removed value: -{
        -  "type": "object"
        -}
      • addedOutput schema / properties / request_id
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / result
        Added value: +{
        +  "description": "On executed: { number, vapi_registered, agent_attached, compliance: { high_risk_category, disclosure_note } }.",
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / risk_level
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / status
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / summary
        Added value: +{
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Addedlist_overage_charges
    • Addedlist_rightsize_recommendations
    • Addedlist_subscription_history
    • Addedlist_tool_execution_logs
    • Addedlist_workflow_templates
    • Changedrequest_kaicalls_update1 field changed
      • changedInput schema / properties / intent / description
        Previous value: -"Update intent: phone.emergency_address.set, transcripts.sink.configure, or agent.patch"New value: +"Update intent: phone.emergency_address.set, transcripts.sink.configure, agent.patch, numbers.purchase, or agent.config.rollback"
    • Changedrollback_config21 fields changed
      • addedInput schema / properties / actor
        Added value: +{
        +  "description": "Who is asking: { type: agent|human|system|integration, id, display_name }.",
        +  "type": "object"
        +}
      • addedInput schema / properties / authority
        Added value: +{
        +  "description": "How the rollback was authorized: { mode, confirmed_by, confirmed_at, confirmation_ref }. human_confirmed requires all three confirmation fields; anything weaker returns pending_approval.",
        +  "type": "object"
        +}
      • addedInput schema / properties / business_id
        Added value: +{
        +  "description": "Business ID (optional only when the token can access exactly one business).",
        +  "type": "string"
        +}
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "description": "Validate tenant, scope, and policy without touching the live config.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Stable key for the rollback request; repeating it returns the original outcome. Defaults to a key derived from agent + version — pass a fresh key to repeat a rollback that already executed.",
        +  "type": "string"
        +}
      • addedInput schema / properties / queue_for_approval
        Added value: +{
        +  "description": "When authority is insufficient, create a durable dashboard approval (default true). Set false to get needs_approval and retry yourself with the same idempotency_key once a human confirms.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / source_ref
        Added value: +{
        +  "description": "External source reference, such as a ticket or automation run ID.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / approval
        Added value: +{
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / business_id
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / code
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / message
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / new_version_number
        Removed value: -{
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / request_id
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / restored_fields
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / restored_from_version
        Removed value: -{
        -  "type": "integer"
        -}
      • addedOutput schema / properties / result
        Added value: +{
        +  "description": "On executed: { agent_id, restored_from_version, restored_fields, skipped_fields, new_version_number, warning? }.",
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / risk_level
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / skipped_fields
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • addedOutput schema / properties / status
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / summary
        Added value: +{
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / warning
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
  6. 2 tool updates
    • Addedget_change_history
    • Addedrollback_config
  7. 2 tool updates
    • Addedlist_config_versions
    • Addedlist_observability_events
  8. 4 tool updates
    • Addedlist_knowledge
    • Addedlist_products
    • Addedupsert_knowledge
    • Addedupsert_product
  9. 16 tool updates
    • Addedattach_number
    • Addedbuy_number
    • Addedcreate_agent
    • Addeddelete_webhook
    • Addeddetach_number
    • Addedget_balance
    • Addedget_conversation
    • Addedget_usage
    • Addedget_webhook
    • Addedlist_conversations
    • Addedlist_evals
    • Addedlist_numbers
    • Addedlist_voices
    • Addedrun_eval
    • Addedsearch_available_numbers
    • Addedset_webhook
  10. 1 tool update
    • Addedcreate_campaign
  11. 3 tool updates
    • Addedsend_sms
    • Addedupdate_agent_config
    • Addedupsert_lead
  12. 1 tool update
    • Changedget_analytics2 fields changed
      • addedOutput schema / properties / outcomes
        Added value: +{
        +  "type": "object"
        +}
      • addedOutput schema / properties / outcomes_total
        Added value: +{
        +  "type": "integer"
        +}
  13. 5 tool updates
    • Addedconfigure_agent_business_rules
    • Addedconfigure_staff_alerts
    • Addedconfigure_textable_links
    • Addedget_call_recording
    • Addedget_operational_settings
  14. 1 tool update
    • Addedrequest_kaicalls_update
  15. 6 tool updates
    • Addedget_analytics
    • Addedget_lead
    • Addedlist_campaigns
    • Addedlist_leads
    • Addedlist_sms_messages
    • Addedlist_voicemails
  16. 1 tool update
    • Addedmake_call
  17. 5 tool updates
    • First observedcheck_call_status
    • First observedget_business_info
    • First observedget_transcript
    • First observedlist_agents
    • First observedlist_recent_calls

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.