Skip to main content
Glama

TextKit

Server Details

SMS for developers: send and receive texts, verify phones, and buy US and Canada numbers.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-03-26
URL

TDQS

C2.9/5.0

Scored across 142 tools

Disambiguation3/5

Most tools target a specific resource and action, and the descriptions are detailed enough to distinguish common cases. However, the 142-tool surface contains many adjacent clusters where selection is error-prone: query_audience/create_segment/preview_segment, update_contact/upsert_contact/import_contacts/bulk_update_contacts, send_message/send_batch/send_verification, and get_opt_outs/export_consent/get_consent. Descriptions help, but boundaries are not always obvious at scale.

Naming Consistency5/5

Tool names follow a consistent snake_case verb_noun pattern throughout: list_*, get_*, create_*, update_*, delete_*, send_*, and so on. Minor variations like wait_for_events and fallback_verification are still readable and fit the same convention.

Tool Count1/5

142 tools is far beyond a manageable surface for an agent, even for a broad SMS platform. The functionality is extensive, but the count creates severe navigation and misselection risk.

Completeness5/5

The surface covers the domain extensively: contacts, lists, segments, messages, batches, numbers, pools, automations, templates, webhooks, billing, consent, verification, integrations, and compliance workflows. CRUD and lifecycle operations are present for nearly every major resource.

Available Tools

142 tools
activate_automationActivate automationA
Destructive
Inspect

Turn an automation on, so tracked events start runs. With a live number it texts real people.

NameRequiredDescriptionDefault
idYesAutomation id

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, openWorldHint=true, and idempotentHint=false. The description adds concrete real-world context: activation starts runs from tracked events, and with a live number it texts real people. That is valuable behavioral disclosure beyond the annotations, though it does not address permissions or error behavior.

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

Conciseness5/5

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

Two short sentences are front-loaded with the action and consequence. Every phrase earns its place: the first states what it does, and the second flags the real-world side effect. 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 one-parameter activation tool with rich annotations, the description covers the action and its main consequence. It could say more about the return value or error conditions, since there is no output schema, but the essential behavioral context is present. This is nearly complete for the tool's complexity.

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

Parameters3/5

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

Schema coverage is 100% and the only parameter is 'id' with its own description. The tool description does not add any meaning about the id beyond what the schema already provides. Baseline 3 is appropriate when the schema fully documents the single parameter.

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

Purpose4/5

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

The description gives a specific verb and resource: 'Turn an automation on.' It also clarifies the immediate effect: tracked events start runs. It does not explicitly distinguish itself from sibling tools such as pause_automation or create_automation, so it falls short of a 5.

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

Usage Guidelines3/5

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

The description implies when to use it by stating the effect of activation, but it does not explicitly compare alternatives like pause_automation or update_automation. It also gives no prerequisites or conditions for when not to use it. This is implied usage rather than explicit guidance.

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

add_to_listAdd to listA
Destructive
Inspect

Add contacts to a list by contact_ids and/or phone_numbers (up to 1,000; numbers must already be contacts).

NameRequiredDescriptionDefault
idYesList id
contact_idsNo
phone_numbersNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds genuine context beyond them — the 1,000-item batch cap and the requirement that phone numbers resolve to existing contacts — but says nothing about duplicate handling or partial-failure behavior, which matters for a non-idempotent mutation.

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

Conciseness5/5

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

One sentence, front-loaded with the action and resource, with the constraints packed into a parenthetical. No filler and nothing that could be trimmed without losing meaning.

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

Completeness3/5

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

With no output schema, the description should ideally say what a successful add returns or what happens to already-present contacts. Annotations carry the safety profile and the schema carries the field types, so what remains missing is duplicate/partial-success semantics — a real gap for a bulk mutation but not a crippling one.

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

Parameters4/5

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

Schema description coverage is only 33% (only `id` is documented), so the description must compensate, and it does: it establishes that contact_ids and phone_numbers are both optional, mutually combinable selectors, and that the batch is capped at 1,000. It leaves ambiguity about whether the 1,000 limit applies per array or combined, and never documents `id` itself.

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

Purpose4/5

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

States a specific verb and resource ("Add contacts to a list") and immediately names the two input channels, so an agent can distinguish it from create_list, update_list, and remove_from_list by name alone. It stops short of explicitly contrasting with the closest sibling (remove_from_list).

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

Usage Guidelines4/5

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

Gives a real prerequisite ("numbers must already be contacts") that determines whether the call will succeed, plus the fact that contact_ids and phone_numbers are combinable. It does not state what to do when a contact is already on the list or point at alternatives, so it falls 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.

assign_number_to_customerAssign number to customerA
Destructive
Inspect

Platforms: attribute a number (and its messages and usage) to one of your customers, or clear it with customer_id null.

NameRequiredDescriptionDefault
customer_idYesA customer id, or null to unassign
phone_numberYesE.164 number you own

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the side-effect scope: messages and usage travel with the number, which the schema does not express. It still omits what happens to a prior customer's attribution and whether the operation can fail partway.

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

Conciseness4/5

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

A single compact sentence with no filler, and the primary action is front-loaded ahead of the unassign case. The leading 'Platforms:' qualifier is slightly cryptic and spends words without clear payoff.

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

Completeness4/5

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

For a two-parameter mutation with full schema coverage, no output schema, and annotations that already flag destructiveness and non-idempotency, the description covers both operating modes. Only the edge-case behavior around reassignment of an already-assigned number is left unstated.

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 both parameters are documented, including 'null to unassign'. The description only restates the null-unassign behavior already present in the schema and adds nothing about the E.164 format or ownership constraints, so the schema carries the load and baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: attribute a phone number, along with its messages and usage, to a customer, or clear the assignment. This is unambiguous about what the tool does. It does not name or distinguish itself from adjacent siblings such as bulk_update_numbers, link_number_to_registration, or update_customer, so it stops short of a 5.

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

Usage Guidelines3/5

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

The description implicitly tells the agent to use customer_id=null when unassigning, which covers one usage branch. However, it gives no guidance on when to prefer this tool over bulk_update_numbers, link_number_to_registration, or update_customer, and states no prerequisites such as ownership or permissions.

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

bulk_purchase_numbersBulk purchase numbersA
Destructive
Inspect

Buy several numbers in one area code at once (e.g. for a sender pool). Live numbers are billed monthly each.

NameRequiredDescriptionDefault
tagsNo
pool_idNoAdd the new numbers to this pool
quantityYes
area_codeYes
idempotency_keyNoOptional. Retries are already safe: the same call with the same inputs within 10 minutes is done once and answers with the first result. Pass your own key to dedupe across a longer gap, or a new one to repeat an identical call on purpose.

TDQS

A3.7/5.0
Behavior4/5

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

Adds a genuinely useful trait beyond the annotations: 'Live numbers are billed monthly each' warns of recurring cost, which matters for a destructive, open-world purchase. It still omits what happens if fewer than the requested quantity are available, whether the call is partial-success, and what permissions are needed — though annotations already flag destructiveHint=true.

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, zero filler, with the bulk/area-code scope front-loaded and the billing caveat second. Nothing could be removed without losing information.

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

Completeness3/5

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

For a destructive, open-world purchase tool with no output schema and 40% param coverage, key gaps remain: which numbers were actually purchased in the response, behavior when inventory is insufficient, and the 1–50 quantity bound. The cost warning is a good start but the definition is not fully self-sufficient.

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

Parameters3/5

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

Schema coverage is only 40%, so the description must compensate. It clarifies the semantics of area_code (single area code for the whole batch) and quantity (multiple numbers), and its 'sender pool' example hints at pool_id, but tags and the 50-cap are left to the schema and pool_id is only echoed implicitly.

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

Purpose4/5

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

States a specific verb and resource (buy several numbers) with a scope qualifier (in one area code, at once), which implicitly distinguishes it from the single-number sibling purchase_number. It never names that sibling, so the differentiation is inferential 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 Guidelines3/5

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

The parenthetical '(e.g. for a sender pool)' gives one concrete context, implying bulk provisioning use. It does not say when to prefer purchase_number instead, nor that inventory should come from search_available_numbers first, nor any prerequisite about registration/verification.

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

bulk_update_contactsBulk update contactsB
Destructive
Inspect

Add tags to, remove tags from, or delete many contacts by id.

NameRequiredDescriptionDefault
idsYes
tagsNoRequired for add_tags and remove_tags
actionYes

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already flag destructiveHint=true and idempotentHint=false, so the safety profile is carried by structured data and the description does not contradict it. The description adds only that the operation spans many contacts by id; it omits whether deletes are irreversible, how partial failures across a batch are handled, and any confirmation requirements.

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

Conciseness4/5

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

A single front-loaded sentence that enumerates the three actions with zero filler. It is terse to the point of leaving information gaps, but nothing in it is redundant.

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

Completeness3/5

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

There is no output schema and no nested objects, so the return-value burden is low, but this is a destructive bulk mutation over up to 500 records and the description says nothing about irreversibility, partial-success semantics, or rate/scale constraints. Annotations cover the safety hint, leaving the description adequate but not 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 at 33% (only 'tags' is documented), so the description should compensate but does not. It does map its three verbs onto the action enum and states that ids are the targeting mechanism, but it never mentions the 500-id maximum, the 40-character tag limit, or that tags is mandatory for the two tag actions beyond what the schema already says.

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 set (add tags, remove tags, delete) against a specific resource (contacts) with a stated scale ('many... by id'), so an agent can tell it apart from the single-record siblings update_contact and delete_contact. It stops short of naming those siblings explicitly, so it is clear but not fully differentiated.

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?

'many contacts by id' implies this is the bulk alternative to delete_contact/update_contact, which is useful implied guidance. However, there is no explicit statement of when to prefer this tool, no warning that the 'delete' action is permanent and cannot be undone, and no guidance on batching limits or failure handling.

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

bulk_update_numbersBulk update numbersC
Destructive
Inspect

Act on many numbers at once: tag, untag, assign to a customer, or release. Releasing cannot be undone.

NameRequiredDescriptionDefault
idsYes
tagsNoadd_tags / remove_tags. Lowercased; up to 20 per number.
labelNoset_label; null clears
actionYes
confirmNorelease only
pool_idNoadd_to_pool / remove_from_pool

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, and the description reinforces this usefully with 'Releasing cannot be undone.' However, for a bulk mutation it omits genuinely valuable context not covered by annotations: whether a batch is atomic or partially applied, whether the confirm parameter is mandatory for release, and what happens on failure mid-batch.

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

Conciseness4/5

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

Two short sentences, front-loaded with the capability and closing with the irreversible-operation warning. Efficient, with the only cost being the inaccurate operation enumeration rather than verbosity.

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

Completeness2/5

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

This is a destructive, non-idempotent bulk mutation with six parameters, no output schema, and only partial schema descriptions. The description adds nothing about partial-failure behavior, the required confirm value for release, or what the caller gets back, leaving key gaps for an agent to guess at.

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?

With 67% schema coverage, the description should sharpen the remaining gaps, but its operation list conflicts with the enum ('assign to a customer' is not an action) and skips add_to_pool/remove_from_pool/set_label, which are exactly the parameters the schema documents thinly. The 1000-id cap and the confirm semantics are left entirely to the schema.

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

Purpose3/5

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

The description names the resource (numbers) and the batch scope, and lists example operations: tag, untag, assign to a customer, release. However, 'assign to a customer' does not exist in the schema's action enum (which offers add_to_pool, remove_from_pool, add_tags, remove_tags, set_label, release) and pool/label operations are never mentioned. The stated purpose is recognizable but the operation list is misaligned with what the tool actually does, so an agent could mis-select it.

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

Usage Guidelines3/5

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

'Act on many numbers at once' implicitly contrasts with the single-resource siblings (assign_number_to_customer, release_number), but no alternative is named and no when-not condition is given. The only explicit guidance is the warning that releasing is irreversible.

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

cancel_automation_runCancel automation runA
DestructiveIdempotent
Inspect

Cancel a run in progress.

NameRequiredDescriptionDefault
idYesAutomation id
run_idYesRun id

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds the meaningful constraint that only in-progress runs are cancellable, but says nothing about the effect on messages already queued or sent, or whether cancellation is immediate or graceful.

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 six-word sentence with the action and the state constraint front-loaded. There is no filler, though the brevity is close to the point of under-specification.

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

Completeness3/5

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

For a destructive, idempotent mutation with a fully documented two-parameter schema and no output schema, the essentials are covered. The remaining gap is what cancellation actually does to in-flight or already-sent messages, which an agent may need to set expectations before calling.

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

Parameters3/5

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

Schema coverage is 100% with both parameters (id, run_id) documented as automation id and run id. The description adds no additional meaning about the relationship between the two identifiers, so it sits at the baseline where the schema does the work.

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

Purpose4/5

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

States a specific verb and resource (cancel a run) with a scoping qualifier (in progress). It does not distinguish itself from the similarly named siblings cancel_batch, cancel_scheduled_message, or pause_automation, so an agent must infer that this targets an automation run rather than a batch or a scheduled message.

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?

'In progress' implies the precondition that the run must still be active, which is the main trigger condition. However, there is no explicit statement of when to prefer this over pause_automation or how to handle a run that has already finished, so usage is only implied.

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

cancel_batchCancel batchB
Destructive
Inspect

Cancel a batch. Messages already sent stay sent.

NameRequiredDescriptionDefault
idYesBatch id

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is known. The description adds one genuinely useful fact beyond that — that already-sent messages are unaffected — but says nothing about what happens to queued or in-flight messages, or whether the cancel can be undone.

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

Conciseness5/5

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

Two short sentences with zero waste; the core action is front-loaded and the caveat follows immediately. Nothing is padded or repeated from the name or annotations.

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

Completeness3/5

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

For a single-parameter mutation tool with destructive annotations and no output schema, the description covers the essential scope caveat but omits the boundary with pause_batch and the fate of unsent queued messages. An agent can call it, but cannot confidently predict the outcome for a partially sent batch.

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

Parameters3/5

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

There is a single parameter whose schema description ('Batch id') is fully covered, so the schema does the work. The description adds no meaning about the id, such as format or where to obtain it; baseline 3 applies for a fully documented single parameter.

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

Purpose4/5

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

The description states a specific verb and resource ('Cancel a batch'), which is unambiguous on its own. It does not differentiate from close siblings like pause_batch or retry_batch, whose semantics differ in ways an agent must infer.

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

Usage Guidelines2/5

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

There is no statement of when to cancel versus pause or resume a batch, and no prerequisites or exclusions. The second sentence describes a consequence, not a usage condition, so the agent gets no routing guidance.

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

cancel_scheduled_messageCancel scheduled messageA
DestructiveIdempotent
Inspect

Cancel a scheduled message before it sends.

NameRequiredDescriptionDefault
idYesScheduled message id

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description's only added behavioral context is the 'before it sends' constraint, which does usefully imply the call fails once a message is dispatched, but it does not say what happens to the record or what error/handling to expect.

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, zero filler, with the scope constraint placed where it is read first. Appropriate size for a single-parameter cancellation tool.

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?

Simple tool with one fully documented parameter, rich annotations, and no output schema, so little is required. The description covers purpose and timing; only the post-send failure behavior and return shape are absent, which are minor given the annotation coverage.

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 a single required parameter documented as 'Scheduled message id', so the schema carries the semantics. The description adds nothing about id format or where to obtain it, which is the correct baseline when coverage is high.

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

Purpose4/5

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

States a specific verb+resource (cancel a scheduled message) and adds the scope qualifier 'before it sends', which distinguishes it from delete_message and get_scheduled_message. It does not explicitly name a sibling or contrast with delete_schedule, so it falls short of full differentiation.

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

Usage Guidelines3/5

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

'Before it sends' implies the timing window in which this tool is the right choice, but the description never states what to do after a message has sent (e.g., use redact_message) or how it compares to delete_schedule. Usage must be inferred.

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

check_verificationCheck verificationA
Destructive
Inspect

Check a verification code submitted by a user, by the phone or email it went to. Returns {verified, status, channel, charged}. Billed only when verified is true.

NameRequiredDescriptionDefault
codeYesThe code last sent
emailNoThe address the code was emailed to. After a fallback, check by `email`: the code proves the address, not the phone, and a check by `phone` answers 409 `invalid_state`.
phoneNoThe number the code was texted to. Send this or `email`.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds genuinely non-obvious context the schema lacks: the exact return shape {verified, status, channel, charged} and the billing rule that the call is only charged when verified is true. It stops short of explaining what a repeated check does or what a failed/invalid code yields, which matters given destructiveHint=true.

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

Conciseness5/5

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

Two short sentences with zero filler, front-loaded with the action and immediately followed by the payoff model. Every clause earns its place.

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

Completeness4/5

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

With no output schema, the description usefully covers return fields and billing, so an agent knows what it gets back. It is thin on failure semantics (invalid code, expired code, repeat checks) and on how it relates to the sibling verification tools, which is the main remaining 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% and the schema itself documents the phone/email fallback rule and the 409 invalid_state case in depth. The description only restates the phone-or-email targeting at a high level, adding no format, precedence, or length semantics beyond what the schema provides.

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

Purpose4/5

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

The description names a specific verb ('Check') and resource ('a verification code submitted by a user') and identifies the lookup dimension (phone or email the code went to). An agent can distinguish it from send_verification (which sends) and get_verification (which appears to fetch state) reasonably well, though those highly similar siblings are never named explicitly.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance and no mention of the confusable siblings get_verification, fallback_verification, or send_verification. The only routing hint ('After a fallback, check by email') lives in the schema, not the description, so an agent must infer the workflow position on its own.

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

clone_number_poolClone number poolB
Destructive
Inspect

Copy a sender pool under a new name.

NameRequiredDescriptionDefault
idYesPool id
nameNo

TDQS

B3/5.0
Behavior1/5

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

The description says 'copy', which implies a non-destructive read-and-create operation, but annotations declare destructiveHint=true. This is a direct contradiction. The description also fails to explain what is copied (e.g., settings, numbers, metadata) or any side effects.

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

Conciseness5/5

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

One sentence, front-loaded with the action and resource, with zero waste. It communicates the essential purpose immediately.

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

Completeness2/5

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

For a clone operation, an agent needs to know what gets duplicated (all settings? numbers? relationships?), whether the operation is synchronous, and potential side effects. The description provides none of this, and the annotation contradiction further undermines confidence.

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

Parameters3/5

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

Schema coverage is 50% (id has 'Pool id' description; name has none). The description adds meaning for the name parameter ('under a new name'), but the id parameter remains ambiguous—it could be the source pool id, but the description doesn't clarify. Marginal benefit over 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 (copy) and resource (sender pool) plus the key mechanism (under a new name). It clearly distinguishes from siblings like create_number_pool, update_number_pool, and delete_number_pool.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The description only implies usage by the word 'copy' but offers no explicit criteria.

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

connect_integrationConnect integrationA
Destructive
Inspect

Connect a tool so its people sync in as contacts, in a list of their own, every 6 hours: Mixpanel (projectId, username, secret = a service account; sourceId = cohort id), Amplitude (apiKey, secretKey, sourceId), HubSpot (accessToken), Shopify (shopDomain, accessToken), Salesforce, or a webhook. Takes the event or property that shows people agreed to texts (consentEvent / consentField) and the property that holds their phone (phoneField). Credentials are proved with one read, sealed, and never returned.

NameRequiredDescriptionDefault
modeNoMixpanel / Amplitude: pull with credentials every 6 hours (default when credentials are sent), or push: no credentials, the tool's cohort sync posts to the ingest URL.
nameNoWhat to call it (default: the tool and its source).
apiKeyNoAmplitude API key.
regionNoMixpanel / Amplitude data residency.
secretNoMixpanel service account secret.
clientIdNoSalesforce consumer key, or Shopify client id.
providerYes
sfObjectNo
sourceIdNoMixpanel or Amplitude cohort id; HubSpot list id; Salesforce campaign id; a Shopify customer search. Blank = everyone (HubSpot, Shopify, Salesforce).
usernameNoMixpanel service account username.
projectIdNoMixpanel project id.
secretKeyNoAmplitude secret key.
phoneEventNoMixpanel: an event that carries the number when profiles do not (e.g. Verification Check Success). A member with no phone on the profile gets it from their latest such event.
phoneFieldNoThe tool's property holding the mobile number, when not the usual one ($phone, phone, mobilephone).
shopDomainNoShopify store, like acme.myshopify.com.
accessTokenNoHubSpot private app token, or Shopify Admin API access token.
instanceUrlNoSalesforce My Domain URL.
clientSecretNoSalesforce consumer secret, or Shopify client secret.
consentEventNoMixpanel / Amplitude: the opt-in event the cohort is built on (e.g. SMS Opt In). Everyone in the cohort is recorded as opted in, from that event.
consentFieldNoThe tool's property that records SMS consent (e.g. sms_opt_in).
phoneEventPropertyNoMixpanel: that event's property holding the number (default phone).

TDQS

A3.8/5.0
Behavior4/5

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

Goes meaningfully beyond the annotations by disclosing the 6-hour sync cadence and, importantly, that credentials are validated with one read, sealed, and never returned — a real trust and security fact an agent cannot infer. It does not address the destructiveHint=true implications (e.g., whether reconnecting an existing provider duplicates contacts or overwrites the list), which is the main gap for a mutation tool.

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

Conciseness4/5

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

Front-loaded with the effect and cadence, then the provider list, then consent/phone semantics, then credential handling — a logical order. The parenthetical provider credentials make the single paragraph dense but every clause carries information; slight tightening could improve scanability.

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

Completeness4/5

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

For a 21-parameter, non-idempotent, destructive, open-world tool with no output schema, the description covers the essentials: what gets created, the sync cadence, consent and phone sourcing, and credential safety. Missing pieces are the failure/re-connect behavior and what the created list looks like, which matter for a destructive operation.

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 90% schema coverage the baseline is 3, but the description adds genuine cross-parameter structure the flat schema cannot express: which credentials belong to Mixpanel (projectId, username, secret as service account) versus Amplitude (apiKey, secretKey) versus HubSpot (accessToken), and how consentEvent/consentField and phoneField interact with consent and phone capture. The per-provider mapping is the key value-add over the schema.

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

Purpose4/5

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

Names a specific verb and resource ('connect a tool') and adds the concrete effect: people sync in as contacts, into a dedicated list, every 6 hours. It enumerates the supported providers and the credential shape per provider, which makes the tool unmistakable. It does not explicitly distinguish itself from near-siblings such as update_integration, sync_integration, or disconnect_integration, so it stops short of a 5.

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

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 it (setting up a new provider connection) and the mode parameter explains pull vs. push behavior, which is helpful context. However, there is no explicit 'use this instead of X' routing to update_integration, sync_integration, or list_integrations, and no stated preconditions for an already-connected provider.

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

create_api_keyCreate api keyA
Destructive
Inspect

Create an API key for an app you are building, to store as a secret in its environment (for example TEXTKIT_API_KEY) so the app can send texts itself. Same mode (test or live) as this connection; optional scopes limit it. The secret is returned once; the account owner is emailed.

NameRequiredDescriptionDefault
nameYesWhat the key is for, e.g. "Booking app"
scopesNoLimit the key to these scopes (see /docs/authentication). Omit for full access (full-access callers only).

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare the safety profile (destructive, non-idempotent, non-open-world). The description adds real behavioral context beyond that: the key inherits the connection's test/live mode, scopes are optional limits, the secret is returned only once, and the account owner is emailed. Those are exactly the kinds of facts an agent needs before mutating state.

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 action and use case, then behavior, then the critical one-time-return caveat. No wasted phrasing.

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

Completeness4/5

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

No output schema exists, and the description compensates by stating what comes back (the secret, only once) and the side effect (owner emailed). Combined with mode inheritance and scope behavior, an agent has enough to call it correctly; only the absence of explicit sibling routing keeps it from a 5.

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 both parameters are already documented in the schema, setting the baseline at 3. The description adds only a light gloss on scopes ('optional scopes limit it') and does not elaborate on the mode implication or what omitting scopes means beyond the schema.

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

Purpose4/5

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

States a specific verb and resource ('Create an API key') plus the concrete use case (store in app environment so the app can send texts). It implicitly distinguishes itself from siblings like list_api_keys and revoke_api_key by being the creation path, but never names those siblings explicitly.

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

Usage Guidelines3/5

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

Provides the scenario for use ('an app you are building... so the app can send texts itself'), which is genuinely helpful context. But it gives no explicit when-not guidance or reference to the related siblings (list_api_keys, revoke_api_key) an agent would need to reason about alternatives.

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

create_automationCreate automationA
Destructive
Inspect

Create a triggered text flow (as a draft): when trigger.event is tracked, run steps such as send_sms, wait, wait_for_event, and condition branches. Example: on cart_abandoned, wait 3600s, then if checkout_completed was not received send a reminder. Drafts send nothing until activated.

NameRequiredDescriptionDefault
fromNoOne of your numbers. A sandbox number makes it a sandbox flow.
nameNo
stepsNo
triggerNo
topic_idNoSkip recipients unsubscribed from this topic.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, so the bar is lower, and the description adds genuinely useful behavior: creation yields an inert draft that sends nothing until activation. That materially softens the safety picture. It does not address permissions, validation failures, or what happens when a step references a non-existent goto id.

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 front-loaded sentences: purpose and draft status first, mechanics second, concrete example third. The example earns its place by making the trigger/step/branch model tangible. Minimal waste, though the step-type list partially duplicates the schema's steps description.

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

Completeness3/5

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

For a nested, 5-parameter creation tool with no output schema, the conceptual model (trigger → steps → branches) is well covered, but the description never says what is returned — notably the new automation id the agent would need to call activate_automation. Error and validation behavior is also unaddressed.

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

Parameters3/5

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

Schema description coverage is only 40%, so compensation matters. The description explains trigger.event firing semantics and lists the step vocabulary, and the worked example anchors 'wait 3600s' and a condition check, but it says nothing about 'from', 'name', 'topic_id', or trigger.filters.

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 and resource ('Create a triggered text flow') and immediately scopes it as '(as a draft)', plus enumerates the step types the automation can contain. It doesn't name siblings like update_automation or activate_automation directly, though 'until activated' gestures at the latter.

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 establishes clear usage context: automations are built as drafts and do nothing until activated, which implicitly routes the agent to activate_automation afterward. It gives a concrete worked scenario (cart_abandoned → wait → conditional reminder), but no explicit exclusions versus update_automation or create_schedule.

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

create_customerCreate customerB
Destructive
Inspect

Platforms sending for other businesses: create a customer to attribute numbers, messages and usage to.

NameRequiredDescriptionDefault
nameNo
metadataNoUp to 50 string values
external_idNoYour id for them; unique per account

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: it doesn't say what happens on duplicate names, that a retry may create a second customer, or what state the account ends up in after creation.

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

Conciseness4/5

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

A single sentence with no filler. The audience qualifier is front-loaded ahead of the action, which is slightly inverted for scanning but keeps the discriminating condition visible.

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

Completeness2/5

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

This is a mutation tool with no output schema, yet the description never indicates what is returned (presumably a customer id needed for assign_number_to_customer and get_customer_usage) or that all three parameters are optional, meaning a bare customer can be created. Those are material gaps for a create call that other tools depend on.

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 67% (external_id and metadata documented; name not), so the schema does most of the work. The description adds no parameter-level meaning at all — it doesn't clarify what a 'customer' name represents versus the account name, or how metadata is used for attribution. Middle baseline is fair.

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

Purpose4/5

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

States a specific verb and resource ('create a customer') plus the actual function: attributing numbers, messages and usage. It also scopes the audience ('Platforms sending for other businesses'), which no sibling name conveys. It stops short of distinguishing itself from lookalikes such as create_contact or upsert_contact.

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 'platforms sending for other businesses' clause implies the account type that needs this tool, which is useful conditional context. But it never says when not to use it, nor does it point to update_customer for existing customers or create_contact for end recipients, leaving the agent to infer routing among ~100 siblings.

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

create_listCreate listA
Destructive
Inspect

Create a list: a fixed group of contacts (Audience → Lists). Use a list when the user names exactly who belongs ("add these people to VIPs"); use a segment when membership follows rules.

NameRequiredDescriptionDefault
nameNo
descriptionNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=true, so safety is covered. The description adds domain framing but says nothing about duplicate-name behavior, limits, or what the call returns, which is the meaningful gap left for a create tool.

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

Conciseness5/5

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

Two tight sentences with the core definition front-loaded and the disambiguation second. Every clause earns its place, including the parenthetical location hint.

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

Completeness3/5

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

The conceptual model is complete, but for a mutation with no output schema and zero parameter documentation, the description omits post-call behavior (created list identifier, how contacts get added afterward) and duplicate handling. Adequate to choose the tool, thin on how to invoke it correctly.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries full burden, yet it never mentions the two parameters (name, description) or their constraints. Notably, neither parameter is required in the schema, and the description gives no clue that a name is effectively needed, leaving the agent to infer 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?

States a specific verb and resource ('Create a list') and immediately defines the domain concept ('a fixed group of contacts, Audience → Lists'). It also explicitly contrasts with the sibling concept create_segment, so an agent can pick between them without opening schemas.

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

Usage Guidelines4/5

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

Gives a concrete when-to-use rule with a quoted user utterance ('add these people to VIPs') and names the alternative (segment) for rule-based membership. It stops short of covering closely related siblings such as add_to_list or what to do when a list with the same name already exists.

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

create_number_poolCreate number poolC
Destructive
Inspect

Create a sender pool from numbers you own.

NameRequiredDescriptionDefault
nameYes
routingNoHow a recipient gets a number. sticky: the same member every time. local: a member in the recipient's area code, else one in their time zone, else any; still the same one each time.sticky
descriptionNo

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and non-idempotent, so the safety profile is covered; the description adds only the ownership precondition. Critically, it never explains which numbers end up in the pool — the schema has no numbers parameter at all — so the core behavior of the call is left ambiguous.

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

Conciseness3/5

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

A single short sentence with no filler, which is well front-loaded, but the brevity comes at the cost of substance rather than being earned conciseness.

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

Completeness2/5

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

For a mutating, destructive-flagged creation tool with no output schema and only one-third parameter coverage, the description leaves key questions unanswered: how numbers are associated with the pool, what happens to a number already in another pool, and what is returned.

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

Parameters2/5

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

Schema coverage is 33%: only `routing` is documented, and its enum description is thorough. `name` and `description` have no explanation in schema or description, and the description mentions no parameters at all, so it does not compensate for the coverage gap.

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

Purpose4/5

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

The description gives a specific verb and resource ("Create a sender pool") and adds the constraint that the pool is built from owned numbers, which separates it from clone_number_pool and update_number_pool. It doesn't explicitly name those siblings, but the intent is unambiguous.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus clone_number_pool or update_number_pool, no prerequisite about needing purchased numbers first, and no note that numbers must later be attached. The only implied guidance is "numbers you own," which is a precondition rather than a usage rule.

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

create_scheduleCreate scheduleB
Destructive
Inspect

Send the same text to one number every day, week or month at a local time (e.g. a weekly reminder). Every occurrence runs the usual send checks.

NameRequiredDescriptionDefault
toYes
bodyYes
fromNoOne of your numbers. Optional when the account has exactly one number for the key's mode.
repeatYes
categoryNoOptional. It can make each occurrence stricter (`marketing`), never looser: the sending number's registration and the wording decide ([which messages are marketing](/docs/compliance-checks#which-messages-are-marketing)).
end_dateNoLast local date it may run (inclusive).
start_dateNoFirst local date it may run. Defaults to today.
quiet_hoursNoOptional. What to do with a message in the recipient's quiet hours: `block` refuses it (403 quiet_hours), `defer` holds it until their next 8:00am. Omitted: an occurrence in quiet hours is held until the recipient's 8:00am and recorded as `deferred`.
idempotency_keyNoOptional. Retries are already safe: the same call with the same inputs within 10 minutes is done once and answers with the first result. Pass your own key to dedupe across a longer gap, or a new one to repeat an identical call on purpose.
max_occurrencesNoThe schedule completes after this many messages have been sent.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already flag the operation as non-read-only, destructive, open-world, and non-idempotent, so the safety profile is covered. The one genuinely additive line is 'Every occurrence runs the usual send checks,' which tells the agent that compliance checks repeat per firing; nothing is said about cost, how to stop a live schedule, or what happens on failures. 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?

Two tight sentences, zero filler, with the core behavior front-loaded before the compliance note. Its brevity is appropriate to the format, though it leaves substantial ground uncovered for a ten-parameter tool.

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?

Considering the schema already documents the recurrence fields, quiet_hours, idempotency, and date bounds in detail, and there is no output schema to explain, the description covers the essential 'what and why' adequately. It is thin on lifecycle questions (pausing, cancelling, what a created schedule returns) relative to a destructive recurring-send tool.

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

Parameters3/5

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

Schema coverage is high (70%) and the nested repeat object is fully documented in-schema, so the baseline is 3. The description contributes two useful clarifications, 'one number' (to is a single recipient, not a list) and 'at a local time' (the time is wall-clock in the given timezone), but says nothing about start_date, end_date, max_occurrences, or quiet_hours behavior.

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

Purpose4/5

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

The description states a specific verb and resource: send the same text to one number on a daily, weekly, or monthly cadence at a local time. That implicitly separates it from send_message (one-off) and update_schedule/delete_schedule, though it never names a sibling outright. 'One number' also fixes the cardinality of the target, which the bare name does not.

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?

Beyond the parenthetical 'e.g. a weekly reminder' there is no statement of when to choose a schedule over send_message, a scheduled message, or create_automation, all of which sit nearby in the sibling list. No exclusions, prerequisites, or limits (e.g. per-account schedule caps) are given, so an agent must infer the fit from the name alone.

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

create_segmentCreate segmentA
Destructive
Inspect

Save an audience (a segment, a cohort): it appears in the console under Audience → Segments, and broadcasts can be sent to it. Everyone who can be texted: one rule, status is subscribed. Contacts matching all (or any) of up to 10 rules. Attributes: tags, contact fields, custom fields (field = "field", key = the name), opt-in status, topic, import, created_at. Behaviour: last_message_at, last_reply_at, batch (key = batch id; value included, sent, failed, skipped or replied) and event (key = a tracked event name). Times take an ISO date or a window like 7d. It is evaluated live each time it is used, so a batch or list sent to it reaches whoever matches then.

NameRequiredDescriptionDefault
nameNo
matchNoall
rulesNo
descriptionNo

TDQS

A3.6/5.0
Behavior4/5

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

Adds real behavior beyond the annotations: live re-evaluation on every use ('a batch or list sent to it reaches whoever matches then'), the 10-rule ceiling, and the 20,000-event search window. It omits the persistence/irreversibility angle that destructiveHint=true implies, and does not mention that name is optional, but the dynamic-membership disclosure is exactly the non-obvious fact an agent needs.

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

Conciseness4/5

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

Three sentences, purpose front-loaded, and the long middle sentence is a dense but scannable enumeration with clear 'Attributes:' / 'Behaviour:' labels. Some fillers ('a segment, a cohort') and the run-on rule listing could be tightened without losing information.

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

Completeness3/5

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

For a tool with no output schema, the description never says what comes back (segment id? object?) or whether the name must be unique, and it does not touch the optional name/description params despite required-parameters being 0. Rule construction, the highest-complexity part, is covered adequately, so the gaps are moderate rather than disqualifying.

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 explains the rule vocabulary well: 'field = "field", key = the name', batch key = batch id with its five values, time values as ISO dates or windows like 7d, and 'all (or any) of up to 10 rules' maps to match and rules. However, the top-level name and description parameters are never addressed, and the per-field semantics largely duplicate what the nested schema descriptions already say.

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?

Opens with a concrete verb and resource ('Save an audience (a segment, a cohort)') and states where it surfaces (Audience → Segments) and what consumes it (broadcasts). It never names the nearest siblings (create_list, query_audience, preview_segment), so differentiation is implied by the 'one rule' vs 'rules' framing rather than stated.

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

Usage Guidelines3/5

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

Usage is only implied: 'broadcasts can be sent to it' and 'evaluated live each time it is used' suggest when a saved segment is preferable to a one-off query. There is no explicit when-to-use / when-not guidance, and the alternatives an agent would hesitate between (create_list, query_audience, preview_segment) are never mentioned.

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

create_templateCreate templateC
Destructive
Inspect

Save a message template. Merge tags: {{first_name}}, {{name}}, {{phone}}, {{field:}}, and per-recipient variables.

NameRequiredDescriptionDefault
bodyYes
nameYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations declare destructiveHint=true and idempotentHint=false, which are non-obvious for a create operation and are never explained or reconciled in the description. The merge-tag syntax is useful content guidance but says nothing about whether repeated calls create duplicate templates, whether the name must be unique, or what the call returns. The description neither contradicts nor meaningfully augments the annotation profile.

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

Conciseness4/5

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

Two short sentences, purpose front-loaded, no filler. The trailing 'per-recipient variables' is an undefined term that adds ambiguity rather than precision, which keeps it from a 5.

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

Completeness2/5

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

There is no output schema, so the description is the only source for return behavior, yet it never says whether the created template's ID is returned or whether the template is immediately usable in send_message/create_automation. For a mutation tool with a surprising destructive hint, key facts an agent needs before calling are 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 0%, so the schema documents only types and max lengths. The description compensates partially by explaining the merge-tag syntax that is valid inside `body`, but it says nothing about `name` semantics (uniqueness, reuse across templates, effect on lookup). Partial compensation for a two-parameter tool.

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

Purpose4/5

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

The verb 'Save' plus the resource 'message template' make the operation unambiguous, and the name create_template aligns. It does not explicitly contrast with update_template or state whether it creates a new template versus overwriting an existing one, but an agent can identify the operation without opening the schema.

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

Usage 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 rather than update_template (the obvious sibling for modifying an existing template) or when a template is the right choice over send_message with inline content. Usage is only implied by the name.

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

create_topicCreate topicB
Destructive
Inspect

Create a subscription topic, so people can opt out of one kind of message (e.g. promotions) and keep others.

NameRequiredDescriptionDefault
nameYes
descriptionNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=true, so the mutating/non-idempotent profile is covered structurally. The description adds domain context about what a topic is but says nothing about duplicate-name behavior, permissions, or what happens on retry — the key consequences for a non-idempotent create.

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

Conciseness5/5

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

One sentence, front-loaded with the action and resource, with the explanatory clause immediately after. No filler.

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

Completeness3/5

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

For a simple two-parameter create with annotations and no output schema, the description conveys the concept adequately, but it omits the parameter meaning and name-collision semantics an agent needs to call it correctly the first time.

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

Parameters2/5

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

Schema description coverage is 0% for both parameters, so the schema alone gives an agent only types and maxLength. The description does not explain what 'name' should be (label? slug? unique key?) or what 'description' is for, leaving both parameters under-specified.

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

Purpose4/5

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

States a specific verb and resource ('Create a subscription topic') plus the domain intent (per-message-type opt-out). It is distinguishable from update_topic/delete_topic/list_topics by the verb, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

The 'so people can opt out of one kind of message' clause implies when a topic is the right model, but there is no guidance on when to create vs. update an existing topic, whether names must be unique, or what to do if the topic already exists. Usage is inferred from the verb only.

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

create_webhookCreate webhookA
Destructive
Inspect

Send events (message.received, message.delivered, message.opted_out, ...) to a URL: your app, a CRM, an automation tool. Returns the signing secret once.

NameRequiredDescriptionDefault
urlYes
eventsNoEvent types to receive. Omit, or send "*" or [], for every event. An unknown type is a 400.
numbersNoOptional. Only events about these of your numbers (E.164): message events by their from/to, number events by phone_number. Events about no number (batches, credits, registrations) go only to endpoints without a filter. Omit or [] for every number.
descriptionNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already flag non-idempotent, destructive, open-world writes, so the safety bar is lower; the description adds the valuable, non-obvious behavior that the signing secret is returned only once and must therefore be captured. It does not explain why the operation is marked destructive or whether existing endpoints are affected.

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 no filler; the core purpose leads and the critical return-value caveat comes second.

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 4-parameter, no-output-schema mutation tool, the description covers the essential thing an agent cannot infer elsewhere: the one-time signing secret. Remaining gaps (filtering semantics, effects on other endpoints) are largely covered by the schema or annotations.

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

Parameters3/5

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

Schema coverage is only 50%, and the description only indirectly supports the `events` parameter through its event-name examples. It adds nothing about `numbers` filtering or the `description` label, leaving those to the schema.

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

Purpose4/5

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

States a specific verb+resource (register an endpoint to receive named events) and enumerates concrete event types, which makes the intent unambiguous. It does not name or differentiate from siblings like update_webhook, test_webhook, or rotate_webhook_secret, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied: the examples of destinations (your app, a CRM, an automation tool) hint at when you would register a webhook, but there is no explicit when-to-use vs. update_webhook/test_webhook guidance and no prerequisites or exclusions.

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

delete_automationDelete automationC
DestructiveIdempotent
Inspect

Delete an automation.

NameRequiredDescriptionDefault
idYesAutomation id

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered elsewhere; the description adds nothing on top. It does not say whether deletion is permanent, what happens to in-flight runs and historical run data, or what the response contains. With annotations carrying the weight, this is a pass, not a help.

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

Conciseness3/5

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

One short sentence with zero waste, but its brevity comes from under-specification rather than tight writing — the sentence conveys nothing an agent could not infer from the tool name alone.

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

Completeness2/5

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

For a destructive mutation with no output schema and no annotation-level detail about side effects, the description should explain permanence, cascade effects on automation runs, and any required state. None of that is present, leaving the agent to guess at consequences.

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?

A single parameter with 100% schema description coverage already documents 'id'. The description provides no additional meaning (no id format, no indication of where to obtain the id), so the baseline 3 applies.

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

Purpose3/5

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

The sentence gives a verb ('Delete') and a resource ('automation'), but it is a verbatim restatement of the title and tool name, adding no scope detail. Because ~10 sibling benchmarks are also delete_<resource>, the resource word is what distinguishes it, so an agent can pick it out, but only barely.

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 versus alternatives such as pause_automation or update_automation, nor on prerequisites (e.g., whether an active automation must be paused or cancelled first). No mention of confirmation or irreversibility steps either.

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

delete_contactDelete contactA
DestructiveIdempotent
Inspect

Delete a contact. Messages, consent records, and topic preferences for the number are kept.

NameRequiredDescriptionDefault
idYesContact id

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered; the description adds the genuinely non-obvious semantics that messages, consent records and topic preferences survive the delete. It doesn't say whether the delete is reversible or what happens when the id doesn't exist.

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, action first and the non-obvious retention caveat second. Nothing wasted, nothing buried.

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

Completeness4/5

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

For a single-id destructive tool with full annotation coverage and no output schema, the description supplies the one piece of behavior annotations can't express (data retention). Minor gaps remain around failure behavior and reversibility.

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 required parameter ('id': 'Contact id'), so the schema carries the parameter burden. The description adds no format or sourcing detail beyond it, which is the baseline case.

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

Purpose4/5

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

States a specific verb and resource ('Delete a contact'), which cleanly separates it from delete_message, delete_list, delete_customer and the other delete_* siblings. It stops short of naming any sibling explicitly, so it is clear but not differentiating in prose.

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

Usage Guidelines2/5

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

There is no 'when to use this instead of X' guidance: an agent must infer from sibling names whether delete_contact or forget_identity is the right call for removing a number's data. Only the retention sentence hints at a use case (keeping history while removing the contact).

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

delete_customerDelete customerC
DestructiveIdempotent
Inspect

Delete a customer.

NameRequiredDescriptionDefault
idYesCustomer id

TDQS

C2.3/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, covering the safety profile. The description adds nothing beyond that — it doesn't state whether deletion is soft or hard, whether related data (contacts, lists, messages) is cascade-deleted, or whether it's reversible. For a destructive operation, this leaves meaningful gaps.

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

Conciseness3/5

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

It is a single, front-loaded sentence with no waste, but its brevity stems from under-specification rather than efficiency. There is nothing to trim, yet nothing substantive is communicated.

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

Completeness2/5

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

For a destructive mutation with no output schema, the description should clarify consequences (permanence, cascading effects, response). It provides none of this, leaving the agent reliant solely on annotations for a high-stakes operation.

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

Parameters3/5

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

Schema description coverage is 100% with a single required 'id' parameter documented in the schema, so the description need not carry this burden. Baseline 3 applies since the schema fully specifies the parameter.

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

Purpose2/5

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

The description 'Delete a customer' simply restates the tool name and title verbatim, adding no distinguishing detail. It does not differentiate from the many other delete_* siblings (delete_contact, delete_topic, delete_segment, etc.) beyond the resource noun embedded in the name itself.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, no prerequisites, and no mention of what conditions must hold before deleting a customer. The agent must infer everything from the name alone.

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

delete_listDelete listA
DestructiveIdempotent
Inspect

Delete a list (its contacts stay).

NameRequiredDescriptionDefault
idYesList id

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered by structured data. The description adds genuinely non-obvious behavioral context beyond that: deletion is non-cascading, contacts survive. It stops short of stating whether the delete is recoverable.

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 with the most important caveat parenthetically front-loaded right after the verb. Nothing is wasted and nothing important is buried.

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 one-parameter destructive tool with full annotation coverage and no output schema, the essentials are present: what is deleted, what survives, and the safety hints from annotations. Only recoverability and permission requirements are unstated, a minor 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?

Single required 'id' parameter with 100% schema description coverage, so the schema already defines it. The description adds nothing about id format or where to obtain the list id, which meets the baseline-3 threshold rather than exceeding it.

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

Purpose4/5

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

States a specific verb and resource ('Delete a list') and adds the key consequence that contacts are not removed, which distinguishes it from a cascading delete. It does not explicitly name the sibling it differs from, but the parenthetical does the disambiguation work.

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

Usage Guidelines2/5

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

No guidance on when to use this versus alternatives such as delete_segment or remove_from_list, and no prerequisites or warnings about irreversibility. The agent must infer usage entirely from the verb.

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

delete_messageDelete messageA
DestructiveIdempotent
Inspect

Delete a finished message (delivered, failed or received) and every copy of its text, for a privacy request. Opt-out records and billing are kept. Cannot be undone.

NameRequiredDescriptionDefault
idYesMessage id (msg_...)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the description earns credit for going further: it says every copy of the message text is deleted, that opt-out records and billing are retained, and that the action cannot be undone. The retained-data detail is exactly the kind of context annotations cannot carry.

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

Conciseness5/5

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

Three short sentences, no filler, with the destructive scope front-loaded and the retention caveat immediately after. Every clause carries information an agent needs.

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

Completeness4/5

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

For a single-param destructive tool with annotations and no output schema, this covers eligibility, blast radius, retention and irreversibility. It stops short of saying what happens to in-flight or scheduled messages, which matters given cancel_scheduled_message exists as a sibling.

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?

Single required parameter with 100% schema description coverage ('Message id (msg_...)'), so the schema already carries the load. The description adds no additional meaning about the id or which message states are valid inputs beyond the finished-state scope already noted.

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

Purpose4/5

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

States a specific verb (Delete) plus the resource and, crucially, the eligible states: 'finished message (delivered, failed or received)'. That scope qualifier distinguishes it from queued/scheduled deletion, though it never names a sibling like redirect_to redact_message or cancel_scheduled_message.

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?

'for a privacy request' gives the intent context for using it, so the when-to-use is implied rather than stated. There is no explicit exclusion ('not for scheduled messages') and no pointer to redact_message or forget_identity, which an agent facing a privacy request would plausibly weigh.

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

delete_number_poolDelete number poolA
DestructiveIdempotent
Inspect

Delete a sender pool. Its numbers are kept.

NameRequiredDescriptionDefault
idYesPool id

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so safety is covered. The description earns credit for adding the non-obvious consequence that the pool's numbers survive the deletion — the single most important fact an agent needs before calling this. It stops short of stating whether the delete is recoverable or what the response contains.

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

Conciseness5/5

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

Two sentences, zero waste, with the outcome-defining fact about retained numbers placed immediately after the action. Nothing is padded or repeated from the 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?

For a one-parameter destructive tool with full annotation coverage and no output schema, the description covers what the tool does and the key side effect. Missing only whether the deletion is reversible and what happens to numbers' pool associations, which would round it out.

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 `id` parameter ("Pool id"), so the structured field carries the load. The description adds nothing about the id's format or how to obtain it (e.g., from list_number_pools), which is the baseline-3 case.

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

Purpose4/5

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

States a specific verb ("Delete") and resource ("sender pool"), which is unambiguous against siblings like get_number_pool, update_number_pool, or clone_number_pool. It uses "sender pool" where the tool name and schema say "number pool," a minor terminology drift, but the intent is still clear.

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

Usage Guidelines2/5

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

There is no when-to-use guidance: nothing says to prefer update_number_pool for edits, to reassign numbers first, or what prerequisite state a pool must be in. The agent must infer the context entirely from the name.

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

delete_scheduleDelete scheduleC
DestructiveIdempotent
Inspect

Delete a recurring schedule.

NameRequiredDescriptionDefault
idYesSchedule id

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds nothing beyond repeating the verb: it does not say whether deletion is permanent, what happens to pending scheduled messages, or whether the schedule must be paused first.

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

Conciseness4/5

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

A single short sentence with zero waste and the verb front-loaded. It is not padded, though the extreme brevity leaves the burden of detail entirely to the schema and annotations.

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

Completeness2/5

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

For a destructive mutation with no output schema, the description should say what is destroyed (the recurring schedule only, or queued sends as well) and whether the action is recoverable. Neither is addressed, leaving the agent to infer consequences from annotations alone.

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 one parameter at 100% schema description coverage, the schema already documents 'id' as 'Schedule id'. The description adds no format, source, or lookup guidance (e.g., where to obtain the id), so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb (Delete) and resource (recurring schedule), which distinguishes it clearly from get_schedule, update_schedule, and list_schedules. It does not explicitly name a sibling or clarify scope beyond 'recurring', but the action is unambiguous.

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

Usage 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 versus update_schedule or how it relates to scheduled messages already queued. Usage is only implied by the verb 'delete' — no prerequisites, exclusions, or alternatives are mentioned.

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

delete_segmentDelete segmentA
DestructiveIdempotent
Inspect

Delete a segment. Contacts are not touched.

NameRequiredDescriptionDefault
idYesSegment id

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is carried structurally. The description adds a genuinely new fact not in any structured field: contacts are not affected by the deletion. It stops short of saying whether the deletion is permanent or what happens to automations/schedules referencing the segment.

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

Conciseness5/5

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

Two short sentences, zero filler, with the destructive action stated first and the notable side-effect caveat immediately after. Nothing to trim.

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

Completeness4/5

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

For a single-parameter delete, the combination of a destructive/idempotent annotation set, a fully described id, and the contacts-not-affected note covers what an agent needs to invoke it. Missing only whether deletion is reversible and whether dependent automations break.

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

Parameters3/5

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

There is one parameter and schema coverage is 100% ('Segment id'), so the schema fully documents it. The description adds no format, prefix, or lookup guidance beyond that, making the 3 baseline 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?

Specific verb + resource: 'Delete a segment.' The second sentence preempts a likely misreading (that contacts in the segment are removed), which sharpens the scope. It does not explicitly contrast with update_segment or get_segment, but the resource distinction is unambiguous against the delete_* siblings.

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

Usage Guidelines2/5

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

No indication of when to use this versus update_segment or list_segments, and no prerequisites or confirmation guidance. The only cue is the implicit 'you need the segment id', which the schema already supplies.

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

delete_templateDelete templateC
DestructiveIdempotent
Inspect

Delete a template.

NameRequiredDescriptionDefault
idYesTemplate id

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally; the description adds nothing on top — no statement about permanence, whether templates in use can be deleted, or what happens to linked automations/messages. No contradiction, but zero added context for a destructive operation.

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

Conciseness2/5

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

It is a single short sentence with no waste, but this is under-specification rather than conciseness — the entire description could be deleted without losing information, since it merely echoes the title.

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

Completeness2/5

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

For a destructive, non-readonly tool with no output schema, the description should convey consequences (hard vs soft delete, cascading effects) and any preconditions. Annotations cover the safety flags, but an agent still cannot predict the effect of calling 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% and the single `id` parameter is documented as 'Template id' in the schema, so the baseline of 3 applies. The description adds no format hints (e.g., where to obtain the id) beyond what the schema provides.

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

Purpose2/5

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

The description restates the tool name and title ('Delete a template') without adding scope, and it does not distinguish this from the many sibling delete_* tools (delete_segment, delete_list, delete_webhook, etc.). An agent learns nothing beyond the verb+resource already encoded in the name.

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

Usage Guidelines2/5

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

No guidance on when to use this versus update_template, get_template, or list_templates, and no prerequisites or exclusions stated. The agent must infer entirely from the name that this is the removal path for templates.

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

delete_topicDelete topicA
DestructiveIdempotent
Inspect

Delete a topic you created (built-in topics stay).

NameRequiredDescriptionDefault
idYesTopic id

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful behavioral context beyond annotations by clarifying that only user-created topics are deletable and built-in topics are protected.

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 waste. It communicates the action and the key constraint immediately.

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 delete operation with annotations covering destructive/idempotent behavior and full schema coverage, the description is nearly complete. It does not describe the return or error behavior, but no output schema exists and the essential call conditions 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 100% with a single parameter, id, fully documented as "Topic id." The description does not add parameter-specific meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose4/5

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

The description gives a specific verb and resource ("Delete a topic") and adds an important scope constraint: only topics the caller created, while built-in topics remain. It is clearly distinguishable from sibling tools like update_topic or get_topic, though it does not explicitly name alternatives.

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

Usage Guidelines4/5

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

It states when deletion applies (topics you created) and implicitly when it does not (built-in topics stay). It lacks explicit guidance on alternatives such as update_topic or list_topics, but the core usage boundary is clear.

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

delete_webhookDelete webhookB
DestructiveIdempotent
Inspect

Delete a webhook endpoint.

NameRequiredDescriptionDefault
idYesWebhook endpoint id

TDQS

B3.2/5.0
Behavior3/5

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

The annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, and openWorldHint=false, so the key safety profile is covered externally. The description adds no behavioral context beyond the purpose, such as permanence, auth requirements, or effect on webhook deliveries, 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.

Conciseness4/5

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

The description is a single short, front-loaded sentence with no wasted words. Its conciseness is appropriate, though it borders on under-specification for a destructive operation.

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 one-parameter delete tool with rich annotations and full schema coverage, the minimum needed to invoke is present. However, the description does not clarify permanence, error behavior for unknown IDs, or side effects on webhook deliveries, leaving meaningful gaps for a destructive operation.

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

Parameters3/5

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

The schema has 100% description coverage for the single required parameter, 'id', documented as 'Webhook endpoint id.' The description adds no additional parameter meaning, 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 states a specific verb and resource: 'Delete a webhook endpoint.' It is clear what object is affected, but it does not differentiate this tool from siblings such as update_webhook, get_webhook, or test_webhook beyond the operation name.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The deletion intent is implied by the verb, but the agent gets no routing help.

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

disconnect_integrationDisconnect integrationA
DestructiveIdempotent
Inspect

Disconnect a tool: its credentials and its list are deleted; the contacts stay with their consent.

NameRequiredDescriptionDefault
idYesIntegration id

TDQS

A3.8/5.0
Behavior4/5

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

The annotations already flag destructiveHint=true and idempotentHint=true, and the description adds genuinely new information: exactly what is destroyed (credentials and the list) and what survives (contacts, subject to consent). That is useful blast-radius detail beyond the structured fields, though it doesn't address whether the disconnect is reversible or what happens to automations tied to the integration.

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 compact sentence that front-loads the action and then the data consequences; every clause carries distinct information and nothing is padding.

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

Completeness4/5

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

For a destructive one-parameter mutation with no output schema, the description covers the most important question an agent has: what is lost versus retained. Gaps remain around reversibility (can the integration be reconnected) and side effects on related automations, so it is strong but not exhaustive.

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

Parameters3/5

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

With only one parameter at 100% schema description coverage, the schema already defines "id" as the Integration id, so the baseline is 3. The description refers to "a tool" rather than confirming the identifier is an integration id, adding no format or sourcing guidance beyond the schema.

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

Purpose4/5

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

The description names a specific verb and resource ("Disconnect a tool") and immediately states the consequences for credentials, the integration-owned list, and contacts, which makes it distinguishable from connect_integration, sync_integration, and update_integration. It does not explicitly name or contrast those siblings, which keeps it just short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied through the effect statement; there is no explicit "use this when" guidance, no precondition such as the integration needing to be connected first, and no pointer to sync_integration or update_integration as the non-destructive alternatives. The agent can infer the situation, but nothing is spelled out.

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

export_csvExport csvA
Read-onlyIdempotent
Inspect

Export as CSV text for analysis: messages, deliveries, events, opt_outs, webhook_deliveries, usage, usage_monthly, audit_log or credit_history. At most 50,000 rows; narrow the date range with from and to.

NameRequiredDescriptionDefault
qNomessages: body/failure text; events: id/payload text
okNowebhook_deliveries
toNoInclusive; a bare date means the end of that day (UTC)
fromNoISO date/time or epoch ms (messages, deliveries, events, webhook_deliveries)
kindYesmessages, deliveries, events, opt_outs, webhook_deliveries, usage, usage_monthly, audit_log or credit_history
typeNoevents, webhook_deliveries
actorNoaudit_log: actor id or part of the actor email
batchNomessages, deliveries: batch id (bc_...)
actionNoaudit_log: one action, or a group prefix with a trailing dot (team.)
monthsNousage: daily rows for the last N months
numberNomessages, deliveries: digits matched against either side
statusNomessages, deliveries
directionNomessages
to_numberNomessages, deliveries: exact recipient (E.164). `to`/`from` are the date range here.
customer_idNomessages, deliveries
endpoint_idNowebhook_deliveries (default: all endpoints)
from_numberNomessages, deliveries: exact sender (E.164)
target_typeNoaudit_log
failure_codeNomessages, deliveries: failed for this reason (the `failure.code` on a message)
created_afterNoaudit_log: same as on GET /audit-logs (from is accepted too)
blocked_reasonNomessages, deliveries: blocked messages with this reason
created_beforeNoaudit_log: same as on GET /audit-logs (to is accepted too)

TDQS

A3.7/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 two genuinely new facts beyond structured data: the output format is CSV text and there is a hard 50,000-row ceiling, which is exactly the kind of constraint an agent must know before choosing a date range.

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

Conciseness4/5

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

Two sentences, front-loaded with the core action and the dataset list, then the constraint. The dataset enumeration is long but functional; nothing is wasted, though the list dominates the payload.

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 22-parameter, kind-switched export tool, the description covers the essential decision inputs: what kinds exist, that output is CSV text, and the row limit. With no output schema, stating the CSV return format matters and is present; per-parameter semantics are fully handled by the schema, so no major gap remains.

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 of the 22 parameters already documents which kind it applies to, so the schema does the heavy lifting. The description only restates the purpose of from/to for date narrowing, adding no syntax or kind-specific semantics the schema lacks. Baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb+resource (export as CSV text) and enumerates the nine exportable datasets, which is more informative than the title alone. It stops short of differentiating from siblings like export_consent, export_numbers, or the parallel list_messages/list_events tools, which share the same data domains.

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?

"for analysis" implies the intended use and the 50,000-row cap with "narrow the date range with from and to" gives practical guidance. However there is no explicit statement of when to prefer this over list_messages/list_events for the same data, nor when to use export_consent or export_numbers instead.

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

export_numbersExport numbersD
Read-onlyIdempotent
Inspect

Your numbers as CSV text.

NameRequiredDescriptionDefault
qNo
tagNo
modeNo
poolNo

TDQS

D1.9/5.0
Behavior2/5

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

Annotations declare read-only, idempotent, non-destructive behavior, so the description need not repeat that. However, it adds only 'CSV text' about the return format and says nothing about pagination, scope (e.g., all numbers vs. filtered), or what data is included.

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

Conciseness2/5

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

The single sentence is front-loaded but drastically under-specified for a tool with four parameters. It is too terse to be useful, rather than efficiently concise.

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

Completeness2/5

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

With no output schema and zero parameter descriptions, the description should explain the return format and filter options. It only says 'CSV text' and leaves major gaps for an agent to call the tool correctly.

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

Parameters1/5

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

The input schema has 4 parameters with 0% description coverage, and the description provides no information about what q, tag, mode, or pool mean. The description fails to compensate for the missing schema documentation entirely.

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

Purpose2/5

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

The description restates the name and title with only the added detail 'as CSV text'. It does not distinguish the tool from siblings such as export_csv or export_consent, leaving ambiguity about whether 'numbers' means phone numbers or something else.

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

Usage Guidelines2/5

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

No guidance on when to use this tool instead of export_csv, export_consent, or list_numbers. There is no context about prerequisites, filtering, or appropriate scenarios.

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

fallback_verificationFallback verificationA
Destructive
Inspect

The text did not arrive: email a new code for the same pending verification (one id, one charge). The emailed code replaces the texted one and is checked by the email address, which it proves (not the phone). Once per verification.

NameRequiredDescriptionDefault
idYesVerification id (ver_...)
emailYesThe address to email the code to
channelNoThe channel to fall back to. Only `email` today.email
user_ipNoOptional. Your end user's IP address, counted in the same per-IP limit as POST /verify.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations, the description explains that the emailed code replaces the texted one, is checked against the email address rather than the phone, and is limited to once per verification. These details make the destructive and non-idempotent behavior concrete.

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 tight sentences with no filler. The triggering condition is front-loaded, followed by the replacement behavior and the usage limit.

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

Completeness4/5

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

For a destructive mutation with no output schema, the description covers the key behavioral facts an agent needs: replacement of the texted code, email-based proof, one charge, and once-per-verification limit. It does not describe the response or error cases, which is a minor remaining gap.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics for the id and email parameters: it clarifies that the same pending verification is reused, that the email address is what the code proves, and that there is one charge. It does not explain the optional user_ip parameter, but the schema already covers 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 states a specific action, 'email a new code,' on a specific resource, 'the same pending verification.' It also distinguishes this fallback path from the normal texted-code path by noting that the text did not arrive and that the emailed code replaces the texted one.

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 opening condition 'The text did not arrive' clearly signals when to use this tool, and 'Once per verification' provides an important usage constraint. It does not explicitly name alternatives such as check_verification or send_verification, so it stops short of full when/when-not guidance.

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

forget_identityForget identityA
DestructiveIdempotent
Inspect

Privacy erasure: forget the phone number linked to a user_id, so its tracked events stop reaching automations.

NameRequiredDescriptionDefault
user_idYesYour user id

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=false, so the destruction signal is carried structurally. The description adds real value beyond that by naming the blast radius: events remain tracked but stop reaching automations. It does not say whether the erasure is reversible or what is retained, which leaves a gap for a destructive privacy operation.

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

Conciseness5/5

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

A single sentence with purpose and effect front-loaded and no filler. Every clause earns its place.

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

Completeness4/5

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

For a one-parameter, no-output-schema tool with annotations covering safety, the description gives enough to invoke it correctly. The main omission is what happens to events already recorded and whether errors occur for unknown user_ids.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description goes slightly beyond by explaining that the user_id is the lookup key for the phone number being forgotten, which disambiguates the schema's thin 'Your user id' hint. It still does not state whether user_id must be an existing, previously-seen identity.

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

Purpose4/5

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

States a specific verb+resource (forget/erase the phone number linked to a user_id) plus the downstream effect. This is clearly distinguishable from delete_contact or redact_message in intent, though no sibling is named explicitly. An agent can tell what the tool does without opening the schema.

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

Usage Guidelines3/5

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

The 'Privacy erasure' framing and the consequence (tracked events stop reaching automations) imply the use case: honoring an erasure request. However, no explicit when-to-use/when-not, no prerequisites (e.g., does the user need to exist?), and no named alternative such as delete_contact for full record removal.

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

get_automationGet automationA
Read-onlyIdempotent
Inspect

Retrieve an automation with its trigger and steps.

NameRequiredDescriptionDefault
idYesAutomation id

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds something the annotations cannot: that the response is composed of the automation plus its trigger and steps, which is valuable given there is no output schema.

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

Conciseness5/5

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

One short sentence, front-loaded with the action verb, with no filler or restatement of the title. Every clause carries 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 single-parameter read tool with rich annotations and no output schema, the description is nearly sufficient: it identifies the record and the components returned. Only minor gaps remain, such as not-found behavior or a pointer to the list/run siblings.

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 sole parameter 'id' is documented in the schema as 'Automation id'. The description adds no format, prefix, or sourcing detail beyond what the schema already provides, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb ('Retrieve') and a specific resource ('an automation'), and names the payload shape (trigger and steps). It does not distinguish itself from nearby siblings such as list_automations or get_automation_run, so an agent must infer the single-vs-list distinction from the 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 Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance. The singular 'an automation' weakly implies a single-record fetch by id, but alternatives (list_automations for enumeration, get_automation_run for execution state) are never referenced.

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

get_automation_runGet automation runA
Read-onlyIdempotent
Inspect

Retrieve one run with its step-by-step timeline.

NameRequiredDescriptionDefault
idYesAutomation id
run_idYesRun id

TDQS

A3.5/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, openWorldHint=false, so the safety profile is fully covered. The description adds one genuinely useful behavioral detail beyond that — the response includes a step-by-step timeline — but says nothing about what happens for an unknown or expired run_id.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler; the resource and the notable return characteristic (timeline) are both stated immediately.

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 two-parameter read tool with complete annotations, the description is adequate but thin. With no output schema, it could do more to characterize the returned run (status, timestamps, step data) and to point at list_automation_runs for discovering run_ids.

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 are documented as 'Automation id' and 'Run id'; baseline 3 applies. The description does not disambiguate the relationship between the two IDs (e.g. whether run_id alone would suffice) or note that both are required.

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

Purpose4/5

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

States a specific verb and resource ('Retrieve one run') and adds scope detail ('with its step-by-step timeline'). It is implicitly distinct from list_automation_runs (many runs) and get_automation (the automation itself), though neither sibling is named.

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

Usage Guidelines3/5

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

Usage is only implied: the agent must already hold a run_id, which suggests reading a known run rather than discovering runs. There is no explicit instruction to call list_automation_runs first to obtain the run_id, and no stated exclusions.

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

get_balanceGet balanceB
Read-onlyIdempotent
Inspect

Prepaid credit balance and auto-recharge setting.

NameRequiredDescriptionDefault

No parameters

TDQS

B3/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 useful detail that auto-recharge configuration is part of the read, but it says nothing about the shape of the response or whether auto-recharge is a nested object.

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

Conciseness3/5

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

It is a single short fragment with no padding, which suits a trivial zero-arg getter, but the absence of a leading verb makes it read like a field label rather than an instruction. Brief but under-specified rather than efficiently expressed.

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

Completeness3/5

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

With no output schema, the description carries the burden of explaining what comes back, and it only partially does so in a noun phrase. For a simple read-only getter it is close to adequate, but an agent still cannot tell the response structure or how it differs from get_usage.

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 takes zero parameters, so the baseline is 4 and there is nothing for the description to compensate for. The schema is fully self-describing at 100% coverage.

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

Purpose3/5

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

The fragment names the two pieces of data returned (prepaid credit balance, auto-recharge setting), so the resource is identifiable, but there is no verb and no differentiation from related siblings such as get_usage, get_spend_limit or get_customer_usage. An agent can guess the purpose but must infer the framing.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no mention of the near-identical siblings (get_usage, get_spend_limit) that could easily be confused with this one. Usage is only implied by the name.

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

get_batchGet batchB
Read-onlyIdempotent
Inspect

Retrieve a batch with its progress counts.

NameRequiredDescriptionDefault
idYesBatch id

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description contributes only the hint that progress counts are included, which is thin given there is no output schema to describe the response shape.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or repetition. Brevity here reflects under-specification rather than waste, but nothing needs to be cut.

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 one-parameter read tool with full annotation coverage, the essentials are present. However, with no output schema, the description should say more about what 'progress counts' includes or how this differs from get_batch_results; that gap is a real one for an agent assembling a batch-status workflow.

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% (single required 'id' documented as 'Batch id'), so the schema already carries parameter meaning. The description adds nothing about format, source of the id, or behavior when the id is unknown, so baseline 3 applies.

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

Purpose4/5

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

Specific verb (retrieve) and resource (a batch), plus a phrase naming the payload ('progress counts') that goes slightly beyond the title 'Get batch'. It does not differentiate itself from close siblings such as get_batch_results, list_batches, or list_batch_recipients, which an agent must otherwise infer.

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

Usage Guidelines2/5

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

No when-to-use guidance and no mention of alternatives. With get_batch_results, list_batches, and list_batch_recipients all in the sibling set, the agent gets no help deciding which returns per-recipient results versus aggregate progress.

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

get_batch_resultsGet batch resultsA
Read-onlyIdempotent
Inspect

Results of a batch: delivered, failed, pending, replies, opt-outs (stops), spend, and failures grouped by reason.

NameRequiredDescriptionDefault
idYesBatch id

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description contributes real value beyond that by enumerating exactly what categories of outcome data come back, which matters because there is no output schema — though it says nothing about pagination or freshness/completeness of in-flight batches.

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

Conciseness5/5

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

A single sentence with zero filler, front-loading the resource and then listing the returned metrics in a compact grouping. Nothing could be removed without losing 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, single-parameter query with full annotation coverage, the description supplies the one thing missing elsewhere: what the response contains, in place of an output schema. Minor gap in not clarifying batch-state preconditions or whether results are partial for running batches.

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?

Only one parameter (id) with 100% schema description coverage, so the schema fully documents the input and the description does not need to compensate. It adds nothing about the id's format or where to obtain it, which is acceptable but minimal.

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 resource (batch results) and enumerates the metrics returned — delivered, failed, pending, replies, opt-outs, spend, failures by reason — which is far more specific than the title's restatement. It does not explicitly contrast with get_batch or list_batch_recipients, so an agent must infer that this is the aggregate/summary view rather than per-recipient detail.

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

Usage Guidelines2/5

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

There is no statement of when to call this versus the closely related get_batch (metadata) or list_batch_recipients (per-recipient detail), and no prerequisites such as batch state or permissions. Usage is only inferable from the noun phrase 'Results of a batch'.

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

get_contactGet contactC
Read-onlyIdempotent
Inspect

Retrieve a contact.

NameRequiredDescriptionDefault
idYesContact id

TDQS

C2.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that — no note on behavior for a missing/unknown id, no indication of what data is returned, no rate-limit or permission context. It does not contradict the annotations, but it contributes no behavioral value.

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

Conciseness3/5

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

A single three-word sentence with zero waste and the verb front-loaded, but the brevity here is under-specification rather than disciplined conciseness — there is no second sentence carrying the information an agent actually needs.

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

Completeness2/5

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

There is no output schema, so the description is the only place return contents could be described, and it is silent. For a single-resource fetch in a 100+ tool catalog, the agent cannot tell what fields come back, what error behavior to expect, or why to choose this over list_contacts. Annotations cover safety but not the informational 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% and the single 'id' parameter is documented in the schema as 'Contact id'. The description adds no format hints (e.g., UUID vs. phone number vs. internal key) beyond the schema, so the baseline of 3 applies.

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

Purpose2/5

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

The description restates the tool name and title almost verbatim ('Get contact' → 'Retrieve a contact') without adding scope or distinguishing it from the many neighboring contact tools (list_contacts, get_contact_topics, update_contact, upsert_contact). An agent learns nothing about what 'a contact' contains or how this differs from fetching contacts in bulk.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of alternatives such as list_contacts for enumeration or get_contact_topics for related data, and no prerequisites stated. Usage is only inferable from the verb 'retrieve' plus the required id parameter.

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

get_contact_topicsGet contact topicsC
Read-onlyIdempotent
Inspect

A contact's subscription to each topic.

NameRequiredDescriptionDefault
idYesContact id

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered structurally. The description adds nothing beyond that: no mention of paging, per-topic subscription state (subscribed/unsubscribed/pending), or behavior for a contact with no topics.

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

Conciseness2/5

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

It is short, but a single sentence fragment is under-specification rather than concision. There is no front-loaded verb, so the reader gains nothing that the tool name did not already convey.

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

Completeness2/5

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

There is no output schema, so the description is the only place a caller could learn what is returned (a list of topics with subscription status). It omits that entirely, leaving a gap for a tool whose entire value is the returned shape.

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 one parameter and 100% schema description coverage ('Contact id'), the schema already carries the semantics. The description adds no format hints (e.g., contact UUID vs. phone number) so the baseline 3 applies.

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

Purpose2/5

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

The description is a noun phrase with no verb: 'A contact's subscription to each topic.' It essentially restates the tool name and title rather than stating an action ('retrieve the topic subscriptions for a contact'). An agent can infer retrieval only from the name, not from the description itself.

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

Usage Guidelines2/5

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

No when-to-use guidance is given. The sibling set is telling — set_contact_topic exists for writes and get_topic/list_topics exist for the topic catalog — but the description never distinguishes this tool from those or states the precondition (a contact id must exist).

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

get_customerGet customerC
Read-onlyIdempotent
Inspect

Retrieve a customer.

NameRequiredDescriptionDefault
idYesCustomer id

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds nothing beyond that: no behavior for a missing or deleted customer, no note on what fields are returned, no scoping (account/workspace) constraints. With annotations doing all the work, the description earns only minimal credit.

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

Conciseness4/5

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

A single short sentence with the verb and resource front-loaded - nothing wasted, nothing padded. It is efficient, though efficiency here is partly a product of extreme under-specification.

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 one-parameter read tool with rich annotations and no output schema, the description is minimally sufficient to call it correctly. However, it omits how to obtain the id and what happens on a not-found result, which are the two questions an agent actually has here.

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 'id' parameter, so the schema already carries the documented meaning and the baseline of 3 applies. The description adds no format, source, or validation detail (e.g. whether id is the internal customer id or an external identifier).

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

Purpose3/5

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

The description names a specific verb and resource ("Retrieve a customer"), which is slightly more than the title restating itself, but it does nothing to distinguish this from close siblings such as list_customers, get_customer_usage, or get_contact. An agent still has to infer that this fetches one record by id rather than an aggregate or usage report.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of the alternative list_customers for enumerating customers, and no note on prerequisites such as needing a customer id obtained elsewhere. The agent is left to infer selection criteria from the name alone.

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

get_customer_usageGet customer usageC
Read-onlyIdempotent
Inspect

A customer's messages, verifications and spend for a period.

NameRequiredDescriptionDefault
idYesCustomer id
endNoDefault: today
startNoDefault: first day of this month

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds no behavioral context of its own — nothing on aggregation granularity, pagination, or whether the period bounds are inclusive.

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

Conciseness4/5

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

A single short sentence with no filler, leading with the returned content. Its brevity is closer to under-specification than to padding, but nothing is wasted.

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

Completeness2/5

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

With no output schema, the description carries the burden of explaining what is returned; "messages, verifications and spend" does not say whether these are counts, timeseries, or aggregates. For a three-parameter reporting tool this leaves a meaningful 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%, including the defaults for start (first day of this month) and end (today), so the schema does the heavy lifting. The phrase "for a period" loosely ties to start/end but adds no semantics beyond what the schema states.

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

Purpose3/5

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

The fragment names the resource contents precisely ("messages, verifications and spend for a period") but omits a verb and any differentiation from close siblings such as get_usage, get_customer or get_spend_limit. An agent can infer it is a per-customer aggregate read, but cannot be sure from the text alone which usage tool to pick.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no exclusions, and no mention of the account-level get_usage or get_spend_limit alternatives. The agent must fall back on tool names to disambiguate.

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

get_deliverabilityGet deliverabilityC
Read-onlyIdempotent
Inspect

Delivery rates by day, destination carrier, or sending number.

NameRequiredDescriptionDefault
end_dateNoYYYY-MM-DD
group_byNo
start_dateNoYYYY-MM-DD

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing else: no default time window when dates are omitted, no aggregation/granularity semantics, no rate-limit or cost notes, and no clue about how partial-result or empty-result rates are reported.

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

Conciseness3/5

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

It is a single short sentence with no filler, which is good, but it reads as an under-specified fragment rather than a front-loaded explanation. Brevity here comes at the cost of information rather than from trimming waste.

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

Completeness2/5

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

For an aggregation tool with no output schema, three optional parameters, and undefined defaults, the one-line description leaves too much open. An agent cannot know the default time window, whether group_by defaults to 'day', or whether the result is a time series versus per-carrier totals.

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 67%; the description's 'by day, carrier, sending number' clarifies that group_by='carrier' means destination carrier and 'number' means sending number, which is mild added meaning. It says nothing about what happens when start_date/end_date are omitted, which is the main semantic question for an all-optional-param tool.

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

Purpose3/5

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

The phrase 'Delivery rates by day, destination carrier, or sending number' signals an aggregate deliverability-report tool, but it is a noun fragment with no verb and no noun for the resource itself. It is distinguishable from siblings by topic, yet it never states it retrieves/returns a report, and no sibling (e.g., get_usage, get_customer_usage) is referenced for contrast.

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 call this versus get_usage or get_customer_usage, no mention of how to interpret the three grouping modes, and no hint about defaults for the optional start_date/end_date. The agent must infer everything from the schema.

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

get_integrationGet integrationC
Read-onlyIdempotent
Inspect

One connected tool and its last sync.

NameRequiredDescriptionDefault
idYesIntegration id

TDQS

C2.4/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, and openWorldHint=false, so the safety and side-effect profile is fully covered without description help. The description adds a small amount of behavioral context by signaling that the response pairs the integration with its last sync, but says nothing about staleness, auth scopes, or failure modes. Added value over annotations is thin.

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

Conciseness2/5

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

Six words with no waste, but this is under-specification rather than conciseness — the fragment is not front-loaded with an action verb and gives the agent almost no anchor. It earns its place only marginally.

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

Completeness2/5

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

There is no output schema, so the description carries the full burden of explaining return values, yet it never enumerates the fields returned beyond alluding to a last-sync timestamp, nor describes not-found behavior. For a simple single-record read this is a material 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?

Single parameter with 100% schema coverage ("Integration id"), so the schema already carries the burden; baseline 3 applies. The description does not clarify whether the id is a UUID, slug, or provider key, nor what happens with an invalid id.

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

Purpose2/5

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

"One connected tool and its last sync" is a noun fragment that largely restates the name/title (get integration → one integration) rather than stating a verb+resource action. The one piece of added information, "its last sync," hints at what is returned, but an agent gets no explicit statement that this fetches a single integration by id.

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 versus list_integrations, update_integration, or connect_integration, all of which appear in the sibling list. No prerequisites, no error/not-found behavior, no indication of whether this is for polling sync status.

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

get_listGet listA
Read-onlyIdempotent
Inspect

Retrieve a list and its contact count.

NameRequiredDescriptionDefault
idYesList id

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that the response includes a contact count, which is useful, but does not mention not-found behavior, permissions, or other operational 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?

A single, front-loaded sentence with no wasted words. It communicates the core action and an important return detail efficiently.

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 getter with full schema coverage and safety annotations, the description is largely complete. It notes the contact count return value, though it does not enumerate other list fields or error behavior; no output schema exists to fill that 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%, and the single parameter is documented as 'List id.' The description adds no format or semantic detail beyond what the schema provides, so 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 states a specific verb and resource: retrieve a single list and its contact count. This implicitly distinguishes it from list_lists and list_list_contacts, but it does not explicitly name those alternatives.

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

Usage Guidelines3/5

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

Usage is implied by the standard 'get by id' pattern, but there is no explicit guidance on when to use this versus list_lists or list_list_contacts. No exclusions or prerequisites are stated.

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

get_messageGet messageB
Read-onlyIdempotent
Inspect

Retrieve a message by its msg_... id, with its delivery timeline.

NameRequiredDescriptionDefault
idYesMessage id (msg_...)

TDQS

B3.4/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, and openWorldHint=false, so safety behavior is covered. The description adds that the response includes a 'delivery timeline', which is useful beyond annotations, but it does not describe pagination, error behavior, auth requirements, or the timeline's contents.

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?

It is a single front-loaded sentence with no wasted words. The core action, identifier requirement, and returned detail are all stated immediately.

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 single-parameter read tool, the description plus annotations and full schema coverage are sufficient to invoke it correctly. It also hints that the return includes a delivery timeline, though it could be slightly more complete by noting how to obtain the id or what the timeline contains.

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

Parameters3/5

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

Schema description coverage is 100%, and the sole parameter is already documented as 'Message id (msg_...)'. The description restates the same id format but adds no additional syntax or semantic meaning beyond the schema, which matches the baseline of 3 when schema coverage is high.

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

Purpose4/5

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

States a specific verb ('Retrieve') and resource ('message'), including the identifier form ('msg_... id') and an extra return detail ('delivery timeline'). It is distinguishable from list_messages by the 'by id' phrasing, but it does not explicitly distinguish itself from sibling get_scheduled_message or other message-related tools.

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

Usage Guidelines2/5

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

The description implies you should use it when you already have a message id, but it gives no explicit when-to-use guidance versus alternatives such as list_messages or get_scheduled_message. There are no exclusions or routing conditions.

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

get_numberGet numberB
Read-onlyIdempotent
Inspect

Retrieve one of your numbers: status, sender registration, tags, pools, customer.

NameRequiredDescriptionDefault
phone_numberYesE.164 number you own

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already establish readOnly, idempotent, non-destructive behavior, so the safety profile is covered. The description adds value by naming the fields returned (useful since there is no output schema), but omits what happens if the number isn't owned or how the returned data is shaped.

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

Conciseness4/5

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

A single front-loaded sentence identifying the action and the payload. The trailing field list is slightly list-like/fragmented but every element carries information; nothing is wasted.

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

Completeness3/5

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

For a one-parameter read with no output schema, naming the returned fields is the key compensating value, and it does that. However, it stops short of describing the return structure or the not-found/unauthorized case, leaving gaps an agent might 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 coverage is 100% and the phone_number parameter is described as an 'E.164 number you own'. The description's 'one of your numbers' reinforces the ownership constraint but adds no format or syntax detail beyond the schema.

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

Purpose4/5

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

States a specific verb and resource ('Retrieve one of your numbers') and enumerates the data returned (status, registration, tags, pools, customer). It's clearly a single-number fetch, distinguishable in spirit from list_numbers and get_number_pool, though it never names those siblings to draw the contrast explicitly.

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

Usage Guidelines3/5

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

The phrase 'one of your numbers' implies a single-record lookup by an owned number, but there is no explicit guidance on when to prefer this over list_numbers, lookup_phone, or get_number_pool. Usage is inferable but not stated.

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

get_number_poolGet number poolB
Read-onlyIdempotent
Inspect

Retrieve a sender pool and its numbers.

NameRequiredDescriptionDefault
idYesPool id

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered elsewhere. The description's only added signal is 'and its numbers,' which usefully tells the agent the response expands contained numbers rather than returning bare pool metadata. It says nothing about what happens with an invalid or deleted pool id.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler. It is arguably too terse to be maximally useful, but nothing in it is wasted.

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

Completeness3/5

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

For a simple one-parameter read with rich annotations and full schema coverage, this is close to sufficient. However, there is no output schema, so the agent has no view of the return shape — the description gestures at 'its numbers' but doesn't say what fields accompany them or how large a pool response might be.

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 single 'id' parameter is documented as 'Pool id.' The description adds no format hints (e.g., whether the id is a UUID or a pool name), so it neither compensates nor detracts. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb (retrieve) and resource (sender pool plus its numbers), so the agent knows it fetches a single pool with embedded number data. It doesn't explicitly differentiate from siblings like list_number_pools or get_number, but the singular resource makes the distinction reasonably inferable.

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

Usage Guidelines2/5

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

No guidance on when to use this versus list_number_pools (enumerate pools) or get_number (single number lookup). The only implied usage is 'you have a pool id,' which comes from the schema, not the description.

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

get_registrationGet registrationC
Read-onlyIdempotent
Inspect

A registration with its checks, status, and linked numbers.

NameRequiredDescriptionDefault
idYesRegistration id

TDQS

C2.8/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 safety behavior is covered. The description adds some useful context about what the response includes (checks, status, linked numbers), but does not mention error behavior or permissions.

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

Conciseness3/5

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

It is very concise, but it is a sentence fragment that leads with the returned object rather than the action. There is no wasted text, though the structure is not front-loaded with an operation.

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 retrieval tool with rich annotations and full schema coverage, the description is adequate but incomplete. It partially describes returned content, but without an output schema it should say more about what the agent gets back.

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 single id parameter is already documented in the schema. The description adds no additional parameter semantics, so baseline 3 is appropriate.

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

Purpose3/5

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

The description names the resource and its included components ("checks, status, and linked numbers"), but it is a noun phrase rather than a clear retrieval action. It implies a single registration, which helps distinguish it from list_registrations, but it never explicitly says "retrieve by ID."

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

Usage Guidelines2/5

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

It gives no guidance on when to use this tool versus list_registrations or other get_* tools. There are no exclusions or prerequisites stated.

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

get_scheduleGet scheduleB
Read-onlyIdempotent
Inspect

Retrieve a recurring schedule with its recent occurrences.

NameRequiredDescriptionDefault
idYesSchedule id

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world semantics, so the safety profile is covered. The description adds one useful behavioral fact — that recent occurrences are bundled in the response — but says nothing about how many occurrences, pagination, or how far back 'recent' reaches.

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 lean sentence with the resource and the return scope front-loaded and zero 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 simple read-by-id tool with rich annotations and no output schema, this covers what's needed to invoke it correctly. The only shortfall is that the shape of the 'recent occurrences' payload is left entirely unspecified.

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

Parameters3/5

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

Schema coverage is 100% for the single 'id' parameter, so the baseline applies; the description adds nothing about id format (UUID vs prefixed string) or behavior on an unknown id.

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

Purpose4/5

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

States a specific verb ('Retrieve') and resource ('recurring schedule') and adds scope detail — that time-based occurrences come back with it. It does not explicitly distinguish itself from list_schedules, but the singular-by-id framing plus the name makes the distinction inferable.

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 when/when-not guidance and names no alternative (list_schedules, get_scheduled_message). An agent must infer from the name alone that this is the by-id lookup path.

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

get_scheduled_messageGet scheduled messageB
Read-onlyIdempotent
Inspect

Retrieve a pending scheduled message.

NameRequiredDescriptionDefault
idYesScheduled message id

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds the qualifier 'pending', but does not explain what happens if the message is not pending or not found, nor does it describe the return format.

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

Conciseness5/5

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

The description is a single focused sentence with no wasted words. The key qualifier 'pending' is front-loaded alongside the retrieval action.

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

Completeness3/5

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

For a simple one-parameter read tool with rich annotations and full schema coverage, the description is minimally adequate. However, it omits sibling differentiation and does not clarify behavior for non-pending or missing messages, leaving some contextual gaps.

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

Parameters3/5

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

Schema description coverage is 100% and the single `id` parameter is clearly documented in the schema. The description adds no additional parameter semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description gives a specific verb ('Retrieve') and resource ('scheduled message'), with the qualifier 'pending' narrowing scope. It is clear what the tool does, though it does not explicitly distinguish it from siblings such as get_schedule, list_scheduled_messages, or get_message.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus alternatives like list_scheduled_messages or get_schedule. The only implied usage is retrieving a scheduled message by id, but no exclusions or selection criteria are stated.

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

get_segmentGet segmentC
Read-onlyIdempotent
Inspect

Retrieve a segment and its rules.

NameRequiredDescriptionDefault
idYesSegment id

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds only 'and its rules' about payload contents; it says nothing about behavior when the id is unknown or about segment freshness.

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

Conciseness4/5

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

One short, front-loaded sentence with no filler, but it is arguably under-specified rather than deliberately tight — nothing is wasted, yet little is conveyed either.

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 single-parameter read tool with rich annotations and no output schema, the description is minimally adequate. It does not explain the returned structure or error behavior, which matters slightly since there is no output schema to do that work.

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

Parameters3/5

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

Schema coverage is 100% with a single documented 'id' parameter, so the schema carries the semantics. The description adds no format or sourcing detail beyond what the schema states, which is the expected baseline for a fully documented single parameter.

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?

Specific verb (retrieve) plus resource (segment), and it adds that the segment's rules are included, which goes slightly beyond the name/title. It does not distinguish itself from siblings like list_segments, preview_segment, or update_segment, so an agent must infer the difference.

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 versus list_segments (to browse) or preview_segment (to evaluate membership). No prerequisites or exclusions are stated, leaving selection entirely to inference from the name.

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

get_spend_limitGet spend limitB
Read-onlyIdempotent
Inspect

The monthly spend limit and this month's estimated spend.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The description adds the useful detail that spend is an estimate for the current month, but gives nothing on freshness, currency/units, or what happens when no limit is configured.

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

Conciseness4/5

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

A single short clause with no filler, and the two returned values are front-loaded. It is slightly under-specified rather than verbose, but nothing in it is wasted.

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

Completeness3/5

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

With no parameters and no output schema, the description is the only source for what comes back, and it only gestures at the return shape (two values, one of which is an estimate) without units, currency, or behavior when no limit is set. Adequate to call correctly, but not complete for interpreting the result.

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 takes zero parameters, so there is nothing for the description to disambiguate and the schema is complete by definition. Baseline 4 applies.

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

Purpose4/5

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

The description names the specific resource returned: the monthly spend limit plus this month's estimated spend, which is concrete enough for an agent to know what it fetches. It is a bare noun phrase with no verb and never distinguishes itself from close siblings such as get_balance, get_usage, or get_customer_usage, so it falls short of a 5.

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

Usage 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 call this versus get_balance/get_usage, nor any mention of the paired mutation tool set_spend_limit that an agent would naturally look for. The description only implies usage through the fact that it exists as a getter.

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

get_templateGet templateC
Read-onlyIdempotent
Inspect

Retrieve a template.

NameRequiredDescriptionDefault
idYesTemplate id

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that — no note on behavior for missing/deleted templates, no pagination or expansion options, no scoping constraints.

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

Conciseness3/5

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

One short, front-loaded sentence with zero waste, but that is because it says almost nothing. Its brevity is under-specification rather than disciplined concision.

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

Completeness3/5

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

This is a simple single-record lookup with a fully documented one-parameter schema and complete annotations, so little beyond a bare sentence is strictly required. Still, the description never states that the returned template can be passed to update_template or used with send_message, information an agent would plausibly 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?

There is only one required parameter (id) and schema description coverage is 100%, so the schema itself documents the input. The description neither clarifies the id format nor adds any meaningful semantics on top of it, which is the baseline expectation here.

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

Purpose2/5

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

The description restates the title and name nearly verbatim: "Retrieve a template" adds no specificity beyond the tool name get_template. It does not say what a template is, what fields come back, or how it differs from list_templates or get_template's update/delete siblings.

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

Usage Guidelines2/5

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

No when-to-use guidance is given. With siblings like list_templates (enumeration) and create_template/update_template/delete_template alongside it, the agent gets no explicit statement that this is the single-record fetch keyed by id, though the id parameter implies it.

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

get_toll_free_verificationGet toll free verificationC
Read-onlyIdempotent
Inspect

A toll-free verification: status, numbers, the form, what is missing (problems), and the carriers' reason when it was rejected.

NameRequiredDescriptionDefault
idYesToll-free verification id (tfv_...)

TDQS

C2.9/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 genuine value by disclosing the payload contents, including the diagnostic fields (problems, carrier rejection reason), but says nothing about error behavior when an id is unknown or about verification states.

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

Conciseness4/5

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

One compact sentence that front-loads the resource and then lists the return fields; nothing is wasted. It loses a point only because the fragmentary phrasing lacks an explicit action verb.

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 one-parameter read-only getter with strong annotations and no output schema, listing the returned contents covers most of the gap. What remains unaddressed is disambiguation from the similarly named verification tools and any indication of failure modes.

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 id parameter is documented with its tfv_ prefix in the schema, so the description adds nothing beyond it. Baseline 3 applies for a single, fully documented parameter.

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

Purpose3/5

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

The description identifies the resource and enumerates the data it returns (status, numbers, form, problems, rejection reason), so the agent knows what it gets back. But it is a noun phrase with no verb, and it never distinguishes itself from the sibling tools get_verification or check_verification, which an agent could plausibly pick instead.

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

Usage Guidelines2/5

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

There is no statement of when to call this versus list_toll_free_verifications (for enumeration) or get_verification (a neighboring getter). Usage is only inferable from the singular name and the required id.

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

get_topicGet topicC
Read-onlyIdempotent
Inspect

Retrieve a topic.

NameRequiredDescriptionDefault
idYesTopic id

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds nothing further — no behavior on a missing/unknown id, no auth requirements, no indication of what is returned.

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

Conciseness3/5

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

The single short sentence is front-loaded and free of waste, but its brevity reflects under-specification rather than economy of expression.

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 single-id read whose annotations cover the safety profile and whose schema covers the lone parameter, the description is minimally sufficient to call correctly. It is still silent on failure mode when the id does not exist, which would be useful given no output schema.

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

Parameters3/5

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

There is only one parameter and schema description coverage is 100%, with the schema documenting 'id' as the Topic id. Baseline 3 applies since the description contributes no additional meaning beyond the schema.

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

Purpose3/5

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

It states a specific verb ('Retrieve') and resource ('topic'), so the basic operation is identifiable. But it does not distinguish itself from nearby siblings such as list_topics or get_contact_topics, leaving scope (single topic by id) only implied by the 'id' parameter.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus list_topics or get_contact_topics, and no prerequisites or exclusions. The agent must infer usage from the tool name alone.

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

get_usageGet usageC
Read-onlyIdempotent
Inspect

Usage by month, today's counters, and plan limits.

NameRequiredDescriptionDefault
monthsNoHow many months back (default 3)

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and closed-world, so the safety profile is fully covered. The description adds only a rough indication of the data returned (monthly usage, today's counters, plan limits), which is modest added value against an already-complete annotation set.

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

Conciseness3/5

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

It is short with no wasted words, but it is a noun-phrase fragment rather than a sentence, and the most decision-relevant fact (account-level scope) is absent entirely. Conciseness is fine; front-loading of genuinely useful information is not.

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

Completeness4/5

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

For a single-parameter, read-only, closed-world tool with no output schema, the description covers the high-level return contents and near-nothing else is needed to invoke it correctly. Only the account-vs-customer scope would meaningfully improve it.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage including a default, so the schema does the work. The description says nothing about the lookback window or defaults, so baseline 3 applies.

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

Purpose3/5

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

The fragment 'Usage by month, today's counters, and plan limits' names the resource and roughly the dimensions returned, but has no verb and never says whose usage (account-level) it is. With a sibling named get_customer_usage, the lack of any scope distinction leaves the agent guessing which tool covers which subject.

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

Usage Guidelines2/5

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

No when-to-use guidance, no mention of alternatives, no prerequisites. Given that get_customer_usage and get_balance sit in the same sibling list, the absence of routing guidance is a real gap.

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

get_verificationGet verificationA
Read-onlyIdempotent
Inspect

Retrieve a verification by id: its status and attempts (never the code).

NameRequiredDescriptionDefault
idYesVerification id

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered. The description adds a genuinely useful disclosure beyond that: the code is never returned, which is a security-relevant constraint and hints at the intended use (polling status, not verifying a code). It stops short of describing pagination or attempt-list shape.

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

Conciseness5/5

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

One sentence, front-loaded with the action and resource, and the parenthetical about the code is the highest-value detail placed where it will be read. 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?

No output schema exists, so the description takes on return-value explanation and does so partially: status and attempts, explicitly excluding the code. It leaves open what values status can take and whether attempts is a count or a list, which would matter for a tool whose whole purpose is reading that state.

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?

Single parameter with 100% schema description coverage, so the schema already carries the semantics. The description reinforces that the id is a verification id used for direct lookup, adding no ambiguity, but nothing beyond the schema either — the baseline for a well-covered single param.

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

Purpose4/5

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

States a specific verb (Retrieve) and resource (a verification) and names the lookup key (id), plus previews the returned content: status and attempts. It does not differentiate itself from the closely named sibling check_verification or send_verification/fallback_verification, so an agent must infer which one reads existing state.

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

Usage Guidelines3/5

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

Usage is implied by 'Retrieve ... by id' — a read of an existing verification — but there is no explicit statement of when to pick this over check_verification (which presumably submits/validates a code) or send_verification. No exclusions or prerequisites are given.

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

get_webhookGet webhookC
Read-onlyIdempotent
Inspect

Retrieve a webhook endpoint.

NameRequiredDescriptionDefault
idYesWebhook endpoint id

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond the purpose, such as error behavior for a missing id, permissions needed, or what the returned endpoint contains.

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

Conciseness4/5

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

A single efficient sentence with no wasted words. It is appropriately front-loaded, though the extreme brevity edges toward under-specification rather than optimal conciseness.

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 single-parameter read tool with full annotations and full schema coverage, the definition is minimally adequate but does not describe the return payload or failure modes. There is no output schema, so a brief note on what a retrieved webhook includes would have been valuable.

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 'id' parameter documented as 'Webhook endpoint id'. The description adds nothing beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States the specific verb 'retrieve' and resource 'webhook endpoint' in singular form, which implicitly distinguishes it from the sibling list_webhooks, create_webhook and update_webhook. It does not explicitly name an alternative, so it falls short of a 5.

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

Usage 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 list_webhooks or test_webhook, and no prerequisites or exclusions are mentioned. The agent must infer usage 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.

import_contactsImport contactsA
Destructive
Inspect

Create or update up to 500 contacts per call, matched by phone_number. Attributes go in fields (up to 20 strings, e.g. plan) for segments and {{field:name}} merge tags; tags group contacts. opt_in carries consent evidence (status: false records an opt-out). import_id from the first response groups several calls; dry_run: true returns what would change and writes nothing.

NameRequiredDescriptionDefault
nameNoA label for the import (first request only).
dry_runNo
contactsYes
import_idNoFrom a previous response, to group several requests as one import.
campaign_idNoApplies to every opt_in row that does not name its own campaign_id
check_line_typesNodry_run only. Looks up line types to count landlines; live lookups are paid, so only the first 500 numbers are checked.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, and the description adds genuinely new behavior: upsert matching on phone_number, dry_run writes nothing, and the important consent rule that status=false records an opt-out and never lifts one. It stops short of stating what happens on partial failure or row skips (only the schema's campaign_id note mentions skipped rows), so it is strong but not complete.

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

Conciseness5/5

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

Four dense sentences with zero filler: purpose and limits first, then the fields/tags semantics, then consent behavior, then the import_id/dry_run mechanics. Nothing is repeated from the schema verbatim and each sentence carries new 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 6-parameter, 500-row mutation with no output schema, the description covers the critical points: matching, batching, consent semantics, dry-run, and cross-call grouping. What is missing is minor — no description of the response shape beyond the hint that it returns an import_id, and no mention of what happens to invalid or skipped rows.

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 67%, and the description compensates for the highest-value gaps by explaining what fields and tags do downstream (segments, {{field:name}} merge tags) and how opt_in behaves, which the schema alone does not convey. It leaves name, campaign_id, and check_line_types unaddressed in prose, so the compensation is partial rather than complete.

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 opening clause gives a specific verb pair and resource ('Create or update ... contacts'), plus scale ('up to 500 per call') and matching key ('matched by phone_number'), which implicitly separates it from single-record tools like upsert_contact. However, it never names a sibling such as upsert_contact, bulk_update_contacts, or plan_import, so the differentiation is left to inference.

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

Usage Guidelines3/5

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

The description explains mechanics (dry_run writes nothing, import_id groups calls) but never states when to use this over alternatives — notably plan_import, which is a likely pre-flight sibling, or upsert_contact/bulk_update_contacts for non-import paths. Usage must be inferred from the batching and import framing rather than being spelled out.

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

import_opt_outsImport opt outsA
Destructive
Inspect

Bring a suppression list over from another provider or tool (up to 500 numbers per call), so people who opted out there are never texted here.

NameRequiredDescriptionDefault
phone_numbersYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, so safety is covered structurally. The description adds real semantic context the annotations lack: these entries suppress future messaging, and there is a hard 500-number ceiling per call. It stops short of saying how duplicates or existing opt-outs are handled.

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

Conciseness5/5

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

One sentence, front-loaded with the action and resource, with the limit and the consequence attached. Nothing redundant.

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

Completeness4/5

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

For a single-parameter tool with annotations and no output schema, the description covers purpose, scale limit and effect. Missing only edge-case behavior (duplicates, partial failures, return counts), which is a minor gap given 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 coverage is 0%, so the description must carry the param load. It does explain the payload is phone numbers and that 500 is the per-call maximum, but leaves the required format (e.g. E.164) and handling of non-numeric entries unspecified.

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?

Names a specific verb (import) and resource (a suppression/opt-out list) and states the outcome it produces ('so people who opted out there are never texted here'). That resource framing clearly separates it from import_contacts and list_opt_outs without needing to name a sibling.

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

Usage Guidelines3/5

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

The phrase 'from another provider or tool' implies the migration scenario, and the 500-per-call cap hints at batching for larger lists. But it never states when not to use it (e.g. adding a single opt-out, or reading existing opt-outs with list_opt_outs) and names no alternative.

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

list_api_keysList api keysA
Read-onlyIdempotent
Inspect

List the active API keys of this mode (never the secrets).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is low. The description adds genuinely useful behavioral facts: only active keys are returned, scoped to the current mode, and secrets are never exposed — details the annotations do not cover.

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

Conciseness5/5

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

One sentence with zero waste; the scope (active, this mode) and the security caveat (never the secrets) are both 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 trivial no-param read tool with annotations covering the safety profile and no output schema to explain, the description is sufficient. Pagination or ordering behavior would be the only marginal addition, which is minor here.

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?

Zero parameters, so the baseline is 4. The description correctly implies a no-argument listing call and adds no misleading parameter hints.

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?

Specific verb+resource ('List the active API keys') with added scope ('of this mode') and a clear statement that secrets are excluded. It is easily distinguished from create_api_key and revoke_api_key, though it doesn't explicitly name those siblings.

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

Usage Guidelines3/5

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

Usage is implied by the name and the 'active keys of this mode' scoping, but there is no explicit when-to-use or when-not guidance, nor routing to create_api_key/revoke_api_key for lifecycle operations.

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

list_audit_logsList audit logsA
Read-onlyIdempotent
Inspect

Who changed what on the account (keys, team, webhooks, spend limit, numbers, consent, settings), newest first.

NameRequiredDescriptionDefault
actorNoActor id (exact) or part of the actor email (case-insensitive)
limitNo
actionNoOne action, or a group prefix with a trailing dot (team., api_key.)
cursorNo
target_typeNoTarget type, e.g. api_key, member, invite, webhook, number, phone
created_afterNoEntries at or after this time (ISO 8601)
created_beforeNoEntries at or before this time (ISO 8601); a bare date means the end of that day (UTC)

TDQS

A3.5/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 safety is covered. The description adds one genuinely useful behavioral fact — default sort is newest first — but says nothing about pagination via cursor, retention window, or the size of the result set.

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

Conciseness5/5

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

One sentence, zero filler, and the highest-value information (what activity is recorded and in what order) is front-loaded. Nothing here could be cut without losing signal.

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

Completeness3/5

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

With 7 all-optional filter params, no output schema, and a cursor-based paging model, the description should at least indicate that results are paginated and that unfiltered calls return the whole account history. It covers subject matter well but leaves the invocation mechanics to the schema.

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

Parameters3/5

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

Schema coverage is 71%: actor, action, target_type and the date bounds are documented inline, but limit and cursor have no description at all. The description does not compensate for those gaps or explain the action-prefix grouping syntax, so it adds only the ordering hint beyond the schema.

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

Purpose4/5

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

The description names a specific resource (account audit trail) and enumerates exactly what it covers — keys, team, webhooks, spend limit, numbers, consent, settings — plus ordering (newest first). That separates it from generic siblings like list_events, though it never names an alternative explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the tool for security/change-history questions because of the 'who changed what' framing and the resource list. There is no statement of when not to use it, and no pointer to related tools such as list_events or list_webhook_deliveries.

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

list_automation_runsList automation runsB
Read-onlyIdempotent
Inspect

List an automation's runs, newest first.

NameRequiredDescriptionDefault
idYesAutomation id
limitNoMax results (default 25, max 100)
cursorNonext_cursor from the previous page

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile carries little weight here. The description contributes the meaningful extra fact that results are ordered newest first, but says nothing about pagination behavior despite exposing a cursor, nor about what a run record contains.

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

Conciseness4/5

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

A single short sentence, front-loaded with the operation and ending with the sorting behavior; nothing is wasted. It is arguably too terse rather than too long, but it is efficient and well ordered.

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

Completeness3/5

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

For a simple, read-only paginated list tool with full schema coverage and no output schema, the essentials are present. Still missing is any routing hint versus get_automation_run and list_automations, and a note that cursor drives paging, which would make the definition self-sufficient.

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

Parameters3/5

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

Schema description coverage is 100% — id, limit (default 25, max 100) and cursor (next_cursor from previous page) are all documented in the schema. The description adds no parameter-level detail beyond what is already structured, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('List an automation's runs') and adds the ordering ('newest first'), so the intent is unambiguous. It does not explicitly distinguish itself from nearby siblings such as get_automation_run or list_automations, though the scope (runs of one automation) is implied by the possessive.

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 statement of when to use this versus get_automation_run (single run) or list_automations (automations rather than runs). The agent must infer the selection rule from the resource noun alone.

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

list_automationsList automationsC
Read-onlyIdempotent
Inspect

List automations.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The description adds nothing further — no indication of result volume, pagination, or whether all automations are returned regardless of status.

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

Conciseness3/5

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

A single three-word sentence with zero padding, so nothing is wasted — but the terseness is under-specification rather than efficient communication, since no useful information is front-loaded at all.

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

Completeness2/5

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

The tool is structurally simple (no params, no output schema) and its annotations are rich, but the description still leaves an agent unable to tell whether the call returns every automation, whether results are paginated, or how it differs from list_automation_runs. For a listing endpoint in a very dense sibling namespace, that gap matters.

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 takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies since no parameter semantics are needed.

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

Purpose2/5

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

"List automations" restates the tool name and title verbatim, adding no scope, no mention of filtering or pagination, and no differentiation from the adjacent list_automation_runs or get_automation siblings. The verb+resource is present but conveys nothing beyond the identifier the agent already sees.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no exclusion of alternatives, and no mention of the closely related list_automation_runs or get_automation tools in a sibling set that contains many near-identical list operations. Usage is only inferable from the name itself.

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

list_batchesList batchesA
Read-onlyIdempotent
Inspect

List batches (broadcasts), newest first.

NameRequiredDescriptionDefault
limitNoMax results (default 25, max 100)
cursorNonext_cursor from the previous page
statusNo

TDQS

A3.5/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 useful ordering behavior ("newest first") and the broadcast synonym, but it does not mention pagination behavior or return characteristics 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 definition is a single front-loaded sentence with no wasted language. It states the core purpose and ordering immediately.

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

Completeness3/5

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

For a simple read-only list tool with annotations and a partially documented schema, the description is adequate but incomplete. It does not compensate for the undocumented status parameter or explain what the returned batch summaries include.

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 documents limit and cursor, while status has no description. The description does not add meaning for any parameter, so with 67% schema coverage it leaves the status filter under-specified.

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

Purpose4/5

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

The description gives a clear verb and resource: "List batches (broadcasts), newest first." It adds the synonym "broadcasts" and ordering, which helps distinguish it from single-batch tools like get_batch, though it does not explicitly name a sibling alternative.

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

Usage Guidelines3/5

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

Usage is implied by "List batches" and the "newest first" ordering, but there is no explicit guidance on when to use this instead of get_batch or list_batch_recipients. No exclusions or prerequisites are stated.

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

list_batch_recipientsList batch recipientsB
Read-onlyIdempotent
Inspect

List a batch's recipients with each one's status.

NameRequiredDescriptionDefault
idYesBatch id
limitNoMax results (default 25, max 100)
cursorNonext_cursor from the previous page
statusNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The description adds only the mild disclosure that per-recipient status is included; it says nothing about pagination behavior, ordering, or how many recipients a batch may contain, which matters for a list endpoint.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, but it is arguably over-trimmed: the space saved could have carried a 'use X to do Y' clause that the agent actually needs.

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

Completeness3/5

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

With no output schema, the description at least indicates what a row contains (recipient + status), and limit/cursor are covered by the schema. But for a paginated list tool in a large batch-oriented sibling set, missing pagination guidance, the meaning of the status filter, and differentiation from get_batch_results leaves clear gaps.

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

Parameters3/5

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

Schema coverage is 75%, so the schema documents id, limit (default 25, max 100) and cursor; the baseline is therefore 3. The description adds no parameter meaning, and the undocumented 'status' parameter is ambiguous — it could be a filter, yet the description's 'each one's status' phrase suggests status is returned rather than filtered on.

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

Purpose4/5

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

States a specific verb and resource (list a batch's recipients) plus a return-content hint ('with each one's status'), so an agent knows exactly what it retrieves. It does not, however, distinguish itself from nearby siblings like get_batch_results, get_batch, or list_batches, which an agent must infer from names alone.

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

Usage Guidelines2/5

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

There is no statement of when to use this instead of get_batch_results or list_batches, nor any prerequisite such as the batch needing to exist or be in a terminal state. Usage must be inferred entirely from the name.

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

list_contactsList contactsB
Read-onlyIdempotent
Inspect

List contacts, newest first. Filter by tag, segment_id, list_id, exact phone_number, or a free-text q (name, email, company).

NameRequiredDescriptionDefault
qNoSearch text
tagNo
limitNoMax results (default 25, max 100)
cursorNonext_cursor from the previous page
list_idNo
segment_idNo
phone_numberNoE.164

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered without the description. The description adds the useful 'newest first' ordering but says nothing about pagination flow or result volume beyond what the schema states.

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 verb and ordering, then a compact enumeration of filter modes. No filler and nothing buried.

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

Completeness3/5

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

For a 7-parameter list tool with no output schema, the description never indicates what a result looks like or how pagination terminates, leaving the agent to infer that cursor/next_cursor drives paging. Adequate but with gaps for a list endpoint that will usually be paged.

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

Parameters4/5

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

Schema coverage is only 57%, and the description compensates by explaining filter semantics the schema does not: phone_number is an exact match, q searches name/email/company specifically, and tag/segment_id/list_id are all filters. Only limit/cursor go unmentioned, and those are the two schema entries that are documented.

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

Purpose4/5

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

Names a specific verb and resource plus an ordering guarantee ('newest first'), which an agent can act on directly. It stops short of distinguishing itself from near-siblings such as list_list_contacts or query_audience, so the resource scope is clear but not fully differentiated.

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 statement of when to use this versus alternatives — notably list_list_contacts (which also filters by list_id) or query_audience. The filtering sentence describes inputs, not selection criteria, so usage must be inferred.

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

list_customersList customersC
Read-onlyIdempotent
Inspect

List your customers.

NameRequiredDescriptionDefault
limitNo
cursorNo
external_idNoFind the customer with this external_id (0 or 1 results)

TDQS

C2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and non-open-world, so the safety profile is covered. The description adds nothing beyond that: it does not mention pagination via cursor, result limits, or what the list contains. With the annotation bar already met, the description's contribution is essentially zero.

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

Conciseness2/5

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

Three words and one sentence: efficient in the sense of having no waste, but this is under-specification rather than conciseness. There is nothing to front-load because nothing was provided.

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

Completeness2/5

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

With no output schema, the description is the only place to explain the return shape and the cursor-based pagination contract, and it says none of that. For a list tool with an undocumented paging parameter, an agent cannot tell how to page through results or how to interpret an external_id miss.

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

Parameters2/5

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

Schema description coverage is only 33% — only external_id is documented in the schema, while limit (default 25, max 100) and cursor have no descriptions anywhere. The description does not compensate for this gap; it never mentions limits, paging, or the external_id lookup mode.

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

Purpose2/5

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

"List your customers" essentially restates the tool name and title, adding no scope information (what a customer is versus a contact, whether it is paginated, whether filters exist). It is not misleading, but an agent learns nothing it did not already get from the name.

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

Usage Guidelines2/5

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

There is no when-to-use guidance at all, despite many plausible alternatives in the sibling set (get_customer, list_contacts, query_audience, list_lists). No prerequisites, no exclusions, and no routing hint are given.

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

list_eventsList eventsA
Read-onlyIdempotent
Inspect

List recent events (message.sent/delivered/failed/received, number.purchased/released, ...), newest first.

NameRequiredDescriptionDefault
typeNo
limitNoMax results (default 25, max 100)
cursorNonext_cursor from the previous page

TDQS

A3.7/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 only the newest-first ordering and the event-type vocabulary; it says nothing about how far back 'recent' reaches or how the feed behaves while paging.

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

Conciseness5/5

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

One sentence, front-loaded with the verb and resource, with the ordering constraint appended. 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 no-required-param listing tool with no output schema, the description covers scope, event vocabulary and ordering, with pagination handled by the schema. Missing only retention-window context an agent might want before polling.

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 `type` parameter has no schema description and no enum, so the description's examples (message.sent/delivered/failed/received, number.purchased/released, ...) are the main guide to its values. limit and cursor are already documented in the schema, so no further compensation is needed there.

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

Purpose4/5

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

States a specific verb+resource ('List recent events') and enumerates the event kinds returned plus the ordering. It does not differentiate itself from near-siblings like wait_for_events or list_audit_logs, so it stops short of a 5.

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

Usage Guidelines3/5

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

'Recent events, newest first' implies polling/review usage, but the description never says when to use this instead of wait_for_events, replay_event, or list_audit_logs, and offers no exclusions.

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

list_integrationsList integrationsB
Read-onlyIdempotent
Inspect

The connected tools: status, settings, last sync (found, added, opted out), and their list. No credentials.

NameRequiredDescriptionDefault

No parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds one genuinely useful disclosure beyond that: 'No credentials' tells the agent secrets are omitted from the response, which is not in any structured field. It does not cover pagination, ordering, or whether unconnected integrations appear.

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

Conciseness3/5

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

It is short with no wasted clauses, but it is written as a fragmentary list of nouns rather than a front-loaded statement of what the tool does, and the trailing phrase 'and their list' is clumsy and reads as an afterthought.

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

Completeness3/5

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

With no output schema, the description bears responsibility for describing the return value, and it does partially by naming status, settings, last sync counters, and the absence of credentials. However, the parenthetical '(found, added, opted out)' is cryptic without an output schema, and the overall record shape is left underspecified.

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 takes zero parameters, so there is nothing for the description to disambiguate at the argument level. Baseline 4 applies; the description sensibly spends its words on return content instead of input.

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

Purpose3/5

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

The description implies a listing of connected integrations and names the fields surfaced (status, settings, last sync), but it is a noun phrase with no verb and never states plainly that it returns the collection of connected integrations. It is distinguishable from get_integration only by inference from the word 'list' in the name.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance and no mention of alternatives such as get_integration for a single record, or connect_integration/disconnect_integration/update_integration which mutate the same resource. The agent must infer that this is the enumeration call rather than a detail call.

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

list_list_contactsList list contactsB
Read-onlyIdempotent
Inspect

Page through a list's contacts, most recently added first.

NameRequiredDescriptionDefault
idYesList id
limitNo
cursorNo

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare this as a safe, read-only, idempotent operation. The description adds useful behavioral context beyond that by disclosing pagination and the most-recent-first ordering, though it does not discuss rate limits or return shape.

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 front-loaded and free of waste. It conveys the core action and ordering without unnecessary repetition.

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

Completeness3/5

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

For a simple read-only list tool, the description is minimally adequate: annotations cover safety and the ordering is disclosed. However, with no output schema and weak parameter description coverage, the lack of details about pagination parameters and returned contacts leaves clear gaps.

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

Parameters2/5

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

Schema coverage is only 33%, with just the required id described as 'List id'. The description implies paging via 'Page through' but does not explain limit or cursor semantics, leaving the low-coverage parameters insufficiently compensated.

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

Purpose4/5

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

The description states a specific action on a specific resource: paging through a list's contacts. It also specifies ordering, which distinguishes it somewhat from a generic contacts listing, but it does not explicitly contrast with the sibling list_contacts tool.

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?

Usage is only implied by the phrase 'a list's contacts'. There is no explicit guidance about when to use this instead of list_contacts, get_list, or other list-related siblings, and no prerequisites or exclusions are given.

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

list_listsList listsA
Read-onlyIdempotent
Inspect

List contact lists with their contact counts.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare the operation read-only, idempotent, non-destructive, and closed-world, so the safety profile is covered structurally. The description adds that contact counts accompany each list, which is useful output context beyond the annotations, but it does not discuss ordering, pagination, or return shape.

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 communicates the essential behavior directly.

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

Completeness4/5

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

For a zero-parameter, read-only list tool whose annotations fully cover the safety profile, the description is largely complete: it says what is listed and that counts are included. It could be slightly richer about whether all lists are returned, but no output schema exists and no parameters are present to document.

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 semantics to compensate for. The baseline score for zero parameters applies.

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

Purpose4/5

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

The description states a specific verb and resource: listing contact lists, and adds that contact counts are included. This clearly distinguishes it from single-list retrieval such as get_list and from contact-within-list operations such as list_list_contacts, though it does not name those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the zero-parameter read-only nature: call it when you need to enumerate contact lists. However, the description gives no explicit when-to-use condition, no exclusions, and no routing guidance relative to get_list or list_list_contacts.

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

list_messagesList messagesA
Read-onlyIdempotent
Inspect

List your messages, newest first. Filter by number, direction, status, failure reason, date, batch schedule or customer.

NameRequiredDescriptionDefault
toNoExact destination number (E.164)
tagNoFilter to messages sent with this tag
fromNoExact sending number (E.164)
limitNoMax results (default 25, max 100)
cursorNonext_cursor from the previous page
numberNoFilter to messages to or from this number
statusNo
directionNo
customer_idNoFilter to one customer's messages
schedule_idNoFilter to the occurrences of one recurring schedule (sch_...)
failure_codeNoFilter to messages that failed for this reason (the `failure.code` on a message)
created_afterNoInclusive. ISO timestamp or epoch ms.
blocked_reasonNoBlocked messages with this reason. Implies status=blocked.
created_beforeNoExclusive. ISO timestamp or epoch ms.

TDQS

A3.6/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 useful sort order ('newest first') but says nothing about pagination depth, default page size, or what a result set contains beyond the filters.

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 ordering guarantee is front-loaded before the filter list, which is exactly the priority an agent needs.

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 14-parameter, zero-required, read-only listing tool with no output schema, the description plus annotations and a well-documented schema cover enough to call it correctly. The gap is pagination and result-shape expectations, which the schema's cursor/limit hints only partially fill.

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 86%, so the schema already carries per-parameter semantics, and the baseline of 3 applies. The description does summarize the filterable axes (number, direction, status, failure reason, date, schedule, customer) but omits limit/cursor and adds no syntax or interaction details such as blocked_reason implying status=blocked.

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

Purpose4/5

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

States a specific verb and resource ('List your messages') plus an ordering guarantee ('newest first'), which an agent can't infer from the name alone. It does not explicitly distinguish itself from the get_message sibling, so it stops short of a 5.

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

Usage Guidelines3/5

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

The enumeration of filter axes implies when this tool is the right choice ('I need messages matching X'), but it never states exclusions or names alternatives such as get_message for a single message or list_scheduled_messages for pending sends. Usage is inferable rather than directed.

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

list_number_poolsList number poolsB
Read-onlyIdempotent
Inspect

List sender pools.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

The annotations already supply the key behavioral facts: readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false. The description adds no further behavioral context such as pagination, authentication requirements, or return shape.

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 phrase with no wasted words. For a zero-parameter list tool, this is appropriately concise.

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

Completeness3/5

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

Because the tool has no parameters and rich read-only annotations, invocation is straightforward. However, the description never clarifies whether 'sender pools' is synonymous with number pools or what the list contains, leaving selection among related pool and number tools uncertain.

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 the baseline is 4. There are no parameter semantics for the description to clarify.

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

Purpose4/5

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

States a clear verb and resource: 'List sender pools,' with the title confirming these are number pools. It is understandable but does not differentiate itself from related sibling tools such as list_numbers or get_number_pool.

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?

Provides no when-to-use guidance, no exclusions, and no alternative tool to prefer for filtering or retrieving a single pool. The agent must infer usage entirely from the name and title.

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

list_number_requestsList number requestsC
Read-onlyIdempotent
Inspect

Open short-code and toll-free requests.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds one behavioral detail beyond annotations — that results are scoped to 'Open' requests — but it does not clarify pagination, ordering, or what a request record contains. With annotations doing most of the work, this is a minimal but acceptable addition.

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

Conciseness3/5

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

It is extremely short with no wasted words, but the sentence is a noun-phrase fragment rather than a front-loaded verb+resource statement. Brevity here edges toward under-specification rather than crispness.

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

Completeness2/5

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

There is no output schema, and there are no parameters, so the description is the only place an agent can learn what a 'request' includes, whether results are paginated, or how they are ordered. It provides none of that, leaving the agent with an incomplete picture of a list operation's behavior.

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 takes zero parameters, so there are no parameter semantics for the description to explain. The baseline of 4 applies.

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

Purpose3/5

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

The phrase 'short-code and toll-free requests' identifies the resource being listed, which distinguishes it somewhat from siblings like list_numbers and list_toll_free_verifications. However, the fragment lacks an explicit verb; 'Open' could describe a status filter or be part of the noun phrase, so an agent cannot be fully certain this is a read/list operation from the description alone.

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

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 call this versus related tools such as list_toll_free_verifications, list_registrations, or get_registration. The agent must infer usage entirely from the name and title.

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

list_numbersList numbersC
Read-onlyIdempotent
Inspect

List the phone numbers on your account.

NameRequiredDescriptionDefault
qNoMatches digits of the number or its label
tagNo
modeNo
poolNoPool id
customer_idNoOnly this customer's numbers

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the agent knows this is a safe read operation. The description adds the scoping detail 'on your account' but does not cover return format, pagination, rate limits, or behavior when filters are applied.

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

Conciseness4/5

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

A single sentence with no wasted words, front-loaded with the core action and resource. It is efficient, though extremely terse for a tool with five optional filters and many siblings.

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

Completeness2/5

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

For a list tool with five optional filters, many sibling list/search tools, and no output schema, the description is too thin. It omits return structure, default ordering, pagination behavior, and how filters combine, leaving the agent without enough context to call it correctly beyond a basic listing.

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 60% (q, pool, and customer_id have descriptions; tag and mode do not). The description itself mentions no parameters and adds no meaning beyond the schema, leaving tag and mode entirely undocumented across both the schema and the description.

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

Purpose4/5

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

States a specific verb ('List') and resource ('phone numbers') with scope ('on your account'), which distinguishes it from search_available_numbers (which finds numbers to purchase). However, it does not explicitly name any sibling tool or clarify how it differs from get_number or list_number_pools.

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?

Provides no when-to-use guidance, no alternatives, and no prerequisites. The implied usage is to view owned numbers, but the description does not explain when to use this instead of get_number (for a single number) or search_available_numbers (to find new numbers).

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

list_opt_outsList opt outsB
Read-onlyIdempotent
Inspect

List opted-out numbers (the suppression list).

NameRequiredDescriptionDefault
limitNoMax results (default 25, max 100)
cursorNonext_cursor from the previous page

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds only the "suppression list" framing and says nothing about pagination behavior or what a returned opt-out record contains, so it contributes modest context beyond structured fields.

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

Conciseness4/5

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

A single short sentence, front-loaded with the verb and resource, with no filler. It is appropriately sized for a simple read tool, though it borders on under-specified rather than tight.

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

Completeness3/5

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

For a read-only list tool with full annotation coverage and a fully documented two-parameter schema, the basics are covered. However, there is no output schema, and the description does not indicate what fields an opt-out entry contains or how pagination terminates, leaving minor gaps.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already documents limit (default 25, max 100) and cursor as the next_cursor from the prior page. The description adds nothing about these parameters, which is acceptable given the schema's completeness but is not additive.

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

Purpose4/5

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

The description gives a specific verb and resource ("List opted-out numbers") and adds a clarifying synonym ("the suppression list") so an agent can map it to the right concept. It is distinguishable from siblings like import_opt_outs and set_consent, though it does not name them explicitly.

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 versus related tools such as import_opt_outs, export_consent, or get_consent. The agent must infer that this is the read path for the suppression list from the name alone.

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

list_registrationsList registrationsA
Read-onlyIdempotent
Inspect

List 10DLC brand and campaign registrations and their status. Marketing from a local number needs an approved one.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds only that status is returned; it says nothing about pagination, result volume, or whether pending/draft registrations are included.

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

Conciseness4/5

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

Two short sentences, front-loaded with the core purpose and no filler. The trailing clause 'an approved one' is slightly elliptical — it relies on the reader resolving 'one' to 'registration' — but the overall length is well matched to a zero-parameter list tool.

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 no-param, read-only list tool with no output schema and full annotation coverage, the description supplies enough to call it correctly and understand why it matters. The remaining gap is result shape (does it include submission status history?), which is minor at this 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?

The tool takes no parameters, so there is no parameter semantics to document and the baseline of 4 applies. The description does not claim any filtering or pagination inputs, which is consistent with the empty schema.

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

Purpose4/5

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

States a concrete verb and resource: lists 10DLC brand and campaign registrations plus their approval status. It does not differentiate itself from nearby siblings such as get_registration, list_registration_submissions, or list_toll_free_verifications, so the agent must infer the scope difference.

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 second sentence ('Marketing from a local number needs an approved one') implies the motivation — check approval status before sending — but never states an explicit when-to-use rule or names an alternative tool. Usage is inferable rather than directed.

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

list_registration_submissionsList registration submissionsB
Read-onlyIdempotent
Inspect

The filed copies of a 10DLC registration, newest first.

NameRequiredDescriptionDefault
idYesRegistration id

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds the 'newest first' ordering behavior, which is useful, but does not mention pagination, permissions, or response shape.

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

Conciseness5/5

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

A single short sentence with no wasted words. It is front-loaded with the resource and ends with the ordering behavior.

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 one-parameter list endpoint with no output schema, the description states what is returned and in what order, but omits pagination behavior and result shape. It is minimally adequate but incomplete for an agent needing to understand the response.

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

Parameters3/5

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

Schema description coverage is 100%, with the single id parameter documented as 'Registration id'. The description reinforces that the id scopes a registration, but adds no format or syntactic detail beyond the schema.

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

Purpose4/5

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

The description identifies a specific resource: filed copies of a 10DLC registration, returned newest first. It distinguishes this from generic registration lookups through 'filed copies' and ordering, though it uses a noun phrase rather than a clear verb.

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

Usage Guidelines2/5

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

It gives no guidance on when to use this tool versus siblings like list_registrations or get_registration. The only usage context is implied by the required registration id.

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

list_scheduled_messagesList scheduled messagesA
Read-onlyIdempotent
Inspect

List single messages scheduled for later and not yet sent.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is clear. The description adds the useful filter that results are limited to messages scheduled for later and not yet sent, but it does not mention pagination, ordering, or return shape.

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 wasted words. It immediately states the list scope and the key filtering condition.

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

Completeness4/5

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

For a zero-parameter list tool with rich read-only annotations, the description is mostly complete: it says what is listed and that results are unsent. It could add a brief note about pagination or result ordering, but no output schema exists and the core behavior is adequately conveyed.

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 parameter semantics are not applicable and the baseline is 4. The description does not need to explain any arguments and does not introduce unnecessary parameter-like details.

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

Purpose4/5

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

The description gives a specific verb and resource: it lists scheduled messages that have not yet been sent. It clearly distinguishes the scope from all messages or schedules, though it does not explicitly name sibling tools like list_messages or list_schedules.

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 implies usage by saying it lists unsent scheduled messages, but it gives no explicit guidance on when to use this versus list_messages, list_schedules, or get_scheduled_message. No exclusions or alternatives are mentioned.

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

list_schedulesList schedulesC
Read-onlyIdempotent
Inspect

List recurring schedules.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that: no pagination behavior, ordering, result volume, or whether inactive schedules are included.

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

Conciseness3/5

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

It is a single four-word sentence with no padding, which is good, but the brevity comes from under-specification rather than from a tight, informative statement.

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

Completeness3/5

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

With no parameters, no output schema, and rich annotations, the bar is low and the description clears the minimum. However, for a list endpoint whose siblings likely paginate, the absence of any note about pagination, filtering, or return shape leaves a real gap.

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

Parameters4/5

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

The tool takes zero parameters and the schema is empty, so there is nothing for the description to explain. Baseline of 4 applies for a parameterless tool.

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

Purpose3/5

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

The description names a verb and resource ("List recurring schedules"), so the operation is identifiable, but it is essentially a restatement of the name and title. It does not distinguish this from siblings such as list_scheduled_messages or get_schedule, nor does it say what a 'schedule' is in this product context.

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 call this versus get_schedule, create_schedule, update_schedule, delete_schedule, or list_scheduled_messages. The agent must infer the list-vs-get split entirely from the tool names.

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

list_segmentsList segmentsC
Read-onlyIdempotent
Inspect

List saved segments.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety is fully covered by structured data. The description adds nothing beyond that — not whether results are paginated, what fields segments carry, or whether archived/deleted segments appear.

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

Conciseness3/5

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

A single four-word sentence with no filler, so nothing is wasted. However, it is under-specified rather than concise — brevity comes at the cost of any useful context.

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 zero-parameter list tool with full annotation coverage and no output schema, the description is minimally sufficient to invoke it. The missing pieces — pagination behavior, ordering, and relationship to the segment search/preview siblings — are what an agent would still need.

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 takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The word 'saved' is the only semantic signal, hinting these are persisted segments.

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

Purpose3/5

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

States a verb (List) and a resource (segments), which is enough to separate it from create_segment or delete_segment. But 'saved segments' is never elaborated, and it gives no hint of how it differs from get_segment, preview_segment, or query_audience, which also deal with segments.

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 at all on when to call this versus get_segment (single lookup), preview_segment, or query_audience. No mention of pagination, sorting, or result limits that would tell an agent how to consume the list.

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

list_templatesList templatesC
Read-onlyIdempotent
Inspect

List message templates.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds nothing beyond that — no mention of pagination, ordering, or volume of results, which is the only behavior an agent would still need for a list tool.

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

Conciseness4/5

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

A single four-word sentence with no filler, front-loading the verb and resource. It is efficient, though its brevity reflects under-specification rather than disciplined editing.

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

Completeness3/5

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

With no input parameters, no output schema, and a full annotation set, the definition is close to complete by default. The remaining gap is that an agent cannot tell whether the listing is paginated, capped, or filtered, and the description does nothing to close it.

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 takes zero parameters, so there is no parameter semantics to explain and the baseline is 4. The description neither helps nor hurts here.

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

Purpose3/5

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

The verb 'List' and resource 'message templates' are stated, but the sentence is essentially a restatement of the tool name and title with only the qualifier 'message' added. It doesn't differentiate this from sibling read tools like get_template or list_lists, leaving the agent to infer scope from the 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 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 versus get_template, search_available_numbers, or any other listing tool, nor any mention of prerequisites or result limits. The agent must guess the intended context.

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

list_toll_free_verificationsList toll free verificationsB
Read-onlyIdempotent
Inspect

List toll-free verifications and their status (draft, in_review with our team, submitted to the carriers, verified, rejected). A toll-free number texts the public only once verified.

NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous page
statusNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description earns credit for adding domain context beyond structured fields: it glosses each status ('in_review with our team', 'submitted to the carriers') and states the consequence rule that a toll-free number cannot text the public until verified.

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

Conciseness4/5

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

Two sentences, front-loaded with the action and resource, and the parenthetical status list is compact rather than redundant because it expands the enum meanings. Slight bloat from re-listing enum values already in the schema.

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

Completeness3/5

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

There is no output schema, so the description should say at least roughly what a returned verification record contains or how paging works; it only implies a status field. Adequate for routing, but thin for building a correct paginated call.

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

Parameters2/5

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

Schema coverage is only 33% (only cursor is documented), so the description needs to compensate. It adds meaning for the status values but says nothing about limit, the default of 25, the 100 cap, or pagination semantics, leaving two of three parameters unexplained across both sources.

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?

Specific verb (list) plus resource (toll-free verifications) and an enumeration of the statuses the records can carry. It is distinguishable from the singular get_toll_free_verification by the plural 'list', though the description never says so explicitly.

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

Usage Guidelines3/5

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

Listing implies browsing/enumerating, but the description never states when to use this versus get_toll_free_verification for a single record, nor how to combine the status filter with paging. Usage must be inferred from the name.

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

list_topicsList topicsB
Read-onlyIdempotent
Inspect

List subscription topics.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds nothing beyond the name: no pagination behavior, no result ordering, no note that the list is account-scoped and closed-world.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. It is efficiently sized, though efficiency here edges toward under-specification rather than disciplined brevity.

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

Completeness3/5

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

With no output schema and no parameters, the description is the only place to explain what a 'topic' contains and how results are bounded (pagination, ordering, account scope). It leaves those gaps, so an agent can call it correctly but cannot predict the response or distinguish its output from get_contact_topics.

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 takes zero parameters, so there is no parameter semantics to explain; the baseline of 4 applies. Nothing in the description misleads about inputs.

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

Purpose4/5

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

The description states a specific verb (List) and resource (subscription topics), which is enough to separate it from get_topic, create_topic, delete_topic, and update_topic. It stops short of explicitly differentiating from get_contact_topics, which is the closest ambiguous sibling.

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 versus get_contact_topics (per-contact topic subscriptions) or list_segments. The 'List' verb implies a collection read, but no conditions, prerequisites, or exclusions are stated.

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

list_webhook_deliveriesList webhook deliveriesC
Read-onlyIdempotent
Inspect

Delivery attempts to your webhook endpoints, with response status codes.

NameRequiredDescriptionDefault
limitNoMax results (default 25, max 100)
cursorNonext_cursor from the previous page
event_idNoEvery attempt for one event
endpoint_idNoOne endpoint (we_...), or status_callback for the attempts to send messages' own status callbacks.

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered elsewhere. The description's only added signal is that results carry response status codes; it says nothing about ordering, retention window, or how pagination behaves.

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

Conciseness3/5

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

It is a single short clause with no wasted words, but it reads as an under-specified label rather than a front-loaded explanation. Brevity here comes at the cost of content rather than from efficiency.

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

Completeness2/5

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

For a four-parameter listing tool with no output schema, the description should at minimum tell the agent when to pick this over list_webhooks or replay_failed_webhooks. Annotations and schema carry the mechanics, but the selection and return-content story is incomplete.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (limit, cursor, event_id, endpoint_id) are already documented, including the useful 'status_callback' special value for endpoint_id. The description adds no parameter meaning beyond that, so the baseline 3 applies.

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

Purpose3/5

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

The fragment identifies a specific resource — delivery attempts to webhook endpoints — and adds that response status codes are included. But it is a noun phrase with no verb and no scope statement, and it does nothing to distinguish this from siblings like list_webhooks, get_webhook, or replay_failed_webhooks.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of the relationship to replay_failed_webhooks or list_webhooks, and no note about pagination workflow despite a cursor parameter. The agent must infer everything about tool selection.

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

list_webhooksList webhooksB
Read-onlyIdempotent
Inspect

List webhook endpoints.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

The annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered without the description. The description adds nothing further — no pagination behavior, no indication of what fields each listed webhook contains, no note about result ordering or limits.

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

Conciseness4/5

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

A single four-word sentence with no filler and the action front-loaded. It is efficient but borders on under-specification for a tool that sits among several similarly named webhook operations.

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

Completeness3/5

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

With no parameters, no output schema, and rich annotations, the definition is minimally sufficient to call the tool. Yet nothing tells the agent what the returned list looks like or how this relates to the sibling webhook read tools, leaving a real gap for a simple but crowded namespace.

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 takes zero parameters, so there is nothing for the description to disambiguate against the empty input schema. Baseline 4 applies; only the absence of any hint about whether filtering or paging is possible keeps it off a 5.

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

Purpose4/5

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

The description gives a clear verb+resource ('List webhook endpoints') that an agent can map directly to the tool's effect. It does not, however, distinguish this from nearby siblings such as get_webhook, list_webhook_deliveries, or create_webhook, so the boundary between similar-sounding tools is left to the agent.

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

Usage Guidelines2/5

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

There is no guidance on when to choose this over get_webhook (single webhook detail) or list_webhook_deliveries (delivery history). The description states what the tool does but supplies no selection criteria or prerequisites.

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

lookup_phoneLookup phoneA
Read-onlyIdempotent
Inspect

Look up line type (mobile, landline, VoIP) and carrier for any US/Canada number.

NameRequiredDescriptionDefault
phoneYesE.164 number

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds the useful geographic constraint (US/Canada only) but says nothing about behavior on invalid/unparseable numbers, rate limits, or whether a miss returns an error or an empty result.

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, front-loaded with the verb and the returned fields, with zero filler. Nothing could be removed without losing 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 one-parameter read tool with rich annotations and no output schema, the description names the return fields (line type, carrier) and the region, which covers most of what an agent needs. It stops short of describing miss/error behavior, the only real remaining 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 coverage is 100% for the single parameter, so the schema already documents 'phone' as an E.164 string; baseline is 3. The description contributes one extra semantic constraint — the number must be US/Canada — which slightly narrows the seemingly global E.164 format in the schema.

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

Purpose4/5

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

States a specific verb (look up) and specific returned data (line type, carrier) scoped to US/Canada numbers, so the resource is unambiguous. It does not differentiate itself from siblings such as get_number or search_available_numbers, which keeps it from a 5.

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

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for any US/Canada number' implies the applicable context and geographic scope, but there is no explicit when-to-use, when-not-to-use, or pointer to an alternative (e.g. get_number for owned-number metadata). Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pause_automationPause automationA
Destructive
Inspect

Pause an automation: no new runs start, and runs in progress wait where they are until it is activated again.

NameRequiredDescriptionDefault
idYesAutomation id

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag readOnlyHint=false and destructiveHint=true, so the risk profile is given. The description earns credit for the one thing annotations cannot convey — that in-progress runs are suspended in place rather than killed — but it omits auth/ownership requirements, idempotency of repeated pauses, and whether the pause is reversible only via activate_automation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and resource, then the consequence. No filler and nothing buried.

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 one-parameter state-change tool with annotations covering safety and no output schema, this is close to complete. Minor gaps remain around return value and error behavior on an already-paused automation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, so the schema already carries the parameter contract. The description adds no syntax, format, or sourcing guidance for the automation id, which is fine at baseline but not more than baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (pause) plus resource (automation), and it explains the operational effect: no new runs start and in-flight runs are held. That working definition separates it from delete_automation and cancel_automation_run without naming them, though it never explicitly points at a sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the semantic difference from activate/delete/cancel. There is no explicit "use this instead of X when..." routing, no precondition such as needing the automation to currently be active, and no statement on what happens if it is already paused.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pause_batchPause batchC
Destructive
Inspect

Pause a sending or scheduled batch.

NameRequiredDescriptionDefault
idYesBatch id

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the description's main added fact is that both 'sending' and 'scheduled' batches are valid targets. It says nothing about what happens to in-flight messages, whether the pause is reversible via resume_batch, or whether repeating the call is safe — gaps that matter for a non-idempotent destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with zero filler. It is efficient, though the brevity reflects omitted content rather than tight editing of rich content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent state-change tool with no output schema, the description should say what a successful pause does to pending recipients and whether it can be undone. Neither is covered, leaving the agent to guess at consequences before invoking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, so the schema already documents 'id' as the batch id. The description adds no format, prefix, or lookup hints beyond that, which is the expected baseline when the schema carries the semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Pause) and resource (batch) plus a state qualifier ('sending or scheduled'), which tells the agent the operation applies to in-flight and queued batches. It does not distinguish itself from the closely related siblings resume_batch, cancel_batch, and retry_batch.

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 pause versus cancel or retry a batch, and no mention of prerequisites or what state the batch must be in. The agent must infer the choice from the sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_importPlan importA
Read-onlyIdempotent
Inspect

Find out where an audience is and the ways to bring it in. Without source: questions to ask the person (where their people are, which group, what they can sign in to, whether consent was recorded, once or kept in sync) and the kinds of source known. With source (their words, e.g. "Mixpanel", "Shopify", "our Postgres users table", "a Google Sheet"): the ways in, best first, each with steps and a console link: an integration already syncing it, another connected tool that can read it, a 6-hourly sync connected with their key here or in the console, a push to an ingest URL, a script with a key from their environment, an export, or a CSV upload. Changes nothing.

NameRequiredDescriptionDefault
sourceNoWhere the people are, in your words. Omit to get the questions first.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and the description usefully reinforces this with 'Changes nothing.' It also discloses what the agent gets back — ranked methods each with steps and a console link — which annotations alone would not convey. No contradictions with the declared 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, but the second sentence is a long run-on that crams parenthetical question lists and a seven-item enumeration of import paths into prose. The content is useful, yet the lack of structure (bullets or separation of the two modes) makes it harder to parse than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations beyond safety hints, the description carries responsibility for describing results, and it does so adequately: questions in one mode, ranked import methods with steps and a console link in the other. Some uncertainty remains about result shape and ranking criteria, but an agent can call it correctly with what is given.

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% and the single optional parameter is fully documented there, so the baseline is 3. The description earns a bump by adding meaning beyond the schema: it gives concrete example source strings ('Mixpanel', 'Shopify', 'our Postgres users table', 'a Google Sheet') and states what happens when it is omitted, clarifying the accepted input granularity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (an audience/its source) and the two modes of the tool (discovery questions vs. ranked import paths), and the closing line 'Changes nothing' signals this is advisory rather than an execution tool. However, it never explicitly contrasts itself with execution siblings like import_contacts or connect_integration, so the boundary is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit conditional: 'Without source' returns questions to ask the person, 'With source' returns concrete import paths best-first. That is clear guidance on when each mode applies. It stops short of naming alternatives (e.g., use import_contacts to actually perform the import), so the agent must infer the handoff.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_segmentPreview segmentA
Read-onlyIdempotent
Inspect

Count the contacts a segment matches right now and how many a broadcast would reach (opted-out contacts removed, and with topic_id those unsubscribed from it).

NameRequiredDescriptionDefault
idYesSegment id
topic_idNoCount only contacts subscribed to this topic

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds real behavior beyond them: opt-outs are removed from the reach count, and topic_id further excludes contacts unsubscribed from that topic, which is exactly the kind of counting semantics an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with a parenthetical that carries the only nuance needed. No filler, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully conveys that two counts come back (segment match count and broadcast reach) and how each is filtered. Return field names and error conditions for an invalid id are unstated, but the essentials for calling it correctly are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description goes slightly beyond the schema by explaining that the topic filter also strips contacts unsubscribed from that topic, not just non-subscribers. The required id parameter is still only described by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (count) and resource (contacts matched by a segment), plus the second number returned (broadcast reach). It does not explicitly differentiate itself from the similar sibling query_audience, but the counting-only scope is clear from the wording.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'right now' suggests a live, non-cached pre-send check and the topic_id clause hints at a topic-scoped send audience. There is no explicit when-to-use/when-not guidance versus get_segment or query_audience.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

purchase_numberPurchase numberA
Destructive
Inspect

Buy a phone number for your account (free sandbox numbers with test keys). Live numbers are billed monthly.

NameRequiredDescriptionDefault
customer_idNoOptional: assign the number to one of your customers
phone_numberYes
idempotency_keyNoOptional. Retries are already safe: the same call with the same inputs within 10 minutes is done once and answers with the first result. Pass your own key to dedupe across a longer gap, or a new one to repeat an identical call on purpose.
registration_idNoOptional (live numbers): the registration this number should send for. Without it the number follows your account's registration.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the non-obvious billing behavior (monthly charge for live numbers) but says nothing about irreversibility, whether the number is immediately active, or that release_number is the undo path.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the primary action stated first and the cost caveat second. Every clause carries information an agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world purchase with no output schema, the description should say what comes back (the number record/id) and what happens on failure or when the number is unavailable. Billing is covered, but the outcome shape and irreversibility are left to inference.

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 75% and the schema already documents customer_id, idempotency_key, and registration_id in detail. The description's sandbox/live framing loosely aligns with the registration_id note but adds no new parameter-level meaning. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Buy a phone number for your account") and clarifies the sandbox-vs-live distinction. It does not, however, name the adjacent siblings (search_available_numbers, bulk_purchase_numbers, assign_number_to_customer) that an agent must choose between.

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 parenthetical about free sandbox numbers with test keys and the note that live numbers are billed monthly give real decision context (cost implication of going live). But there is no explicit when-to-use/when-not, and no routing to bulk_purchase_numbers for multiple numbers or search_available_numbers to find a purchasable number first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_audienceQuery audienceA
Destructive
Inspect

Count a cohort without saving anything (nothing appears in the console): run up to 10 segment rules now and get the counts (matched, opted out, eligible to text) and the first contacts. Examples: replied in the last 7 days (last_reply_at after 7d); got a batch and did not reply (batch sent, and batch replied with is_not); started checkout but never purchased (event exists, event not_exists); VIPs not texted in 30 days. Same rule fields as a saved segment. Everyone eligible to text: one rule, status is subscribed.

NameRequiredDescriptionDefault
limitNoHow many matching contacts to return
matchNoall
rulesNo
topic_idNoTopic id or name: eligible also removes contacts unsubscribed from it

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is rich on its own terms: it caps rules at 10, discloses that only the newest 20,000 events are searched, and explains that relative windows like 7d are re-read on each use (hence non-idempotent). But it insists the tool 'saves nothing' and just counts, while the annotations declare readOnlyHint=false and destructiveHint=true, so an agent gets conflicting signals about side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The no-saving constraint is front-loaded in the first clause, followed by the rule cap and return shape, then examples. It is dense but every clause carries information; the only mild bloat is the parenthetical console remark.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description correctly names what comes back (matched, opted out, eligible-to-text counts plus the first contacts). Gaps remain around the return structure (single object vs. list), why the tool is flagged destructive, and how it relates to preview_segment, but for a filtered-count tool it is largely sufficient.

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 50%, so the description must compensate, and it does — the worked examples spell out the rule recipe pattern (field + op + value) and show edge cases such as 'batch replied with is_not' and 'event not_exists'. The 'everyone eligible to text' example even teaches the topic_id/status interaction indirectly, though limit and match are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource ('Count a cohort without saving anything') and explicitly contrasts itself with a saved segment ('nothing appears in the console', 'Same rule fields as a saved segment'), which is the key distinction an agent needs. It never names the sibling tool 'preview_segment', however, so the agent cannot tell from this text how the two audience-previewing tools differ.

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?

Four concrete, common scenarios (replied in the last 7 days; got a batch and did not reply; started checkout but never purchased; VIPs not texted in 30 days) show clearly when this tool is the right call. What is missing is any negative guidance: when to use preview_segment, create_segment, or list_contacts instead, and whether prerequisites exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redact_messageRedact messageA
Destructive
Inspect

Empty a finished message's text and media everywhere it is kept, keeping its status, price and timeline (redacted_at is set). Cannot be undone.

NameRequiredDescriptionDefault
idYesMessage id (msg_...)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false, so the safety profile is covered; the description earns credit for going beyond them by disclosing blast radius ("everywhere it is kept"), exactly what is destroyed (text and media) versus preserved (status, price, timeline, redacted_at), and irreversibility. It does not state permission requirements or what happens if the message is not yet finished.

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 front-loaded sentence with no filler: the destruct scope comes first, the preserved fields second, irreversibility last. Every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one fully described parameter, no output schema, and annotations covering the safety profile, the description supplies the essential scope and irreversibility. It stops short of covering edge cases an agent might hit — redacting an unsent/in-progress message, or whether a second call on an already-redacted message errors.

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 single parameter is fully documented in the schema (msg_... format), so per the high-coverage baseline a 3 applies. The description adds no meaning about the id beyond what the schema already gives.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb (empty/redact) and a specific resource (a finished message's text and media), and adds the retention rule (status, price, timeline kept, redacted_at set) that an agent needs to distinguish it from a plain delete. It never names delete_message explicitly, so the differentiation from that close sibling is inferential 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "a finished message's" implies a precondition (message must be finished/sent) and the retention clause hints this is the choice over delete_message, but neither the when-to-use condition nor the when-not-to-use / alternative is stated. An agent must infer that delete_message is the alternative for full removal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

release_numberRelease numberB
DestructiveIdempotent
Inspect

Release a number you own. It cannot be got back.

NameRequiredDescriptionDefault
phone_numberYesE.164 number you own

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the irreversibility warning ('It cannot be got back') largely restates structured data. The description adds no context beyond that, such as whether release is immediate, what happens to messages or assignments tied to the number, or any billing/verification impact.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with the destructive warning placed prominently rather than buried. The second sentence is partly redundant with destructiveHint but earns its place as an explicit irreversibility warning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, irreversible, single-parameter tool this is the minimum viable description. It covers the action and irreversibility but not timing, side effects on related resources, or what the response contains (no output schema exists to cover that instead).

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 is fully documented ('E.164 number you own'), so the schema carries the load. The description only echoes the ownership constraint and adds no format or validation detail beyond it.

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?

Specific verb + resource: 'Release a number you own' tells an agent exactly what is being acted on and that ownership is a precondition. It does not explicitly distinguish itself from near-siblings such as delete_number_pool or assign_number_to_customer, which is why it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus alternatives, nor when not to use it. The only implied guidance is the ownership precondition embedded in 'a number you own'; nothing routes the agent between this and other number-lifecycle tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_from_listRemove from listB
DestructiveIdempotent
Inspect

Remove contacts from a list (they stay contacts).

NameRequiredDescriptionDefault
idYesList id
contact_idsNo
phone_numbersNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=false, lowering the bar. The description adds the valuable clarification that the contact record survives, but it does not mention that removal accepts phone numbers (possibly non-contact identifiers) or what happens if an entry is not in the list — meaningful gaps for a destructive membership mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence, front-loaded, with zero filler. Its brevity is appropriate in form even though content coverage is thin.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, multi-parameter mutation with no output schema and low schema coverage, the description leaves the phone_numbers path, partial-failure behavior, and list-vs-contact semantics unexplored. The essentials are only partially covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only 'id' is described as List id). The description says nothing about contact_ids or phone_numbers, so an agent cannot tell from either source that removal can target raw phone numbers as well as contact IDs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (remove contacts from a list) and adds the key qualifier that contacts persist, which distinguishes this from delete_contact. It does not name a sibling explicitly, but the effect is clear enough for an agent to differentiate.

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 parenthetical implies 'use this when you want to unassign rather than delete', but there is no explicit when-to-use/when-not statement or reference to add_to_list or delete_list as alternatives. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replay_eventReplay eventB
Destructive
Inspect

Send an event again to one webhook endpoint (after fixing the receiver).

NameRequiredDescriptionDefault
idYesEvent id
endpoint_idYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the agent knows this triggers an external, non-idempotent send. The description adds the useful 'after fixing the receiver' framing but never explains what the destructive flag means here (e.g., a new outbound delivery to a live endpoint) or whether the prior delivery record is replaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the key scope ('one webhook endpoint') stated immediately. The parenthetical earns its place as the only usage hint, and there is 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?

A destructive, non-idempotent mutation with no output schema needs a bit more: what the call returns, whether the event must still be within a retention window, and what happens if endpoint_id no longer exists. Annotations cover safety, so the gap is moderate rather than critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% — endpoint_id has no documented description. The sentence does partially compensate by implying id is the event being resent and endpoint_id is the destination endpoint, but it adds no format, prefix, or lookup guidance beyond that inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: re-send an event to a single webhook endpoint. The 'one webhook endpoint' scope implicitly separates it from the bulk sibling replay_failed_webhooks, though that sibling is never named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(after fixing the receiver)' gives a clear precondition — use this once the receiving endpoint is repaired. It does not name alternatives such as replay_failed_webhooks (bulk) or test_webhook (verification), so the agent must infer when to prefer this over them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replay_failed_webhooksReplay failed webhooksA
Destructive
Inspect

Re-send every event that failed to reach a webhook endpoint in a window (default the last 24 hours, up to 7 days), after fixing the receiver.

NameRequiredDescriptionDefault
idYesWebhook endpoint id
sinceNoISO date or epoch milliseconds. Default: 24 hours before `until`.
untilNoISO date or epoch milliseconds. Default: now.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the risk profile is covered. The description adds the useful precondition ('after fixing the receiver') and the 7-day lookback bound, but says nothing about duplicate delivery to the receiver or what the operation returns/whether it is rate-limited.

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 compact sentence with the scope and the operational precondition front-loaded; nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with no output schema, the description covers the trigger condition and window but leaves the agent guessing about the result (how many events replayed, failure handling) and about duplicate-delivery side effects.

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 id, since, and until. The description contributes one extra piece of semantics not in the schema — the maximum 7-day window — which is the baseline-plus case for a fully documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('re-send') plus resource ('every event that failed to reach a webhook endpoint') plus scoping window. It is distinguishable from list_webhook_deliveries or test_webhook, but it never differentiates itself from the sibling replay_event, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'after fixing the receiver' gives one precondition, and the window defaults are stated, but there is no explicit guidance on when to prefer this over replay_event, test_webhook, or list_webhook_deliveries to inspect failures first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_short_codeRequest short codeA
Destructive
Inspect

Ask our team for a short code (or a toll-free number they set up). Provisions nothing by itself; carriers take 8-12 weeks to approve a short code.

NameRequiredDescriptionDefault
typeYes
use_caseYesWhat you will send, in a sentence or two.
business_nameYes
monthly_volumeYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=false and idempotentHint=false, so the description earns credit for adding genuinely new facts: nothing is provisioned immediately and carrier approval takes 8-12 weeks. That latency/human-in-the-loop disclosure is exactly the kind of context annotations cannot express. It does not, however, say what happens after submission (request ID? where to track status?) or address why a non-provisioning request carries destructiveHint=true.

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 constraint (nothing provisioned, 8-12 week carrier approval) front-loaded. No filler, no restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and four required parameters at 25% coverage, the description should say what the call returns and how to check approval status. It covers the single most important behavioral fact (long async approval) but leaves the post-call path and most parameter expectations to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% — just use_case has a description — so the description needs to compensate and largely does not. The parenthetical "(or a toll-free number they set up)" loosely maps to the type enum, but business_name and monthly_volume receive no explanation of format or expectation anywhere, and no parameter is mentioned by name.

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?

"Ask our team for a short code (or a toll-free number they set up)" gives a specific verb (request) and resource (short code / toll-free number), and "Provisions nothing by itself" cleanly separates it from provisioning siblings like purchase_number or bulk_purchase_numbers. It stops short of naming any sibling explicitly, so it lands at a clear-but-not-differentiating 4.

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 intent (you need a short code or toll-free number and must go through an approval process) is implied but never stated as a when-to-use rule. There is no guidance on when to prefer this over purchase_number/search_available_numbers, nor on how it relates to get_toll_free_verification or list_number_requests for follow-up.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resume_batchResume batchB
Destructive
Inspect

Resume a paused batch.

NameRequiredDescriptionDefault
idYesBatch id

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds only the precondition that the batch is paused; it does not explain what resuming actually triggers (e.g., remaining sends, billing impact, irreversibility), which is the context an agent most needs for a destructive batch operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste. It is appropriately terse, though the terseness leaves no room for the effect/precondition detail a destructive action warrants.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With rich annotations, a fully described single parameter, and no output schema, the definition is minimally complete for invoking the tool. It falls short on what an agent needs to predict the outcome of a destructive, open-world resume operation — no mention of resulting sends, cost, or error behavior for non-paused batches.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter and schema coverage is 100%, with "id" documented as "Batch id", so the baseline is 3. The description adds nothing about where to obtain the batch id or its format, but the schema already carries that burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Resume a paused batch") and adds the precondition that the batch must be paused. It is clearly distinguishable from cancel_batch and pause_batch, though it never mentions retry_batch, the closest ambiguous sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the word "paused" — the agent can infer this applies to paused batches, but there is no explicit when-to-use guidance and no routing between resume_batch, retry_batch, and send_batch for different batch states.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retry_batchRetry batchB
Destructive
Inspect

Retry a batch's failed recipients.

NameRequiredDescriptionDefault
idYesBatch id

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the agent knows this is an irreversible, non-repeatable write. The description adds useful scope context ('failed recipients' only, not the whole batch), but it omits the key consequence of a non-idempotent retry: that recipients may receive duplicate messages, and whether already-succeeded recipients are skipped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler and the scope qualifier in the right place. It is arguably too terse for a destructive operation, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with no output schema, the description should say what happens after the call (does the batch return to sending, what status results) and warn about duplicate sends. It provides only the one-line scope, leaving the agent without the consequences it needs before invoking an irreversible action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter with 100% schema description coverage ('Batch id'), so the schema fully documents it. The description only implies the id refers to the batch; it adds no format, source, or validation detail beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (retry) and resource (a batch's failed recipients), including the scope limitation that only failures are re-attempted. That distinguishes it from send_batch and cancel_batch, but it does not distinguish it from the closely related resume_batch sibling, which an agent could easily confuse with it.

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 versus alternatives such as resume_batch, send_batch, or cancel_batch, and no preconditions are given. The agent must infer from the name alone when a retry is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revoke_api_keyRevoke api keyA
DestructiveIdempotent
Inspect

Revoke an API key of this mode. Immediate and permanent: anything using it stops working.

NameRequiredDescriptionDefault
idYesAPI key id

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=false, so the safety profile is partly carried. The description adds real context beyond that: the effect is immediate, irreversible, and breaks every consumer of the key — the key fact an agent needs before pulling this trigger. It omits permission requirements and whether an already-revoked key raises an error (annotation implies no-op).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the consequence front-loaded right after the action so the risk is read before the call is made.

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 one-parameter destructive tool with full annotation coverage and no output schema, this covers the essentials: what it does, that it's irreversible, and what breaks. Only permission requirements and the exact response/error behavior on a repeat call are left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single required `id` parameter, so the schema does the work and the baseline is 3. The description adds no new meaning about the id — notably it doesn't clarify whether it refers to a key in the current mode, which is directly relevant to the "of this mode" phrasing.

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?

Specific verb (revoke) plus resource (API key), and "of this mode" adds a scoping qualifier distinguishing mode-scoped keys from one another. It doesn't name the companion tools (list_api_keys, create_api_key) that would make the boundary explicit, so it's clear but not maximally differentiated.

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?

"Immediate and permanent: anything using it stops working" implies this is the terminal action for a key and warns against casual use. However, it never states when to choose revocation over alternatives (e.g. rotating or creating a replacement key first), and there is no explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rotate_webhook_secretRotate webhook secretA
Destructive
Inspect

Replace a webhook endpoint's signing secret (returned once). expire_previous_in keeps the old one signing for that many seconds so the receiver can switch without dropping events.

NameRequiredDescriptionDefault
idYesWebhook endpoint id
expire_previous_inNoSeconds the old secret keeps signing alongside the new one.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered. The description adds two facts not in structured data: the new secret is returned only once, and the old secret continues signing for the grace period — both operationally critical for a rotation. It does not spell out that expire_previous_in=0 kills the old secret immediately, nor any rate-limit/permission 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 sentences, no filler; the core action and the one-shot return are front-loaded before the grace-period nuance. Every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully signals that the new secret comes back in the response exactly once, which is the main thing an agent must handle. It leaves the response shape and the meaning of expire_previous_in=0 to inference, a minor gap for a two-parameter mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both properties carry descriptions, so the schema does the heavy lifting. The description's note that expire_previous_in 'keeps the old one signing for that many seconds' largely restates the schema text, adding no unit/range detail the agent could not already read.

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?

"Replace a webhook endpoint's signing secret" is a specific verb plus a specific resource, immediately distinguishable from update_webhook, create_webhook and test_webhook in the sibling list. It stops short of naming or excluding those alternatives explicitly, so it is clear but not sibling-routing.

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 second sentence supplies the operative scenario: use expire_previous_in so a receiver can switch secrets without dropping deliveries. That gives real context for the main decision an agent faces (grace period or not), though it never states when-not to rotate or that other webhook tools exist for non-secret changes.

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-onlyIdempotent
Inspect

Search purchasable numbers by area code (default 415).

NameRequiredDescriptionDefault
area_codeNo

TDQS

A3.6/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 and openWorldHint=false, so the safety profile is covered. The description adds one real behavioral fact — the area_code default of 415 — but says nothing about result volume, limits, or why openWorldHint=false matters.

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, front-loaded with the verb and resource, with the useful default in parentheses. Nothing wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no param descriptions, the description should say what a result looks like (numbers only, or with pricing/capabilities) and whether results are capped. For a simple read-only lookup the essentials are present, but these gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden, and it does supply the meaning of area_code plus its default value of 415, which the schema does not. It stops short of specifying format or validation (3-digit NANP, US-only scope).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Search') and a specific resource ('purchasable numbers'), scoped by area code. This implicitly separates it from list_numbers (owned inventory) and purchase_number / bulk_purchase_numbers, but no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'purchasable' implies the pre-purchase lookup flow, but the description never says to call it before purchase_number or bulk_purchase_numbers, nor does it state any exclusions. Usage is inferable but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_batchSend batchA
Destructive
Inspect

Send one message to many people (a broadcast or campaign): pick recipients by segment_id, tags, contact_ids, or an explicit recipients list. Opted-out numbers, numbers without marketing consent, and people unsubscribed from topic_id are removed before sending. dry_run: true sends nothing and returns the count, cost, rejected rows and consent.no_opt_in (recipients the send will skip for having no opt-in). scheduled_at sends later (up to 30 days). With a live key it texts real people.

NameRequiredDescriptionDefault
bodyYes
fromNoOne of your numbers. Optional while the key's mode has one number.
nameNo
tagsNoSend to contacts carrying any of these tags (instead of recipients).
dry_runNoValidate only: returns a BatchValidation and sends nothing.
list_idNoSend to the contacts in this list, as it is when the batch is created (instead of recipients).
categoryNoOptional. It can make the batch stricter (`marketing`), never looser: the sending number's registration and the wording decide ([which messages are marketing](/docs/compliance-checks#which-messages-are-marketing)). From a number with no registration, a batch is marketing.
topic_idNoSubscription topic. Recipients unsubscribed from it are removed at validation (`topic_unsubscribed`) and skipped at send time, like opt-outs. Omit to apply opt-outs only.
recipientsNo
segment_idNoSend to the contacts in this saved segment, evaluated when the batch is created (instead of recipients).
contact_idsNo
quiet_hoursNoOptional. What to do with a message in the recipient's quiet hours: `block` refuses it (403 quiet_hours), `defer` holds it until their next 8:00am. Omitted: each recipient in quiet hours is held until their 8:00am.
scheduled_atNoFuture ISO timestamp or epoch ms, up to 30 days out.
check_line_typesNoReject landlines (first 500 unique numbers are checked).

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive/openWorld/no-idempotency, and the description adds genuinely new behavioral facts: opt-outs, missing marketing consent and topic unsubscribes are stripped before sending; dry_run returns count, cost, rejected rows and consent.no_opt_in; scheduled_at is capped at 30 days; quiet hours can block or defer; and a live key sends real messages.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences that lead with what the tool does, then filtering, then dry-run, then scheduling, ending on the live-key warning — good front-loading. Some clauses duplicate schema text (quiet_hours, scheduled_at) rather than adding new 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 14-parameter destructive send with no output schema, the description covers the things an agent must know before calling: who gets filtered out, how to validate safely, and the real-world consequence of a live key. The main residual gap (which recipient selector wins, and what a real send returns) is minor relative to what is disclosed.

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 71%, so the schema already documents most parameters (including from, tags, dry_run, list_id, topic_id, quiet_hours, check_line_types). The description restates and slightly enriches those (what dry_run returns, the 30-day cap, opt-out removal) but adds nothing for undocumented fields such as name, category enum consequences, or recipients.variables — and it omits list_id from its own recipient enumeration.

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 ("Send one message to many people (a broadcast or campaign)") and immediately scopes it against sibling send_message by emphasizing many-recipient broadcast semantics. The enumerated recipient-selection fields make the operation concrete.

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?

Rich operational context is present (dry_run for validation, scheduled_at window, consent filtering, live-key warning), but the description never explicitly routes the agent between this and send_message / send_verification, nor states mutual exclusivity between segment_id, tags, list_id, contact_ids and recipients. Usage is implied rather than prescribed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_messageSend messageA
Destructive
Inspect

Send one SMS from one of your numbers. Set category "marketing" for promotions (the opt-in check applies) and scheduled_at to send later. Quiet hours apply to every message: outside 8am-9pm (8pm in Florida, Maryland and Oklahoma) in the recipient's local time a marketing message is refused and anything else is held until 8am, except one-time codes and replies within 4 hours of their text. In sandbox (test keys), delivery is simulated: +15005550006 delivers, +15005550002 fails, +15005550007 is filtered as spam, +15005550013 delivers after a delay, +15005550016 has no opt-in (see /docs/sandbox).

NameRequiredDescriptionDefault
toYes
bodyYes
fromNoOne of your numbers, or a sender pool id (pool_...): TextKit picks a pool member, the same one for each recipient every time. Optional when the account has exactly one number for the key's mode.
tagsNoOptional. Your own labels, up to 10 (letters, digits, space _ . : -; up to 32 characters each; lowercased), for example a campaign or a flow. Stored on the message, sent on its webhook events, and reported by GET /v1/deliverability?group_by=tag. Filter with GET /v1/messages?tag=.
mediaNoReserved for MMS; currently returns 400 mms_not_enabled.
consentNoOptional. How the recipient agreed to your messages. A recurring non-marketing message from a number linked to a registration needs an opt-in on file for that registration; when none is, this records it and the message is sent. Never counts for marketing (use POST /v1/consent with proof). Not with scheduled_at.
categoryNoOptional. It can make a message stricter (`marketing`), never looser: what a message is comes from the sending number's registration and its wording ([which messages are marketing](/docs/compliance-checks#which-messages-are-marketing)). A message outside its registration's use case is refused with 403 campaign_mismatch.
customer_idNoOptional. Attribute to one of your customers. Defaults to the customer the from-number is assigned to; a number assigned to another customer is rejected (400).
quiet_hoursNoOptional. What to do with a message in the recipient's quiet hours: `block` refuses it (403 quiet_hours), `defer` holds it until their next 8:00am. Omitted: the account default (a single marketing send is refused; every other message is held). One-time codes are never held.
scheduled_atNoOptional. Future ISO timestamp (or epoch ms), up to 30 days out. The message is queued and the response is a scheduled_message object instead of a message. A marketing message scheduled into the recipient's quiet hours is refused now (403 quiet_hours) or, with quiet_hours defer, moved to their next 8:00am; any other message is moved.
shorten_linksNoOptional. Rewrite every http(s) link in `body` to a short link on your active link domain (POST /link-domains), with clicks tracked (`links` on the message, `message.link_clicked` events). The links are checked as you wrote them; segments are counted on the shortened text. Without an active link domain the request is refused with 400 link_domain_required: short links are never put on a shared domain. Works with scheduled_at.
idempotency_keyNoOptional. Retries are already safe: the same call with the same inputs within 10 minutes is done once and answers with the first result. Pass your own key to dedupe across a longer gap, or a new one to repeat an identical call on purpose.
status_callbackNoOptional. Also send this message's status events (message.sent, message.delivered, message.failed, message.blocked) to this https URL, signed with your callback secret (POST /v1/webhooks/callback_secret; 400 callback_secret_required until it exists). Logged and retried like a webhook endpoint, under endpoint `status_callback`. Immediate sends only.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as write/destructive/open-world, and the description adds substantial behavioral context: quiet-hours refusal and deferral rules, opt-in implications, scheduling response changes, and sandbox outcomes. The idempotency discussion does not contradict idempotentHint=false because the deduplication is explicitly time-bounded.

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 purpose is front-loaded, followed by the rules most likely to change the agent's call. It is dense but every sentence carries actionable information, including the sandbox exception list.

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 13-parameter messaging tool with no output schema, it covers the invocation-critical safeguards and side effects well. It omits some details such as cost/rate limits and the immediate-send response shape, but the schema and annotations carry much of that load.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high at 85%, so the baseline is 3. The description adds cross-parameter semantics beyond the schema, especially the marketing opt-in interaction, quiet-hours windows including state exceptions, and sandbox test numbers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource: send one SMS from one of your numbers. The cardinality ('one') also distinguishes it from batch or verification siblings without needing the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear operational guidance for marketing categorization, scheduled sends, quiet hours, and sandbox testing. It does not explicitly name alternatives such as send_batch or send_verification, but the 'one SMS' framing makes the boundary reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_verificationSend verificationA
Destructive
Inspect

Send a one-time verification code (OTP) to a phone number by text, or to an email address with channel "email". TextKit generates the code, handles expiry (10 min) and attempt limits (5), and blocks SMS-pumping and email-bombing abuse.

NameRequiredDescriptionDefault
fromNoOptional, channel `sms` only: send from a number you own instead of the TextKit pool
emailNoThe address to email the code to (channel `email`). Disposable addresses are refused.
phoneNoThe number to text the code to (channel `sms`). `to` works too.
channelNoHow the code goes out. `sms` needs `phone`; `email` needs `email`.sms
user_ipNoOptional. Your end user's IP address, as your server saw it. With it, one person requesting codes for many numbers or addresses is limited (20 an hour per IP on your account, texts and emails together); without it there is no per-IP limit, since requests come from your server.
app_nameNoYour product name, shown in the message
customer_idNoOptional: attribute the verification to one of your customers
idempotency_keyNoOptional. Retries are already safe: the same call with the same inputs within 10 minutes is done once and answers with the first result. Pass your own key to dedupe across a longer gap, or a new one to repeat an identical call on purpose.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, and the description adds real value beyond them: it discloses that TextKit generates the code, that expiry is 10 minutes, that attempt limits are 5, and that SMS-pumping/email-bombing abuse is blocked. What's missing is any statement of what the call returns (a verification id?) and whether rate limits or costs apply per send.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the action and the two channels before the lifecycle details. Efficient, though the clause list about expiry/limits/abuse is packed tightly enough to be slightly hard to scan.

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 an 8-parameter, zero-required, mutating tool with no output schema, the description covers the send lifecycle well but omits the return shape — critically, whether a verification id/handle comes back for a later check_verification call. That omission is the main completeness 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 explains phone/email/channel/from/user_ip/idempotency_key in detail; the description only restates the channel mapping. Baseline 3 is appropriate — it adds little meaning the schema does not already carry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — sending a one-time verification code (OTP) — plus the two delivery channels (SMS text or email). The OTP framing implicitly separates it from the generic send_message sibling, but no sibling is named explicitly, so an agent must infer the boundary with check_verification/fallback_verification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'to a phone number by text, or to an email address with channel "email"' hints at channel selection, but there is no explicit when-to-use, when-not-to-use, or pointer to the natural follow-up (check_verification) for validating the code.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_contact_topicSet contact topicA
DestructiveIdempotent
Inspect

Subscribe a contact to a topic, or unsubscribe them (e.g. "promotions" vs "order updates").

NameRequiredDescriptionDefault
idYesContact id
topicYesTopic id (see list_topics)
sourceNoWhere the change came from, e.g. "preference_page". Default "api".
subscribedYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is documented. The description adds the dual-mode framing (subscribe vs. unsubscribe via the same call), which clarifies what a false value does, but it does not warn that unsubscribing removes a contact from a communication stream or mention idempotency/rate behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the action, plus a short parenthetical that illustrates the use case without padding. Efficient, though the example could be mistaken for schema-level detail.

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 4-parameter mutation tool with no output schema and full annotation coverage, the main things an agent needs — what the call does in both directions and where topic IDs come from — are present. Missing detail about interaction with consent/opt-out state or error conditions when the contact/topic does not exist keeps it from a 5.

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 75% and the undocumented parameter is exactly the required boolean `subscribed`; the description's 'subscribe ... or unsubscribe' supplies its meaning, which the schema does not. The example topics and the subscribe/unsubscribe framing add real value over the schema, though the `source` parameter goes unmentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (subscribe/unsubscribe) on a specific resource (a contact's topic), which distinguishes it from list-level tools like add_to_list and read tools like get_contact_topics. It does not explicitly name a sibling for disambiguation, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by showing the subscribe/unsubscribe pair and giving example topics, but never says when to use this instead of set_consent, add_to_list, or get_contact_topics. The schema's 'see list_topics' hint covers topic lookup, but that guidance lives in the schema, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_spend_limitSet spend limitA
Destructive
Inspect

Set or remove the monthly spend cap and its alert thresholds. Live sends over the cap are refused.

NameRequiredDescriptionDefault
alert_thresholdsNo
monthly_limit_usdNonull removes the cap

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, and the description earns its keep by adding the live consequence: 'Live sends over the cap are refused.' It still doesn't say what removing the cap entails (unbounded spend) or that the change is non-idempotent.

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 compact sentences, front-loaded with the action and immediately followed by the operational consequence. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with no output schema, the description covers the enforcement effect but omits what state changes on removal and the threshold semantics. Adequate but with clear gaps an agent would want filled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, and the undocumented parameter is alert_thresholds — the description mentions 'alert thresholds' but never says they are percentages, up to five, or how they relate to the cap. Only the cap parameter gets contextual meaning (removal), leaving the agent to infer the rest from constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('set or remove the monthly spend cap and its alert thresholds'), which cleanly separates it from get_spend_limit. It doesn't name the sibling explicitly, but the mutation framing makes the contrast obvious.

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 'set or remove' phrasing implies the two usage modes, and 'null removes the cap' ties to the schema. However, there is no guidance on prerequisites, permissions, or when an agent should clear a cap versus lower it, and no named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

simulate_inboundSimulate inboundA
Destructive
Inspect

Sandbox only: simulate an inbound SMS to one of your test numbers (emits message.received; STOP, START and HELP act as for real).

NameRequiredDescriptionDefault
toNoOne of your sandbox numbers (never a live number). Optional while the account has one sandbox number.
bodyYes
fromYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=true, idempotentHint=false, and readOnlyHint=false. The description adds important context beyond them: the simulation emits message.received and STOP, START, and HELP keywords behave as they would for real, which helps an agent understand the side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that leads with the critical sandbox-only restriction and then states the action and side effects. Every clause adds relevant 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 simulation tool with annotations and no output schema, the description covers the key constraints and side effects. It is slightly incomplete around parameter formats and response behavior, but the essential sandbox and event-emission context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, and the description mainly reinforces the 'to' parameter already documented in the schema. It adds some meaning to 'body' by noting STOP, START, and HELP behave as real keywords, but does not clarify 'from' format or body constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: simulate an inbound SMS. It also states 'Sandbox only' and 'test numbers,' which clearly distinguishes it from production message-sending siblings such as send_message.

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 clearly establishes the sandbox-only use case and test-number target, making the intended context explicit. It does not explicitly name a production alternative, but the sandbox constraint effectively excludes non-test usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_integrationSync integrationB
Destructive
Inspect

Sync a connected tool now (up to 6 times an hour) and get what changed.

NameRequiredDescriptionDefault
idYesIntegration id

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context by stating a rate limit of up to 6 times per hour and that the tool returns changes. The annotations already declare destructiveHint=true and idempotentHint=false, but the description does not explain what destructive side effects may occur during a sync, which is a notable gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence containing the action, rate limit, and outcome. It is efficient, though the phrase 'get what changed' is slightly vague.

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 one-parameter tool with annotations covering destructive and idempotency behavior, the description is adequate but incomplete. It does not explain what 'what changed' means as a return value or warn about possible destructive effects, which matters given destructiveHint=true and no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one required parameter, and the schema already documents it as 'Integration id' at 100% coverage. The description does not add format or selection guidance beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Sync a connected tool now'. It also says the result is 'what changed', which clarifies the immediate sync operation. It is clear, but it does not explicitly distinguish this from siblings such as get_integration, list_integrations, or connect_integration.

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 'now' and the rate limit imply this is for triggering an immediate sync rather than viewing integration details. However, there is no explicit when-not guidance and no named alternative for checking status or listing integrations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_webhookTest webhookA
Destructive
Inspect

Send a signed test.ping to a webhook endpoint and see what it answered.

NameRequiredDescriptionDefault
idYesWebhook endpoint id

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, so the safety profile is covered. The description adds real value beyond that: it discloses that an actual signed event is dispatched to an external endpoint and that the endpoint's response is surfaced, which explains why the call is destructive and non-idempotent. It omits whether the test delivery is recorded in delivery logs or counts toward rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and payload, ending with the outcome. Nothing is redundant or padded.

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 one-parameter, no-output-schema tool whose annotations already cover the safety profile, this is close to complete: it tells the agent a real signed request is sent and that the answer comes back. The only missing piece is side-effect scope, i.e. whether the test shows up in delivery history or affects the endpoint's configuration.

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 a single parameter and 100% schema description coverage ('Webhook endpoint id'), the schema already carries parameter meaning. The description only refers to 'a webhook endpoint' generically and adds no format, lookup, or ID-source detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Send a signed test.ping to a webhook endpoint'. The 'test.ping' payload and 'see what it answered' clearly frame this as a live diagnostic rather than a config read or a delivery replay, distinguishing it implicitly from get_webhook and replay_failed_webhooks. It stops short of naming a sibling outright.

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 word 'test' implies the diagnostic use case, and 'see what it answered' implies verification. However, there is no explicit when-to-use versus replay_failed_webhooks or list_webhook_deliveries, and no stated prerequisites (e.g., endpoint must be active, secret must be configured).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

track_eventTrack eventA
Destructive
Inspect

Record something a customer did (e.g. signed_up, cart_abandoned, trial_ending), by user_id and/or phone. It starts or advances any active automation listening for that event.

NameRequiredDescriptionDefault
eventYesLetters, digits, and _ . : -
phoneNo
user_idNo
propertiesNoUp to 20 scalar values; usable as merge fields and in conditions.
idempotency_keyNoOptional. A unique key for this call: a retry with the same key is recorded once.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds genuinely useful side-effect disclosure beyond the annotations: 'It starts or advances any active automation listening for that event,' which tells the agent this is not a passive log write. It stops short of explaining the destructiveHint=true claim, though — nothing says whether re-fires can re-trigger sequences or duplicate sends, which matters for a tool that initiates runs.

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 examples, then the consequence. Nothing is padded and nothing is buried.

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 five-parameter write tool with a nested properties object, no output schema, and destructiveHint=true, the definition covers purpose and side effect but omits the things an agent most needs: whether the call creates an unknown contact, what the response contains, and what 'destructive' means here.

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 60% — event, properties, and idempotency_key are documented in the schema, but phone and user_id carry no schema descriptions. The description partially compensates by indicating these are the identification pair ('and/or'), yet it never says whether supplying both is reconciled, which one is authoritative, or what happens if neither matches a known customer.

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?

Uses a specific verb ('Record') plus a concrete resource ('something a customer did') with three named example event names, so an agent immediately knows this is a customer-event ingestion call. It does not explicitly distinguish itself from nearby siblings like replay_event, simulate_inbound, or wait_for_events, which keeps it a notch below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by user_id and/or phone' implies the identification context and tells the agent at least one identifier is expected. However, there is no statement of when to prefer this over replay_event or simulate_inbound, no prerequisites, and no guidance on which identifier wins when both are supplied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_automationUpdate automationC
Destructive
Inspect

Edit an automation (name, sender, trigger, or steps).

NameRequiredDescriptionDefault
idYesAutomation id
fromNoOne of your numbers. A sandbox number makes it a sandbox flow.
nameNo
stepsNo
triggerNo
topic_idNoSkip recipients unsubscribed from this topic.

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered, but the description adds nothing beyond that. Critically, it does not say whether `steps` replaces the entire step list or merges with existing steps — the single most important behavior for a destructive edit — nor what happens to running automations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler, so nothing is wasted, but the brevity comes at the cost of under-specification rather than genuine concision. The most decision-relevant information (replacement vs. partial update) is absent entirely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with six parameters, nested step objects, and no output schema, this description is far too thin. An agent cannot determine update semantics, error conditions, or side effects on active automations from either the description or the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% and the schema is deeply nested, so the description should compensate; instead it merely echoes the property names ('name, sender, trigger, or steps'). It never explains nullability semantics (e.g., `from: null` clearing the sender) or whether omitted fields are preserved.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Edit') and resource ('automation') and names the editable aspects (name, sender, trigger, steps), which maps to the schema's writable properties. Sibling names like create_automation and delete_automation make the intent mostly self-evident, though the description never explicitly distinguishes itself from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus create_automation, get_automation, or clone-style workflows, and no stated prerequisites such as fetching the automation first. There is also no warning that editing a live/paused automation may affect in-flight runs, which is the key usage decision for this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_contactUpdate contactB
Destructive
Inspect

Update a contact. Only the inputs you pass change; tags and fields replace the whole list or map.

NameRequiredDescriptionDefault
idYesContact id
nameNo
tagsNo
emailNo
notesNo
stateNo
fieldsNoUp to 20 string values
sourceNo
companyNo
last_nameNo
first_nameNo
phone_numberNoE.164, US or Canada

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag this as destructive and non-idempotent, so the description does not need to restate that. It adds genuinely new behavioral detail by explaining patch semantics — only supplied inputs change, while 'tags' and 'fields' are wholesale replacements — which is exactly the asymmetry an agent would otherwise get wrong.

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, both doing work; the crucial collection-replacement warning is included without padding.

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 12-parameter mutation with no output schema, the description covers the highest-risk ambiguity (list/map replacement) but omits clearing semantics via null, whether unset optional fields are left untouched, and any indication of the response. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% across 12 parameters, so the description must carry weight. It clarifies the replace-versus-patch semantics for 'tags' and 'fields' but says nothing about the eight nullable string parameters, including how null clears a value, nor about phone_number formats or field value limits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update a contact'), which an agent can act on. It does not differentiate itself from close siblings like upsert_contact or bulk_update_contacts, and does not say what it cannot do, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

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 instead of upsert_contact or bulk_update_contacts, and no mention of prerequisites such as needing an existing contact id. The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_customerUpdate customerC
Destructive
Inspect

Rename a customer or change its external_id or metadata.

NameRequiredDescriptionDefault
idYesCustomer id
nameNo
metadataNoUp to 50 string values
external_idNoYour id for them; unique per account

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false. The description adds no further behavioral context—it does not explain what gets destroyed, whether metadata updates replace or merge, or any permission requirements. It merely restates the modifiable fields.

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 waste. It immediately conveys the action and scope without any filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with nested metadata and no output schema, the description is inadequate. It omits important behavioral details such as whether metadata is merged or replaced, what happens on external_id conflicts, and whether partial updates are supported.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, so the schema already documents most parameters. The description lists the same three updatable fields (name, external_id, metadata), adding marginal meaning by implying they are the only fields that can be changed, but without syntax or uniqueness details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (rename/change) and resource (customer) with the exact fields that can be modified. It distinguishes from a generic update by naming customer-specific fields like external_id and metadata, but does not explicitly contrast with siblings such as update_contact.

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 only states what the tool does, with no guidance on when to use it versus alternatives (e.g., update_contact, upsert_contact, or bulk_update_contacts). It also omits any prerequisites or when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_integrationUpdate integrationA
Destructive
Inspect

Rename, pause or resume (status), or change an integration's settings or credentials (left-out credentials keep the stored ones).

NameRequiredDescriptionDefault
idYesIntegration id
nameNo
apiKeyNo
secretNo
statusNo
sourceIdNo
usernameNo
secretKeyNo
phoneEventNo
phoneFieldNo
accessTokenNo
consentEventNo
consentFieldNo
phoneEventPropertyNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The parenthetical that omitted credentials keep their stored values is genuinely useful partial-update semantics that the schema and annotations don't convey. However, annotations already flag destructiveHint=true and idempotentHint=false, and the description doesn't explain what the destructive aspect is (e.g., credential overwrite, breaking a live integration) or what state changes are irreversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence with no filler, front-loading the operations and ending with the important omission caveat. The '(status)' aside is slightly cryptic but earns its place by linking to the enum parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and this definition doesn't need one, since the annotations and description together cover the safety profile and the partial-update contract. Given how complex the tool is (14 parameters, destructive and open-world behavior), the description adds exactly the one non-obvious rule an agent needs: unspecified credentials are preserved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 7% across 14 parameters, so the description must carry meaning. It does group parameters into name, status, settings, and credentials, and it explains the omission behavior for credentials; but the large 'settings' cluster (sourceId, phoneEvent, phoneField, consentEvent, consentField, phoneEventProperty, username) is left entirely uninterpreted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

It names a concrete verb set (rename, pause/resume, change settings or credentials) and states the resource is an integration, so it is distinguishable from siblings such as connect_integration, disconnect_integration, and sync_integration. It doesn't explicitly call those siblings out, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage is implied: use it to modify an already-connected integration. There is no explicit guidance about when to choose this tool over connect_integration or sync_integration, and no prerequisites or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_listUpdate listB
Destructive
Inspect

Rename a list or change its description.

NameRequiredDescriptionDefault
idYesList id
nameNo
descriptionNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already state destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the description is not required to repeat those basics. However, it adds no behavioral context about permissions, irreversibility, partial-update behavior, or what happens to omitted fields, leaving the key mutation risks undisclosed in prose.

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 wasted words. For a simple update tool, this is appropriately sized and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and the annotations carry the safety profile, but the description omits important update semantics such as whether omitted fields remain unchanged and what the call returns. It is minimally adequate but not complete for an agent to call the tool with full confidence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low at 33%, but the description compensates by mapping the action to the name and description fields. It does not clarify the required id, the maxLength constraints, or the nullable description field, so parameter semantics are only partly covered.

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 action and resource: renaming or changing the description of a list. It is clearly an update operation on a list, though it does not explicitly differentiate itself from other update_* 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?

The description states what can be changed but gives no explicit guidance on when to use this tool versus alternatives such as create_list, delete_list, or get_list. Usage is only implied by the verb 'Rename' and the resource 'list'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_number_poolUpdate number poolC
Destructive
Inspect

Rename a sender pool or change its numbers.

NameRequiredDescriptionDefault
idYesPool id
nameNo
routingNoHow a recipient gets a number. sticky: the same member every time. local: a member in the recipient's area code, else one in their time zone, else any; still the same one each time.sticky
descriptionNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=false, so the safety profile is known. The description adds little beyond that and actually points at changing 'numbers' even though the schema exposes only name, routing, and description; it does not explain the impact of changing routing or what destructive behavior to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence and is front-loaded, so it is concise. However, it is under-sized for a four-parameter destructive update and contains a misleading clause, so the conciseness comes at the cost of usefulness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, four parameters, and destructive annotations, the description should clarify which fields can be updated and what the update affects. It omits the name, routing, and description fields entirely and suggests unsupported number changes, leaving key update behavior unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: id and routing are documented, while name and description have no schema descriptions. The description adds no valid parameter meaning for id, name, routing, or description, and its mention of 'numbers' is misleading because no such parameter exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Rename a sender pool or change its numbers'), so the general action is identifiable. However, 'change its numbers' does not match the schema, which has no numbers parameter, and the description does not distinguish this tool from create_number_pool, clone_number_pool, or bulk_update_numbers.

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 instead of create_number_pool, clone_number_pool, get_number_pool, delete_number_pool, or bulk_update_numbers. No prerequisites, exclusions, or conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_scheduleUpdate scheduleA
Destructive
Inspect

Pause (active: false) or resume (active: true) a recurring schedule.

NameRequiredDescriptionDefault
idYesSchedule id
activeNofalse pauses, true resumes.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=true. The description adds no behavioral context beyond restating the boolean mapping found in the schema — it doesn't explain why the operation is flagged non-idempotent, whether pausing aborts queued messages, or whether resume replays missed runs. Given a destructive-flagged mutation, this is a thin disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that states both directions of the toggle with zero filler. Nothing is buried or 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 simple two-parameter toggle with full schema coverage and annotations covering the safety profile, the description tells the agent everything needed to call it correctly. Only the side effects of resuming a paused schedule are left unstated, which is a minor 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% and the 'active' parameter already documents 'false pauses, true resumes' — the description repeats that verbatim rather than extending it. Baseline 3 applies since the schema carries all parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific pair of actions (pause/resume) on a specific resource (recurring schedule), and usefully narrows the otherwise-generic 'update_schedule' name to exactly these two state transitions. An agent can distinguish it from create_schedule, delete_schedule, get_schedule, and the automation/batch pause siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by mapping the boolean value to each effect, but it never states prerequisites (schedule must already exist), when to prefer this over delete_schedule, or what happens to in-flight scheduled sends. It's adequate for a two-state toggle but offers no explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_segmentUpdate segmentC
Destructive
Inspect

Rename a segment or replace its rules.

NameRequiredDescriptionDefault
idYesSegment id
nameNo
matchNoall
rulesNo
descriptionNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The word 'replace' usefully signals that rules are overwritten wholesale rather than merged, which is consistent with the destructiveHint=true annotation and adds real context beyond it. But it never says the operation is destructive/irreversible, that the caller must hold the existing rule set to avoid losing it, or that the rules array is capped at 10 items — all material for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with zero filler, but for a 5-parameter destructive mutation this terseness crosses from concise into under-specified — nothing is wasted, but too little is said.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Destructive, non-idempotent, no output schema, and low schema coverage all shift burden onto the description, yet key parameters (match, description) and replacement semantics for partial updates go unmentioned. An agent could call this and silently drop the description or wipe rules unintentionally.

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% and the description compensates for none of it: 'match' (all/any), 'description', and the maxLength/maxItems constraints are undocumented in both places. It also doesn't clarify whether passing 'rules' without 'name' leaves the name untouched, which is the single most important semantic for a partial-update tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Rename a segment or replace its rules'), which distinguishes it from create_segment/delete_segment/get_segment without naming them. However it omits the third documented capability, updating the free-text description, so the stated scope is narrower than the tool's actual behaviour.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use / when-not-to-use guidance and no mention of alternatives such as preview_segment (to validate rules before saving) or create_segment when a new segment is intended. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_templateUpdate templateC
Destructive
Inspect

Rename or edit a template.

NameRequiredDescriptionDefault
idYesTemplate id
bodyNo
nameNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already disclose that this is a non-readonly, destructive, non-idempotent mutation. The description merely repeats 'rename or edit' and adds no context about what destruction is possible, whether body replacement overwrites existing content, or what permissions are needed.

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?

It is a single, front-loaded sentence with no wasted words. However, the brevity comes at the cost of useful detail rather than being optimally informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no output schema and poor parameter documentation, the description is too thin. It does not explain the effect of editing the body, error behavior, or requirements for a destructive update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, with only 'id' documented. The description vaguely maps 'rename' to name and 'edit' to body but does not explain the 1600-character body limit, the 60-character name limit, or the role of the required id beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb pair (rename/edit) and resource (template), which clearly distinguishes it from create_template, delete_template, and get_template. It does not explicitly name siblings, keeping it below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states what can be changed but gives no guidance on when to choose update_template over alternatives such as create_template or delete_template. No prerequisites, permissions, or conditions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_topicUpdate topicC
Destructive
Inspect

Rename or describe a topic.

NameRequiredDescriptionDefault
idYesTopic id
nameNo
descriptionNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is carried structurally, but the description adds nothing: it doesn't say whether omitted fields are preserved, whether passing null clears the description, or whether the rename can collide with an existing topic name. For a mutation flagged destructive, that silence is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, which is structurally good, but the brevity comes at the cost of substance rather than being earned concision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter destructive mutation with no output schema and no sibling differentiation, one short sentence leaves too much uncertain: partial-update semantics, null handling, and error conditions are all unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% — only id is documented. The description implies name and description map to "rename" and "describe," but it doesn't explain that description is nullable (i.e. can be cleared) or reference the 60/200 maxLength constraints that would cause calls to fail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Rename or describe a topic" gives a verb (rename) and a resource (topic), and the verb distinguishes it from get_topic, create_topic and delete_topic. But "describe a topic" is ambiguous — it could be read as retrieving a description rather than setting the description field, so the actual effect is not fully pinned down.

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 vs create_topic, delete_topic, get_topic or set_contact_topic, and no prerequisites or field-level conditions are stated. The agent has to infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_webhookUpdate webhookB
Destructive
Inspect

Change a webhook endpoint: URL, events, or turn it off (active: false).

NameRequiredDescriptionDefault
idYesWebhook endpoint id
urlNo
activeNofalse pauses delivery; pending retries for a paused endpoint are dropped.
eventsNo
numbersNoReplace the number filter; [] or null clears it.
descriptionNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds only the small detail that active:false pauses delivery, and it never mentions that passing events or url replaces existing values, nor the secret/retry implications. Useful but thin 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, and the pausing behavior is called out parenthetically where the agent will see it. It is efficient but so terse that two of the six parameters go unmentioned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with six parameters and no output schema, the description omits the numbers filter (replace/clear semantics) and the description field entirely, and does not say whether unspecified fields are preserved. Adequate for a basic edit but incomplete for a destructive op.

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 50%, and the two undocumented parameters are exactly url and events, both of which the description names as updatable fields. That meaningfully compensates for the gap, though it adds no detail on accepted event formats or wildcard syntax.

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?

"Change a webhook endpoint" gives a specific verb and resource, and the field list (URL, events, active) makes it clearly the mutation counterpart to create_webhook/delete_webhook. It never names those siblings or clarifies that it only updates an existing endpoint, so the differentiation is implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage 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 versus create_webhook, delete_webhook, rotate_webhook_secret, or get_webhook to inspect current settings first. The agent must infer the context entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upsert_contactUpsert contactA
Destructive
Inspect

Create a contact, or update the existing one with the same phone_number.

NameRequiredDescriptionDefault
nameNoDisplay name. Defaults to first + last name.
tagsNo
emailNo
notesNo
stateNo
fieldsNoUp to 20 string values (account id, plan, location...), usable in segments and as {{field:key}} merge fields
opt_inNoImport only (POST /v1/contacts/import). Stored as consent evidence; never lifts an opt-out.
sourceNoWhere the contact came from. Defaults to "api".
companyNo
last_nameNo
first_nameNo
phone_numberYesE.164, US or Canada

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true and idempotentHint=false, so the basic safety profile is visible. The description adds the phone-number matching rule, but it does not explain overwrite semantics, such as whether omitted fields are cleared, or why the operation is non-idempotent.

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 wasted words. It communicates the core upsert rule efficiently, even though the tool's complexity may call for additional operational detail elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive 12-parameter upsert with nested objects and no output schema, the description omits key operational details: overwrite behavior, the significance of phone_number as the sole required field, the import-only constraint on opt_in, and any indication of the result shape. It gives the central matching rule but is not complete enough for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 42% across 12 parameters, with several simple fields such as tags, email, notes, and company undocumented. The description only clarifies that phone_number is the identity key; it does not compensate for the remaining undocumented parameters or explain the nested opt_in and fields behavior beyond what the schema already says.

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 create-or-update operation on a contact and names the matching key, phone_number. This distinguishes an upsert from a plain update_contact or create_customer call.

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 clearly explains the selection rule: create a new contact, or update the existing contact with the same phone_number. However, it does not name alternatives like update_contact or import_contacts, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_for_eventsWait for eventsA
Read-onlyIdempotent
Inspect

Wait up to 25 seconds for the next events after a cursor (a reply, a delivery receipt), then return them.

NameRequiredDescriptionDefault
cursorNoThe `cursor` of the previous response. Omit on the first call.
timeoutNoSeconds to hold the request.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, non-destructive and closed-world, so the description's real contribution is disclosing that the call blocks/holds the request for up to 25 seconds – the single most important behavioral fact for an agent scheduling this call. It does not state what is returned when the wait expires empty.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, zero filler, with the time bound and cursor dependency front-loaded before the return behavior.

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 two-parameter polling tool with full schema coverage and no output schema, the definition is mostly sufficient. The gap is the empty-timeout case and whether the cursor is reusable, which an agent needs to write a correct polling loop.

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 are already documented in the schema. The description reinforces the cursor's role and echoes the 25-second maximum, but adds no format or reuse guidance beyond that; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (wait), resource (events), a hard bound (25 seconds) and the cursor anchoring semantics, plus examples of what events are (reply, delivery receipt). It is clear what the tool does, though it does not name the sibling (list_events) it differs from, so the agent must infer the distinction.

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 'after a cursor' and the schema note 'Omit on the first call' imply the long-poll loop, but the description never says when to prefer this over list_events or replay_event, nor what to do on an empty result. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 142 tool updates
    • First observedactivate_automation
    • First observedadd_to_list
    • First observedassign_number_to_customer
    • First observedbulk_purchase_numbers
    • First observedbulk_update_contacts
    • First observedbulk_update_numbers
    • First observedcancel_automation_run
    • First observedcancel_batch
    • First observedcancel_scheduled_message
    • First observedcheck_verification
    • First observedclone_number_pool
    • First observedconnect_integration
    • First observedcreate_api_key
    • First observedcreate_automation
    • First observedcreate_customer
    • First observedcreate_link_domain
    • First observedcreate_list
    • First observedcreate_number_pool
    • First observedcreate_schedule
    • First observedcreate_segment
    • First observedcreate_template
    • First observedcreate_topic
    • First observedcreate_webhook
    • First observeddelete_automation
    • First observeddelete_contact
    • First observeddelete_customer
    • First observeddelete_link_domain
    • First observeddelete_list
    • First observeddelete_message
    • First observeddelete_number_pool
    • First observeddelete_schedule
    • First observeddelete_segment
    • First observeddelete_template
    • First observeddelete_topic
    • First observeddelete_webhook
    • First observeddisconnect_integration
    • First observedexport_consent
    • First observedexport_csv
    • First observedexport_numbers
    • First observedfallback_verification
    • First observedforget_identity
    • First observedget_automation
    • First observedget_automation_run
    • First observedget_balance
    • First observedget_batch
    • First observedget_batch_results
    • First observedget_consent
    • First observedget_contact
    • First observedget_contact_topics
    • First observedget_customer
    • First observedget_customer_usage
    • First observedget_deliverability
    • First observedget_integration
    • First observedget_link_domain
    • First observedget_list
    • First observedget_message
    • First observedget_number
    • First observedget_number_pool
    • First observedget_registration
    • First observedget_schedule
    • First observedget_scheduled_message
    • First observedget_segment
    • First observedget_spend_limit
    • First observedget_template
    • First observedget_toll_free_verification
    • First observedget_topic
    • First observedget_usage
    • First observedget_verification
    • First observedget_webhook
    • First observedimport_contacts
    • First observedimport_opt_outs
    • First observedlink_number_to_registration
    • First observedlist_api_keys
    • First observedlist_audit_logs
    • First observedlist_automation_runs
    • First observedlist_automations
    • First observedlist_batch_recipients
    • First observedlist_batches
    • First observedlist_contacts
    • First observedlist_customers
    • First observedlist_events
    • First observedlist_integrations
    • First observedlist_link_domains
    • First observedlist_list_contacts
    • First observedlist_lists
    • First observedlist_messages
    • First observedlist_number_pools
    • First observedlist_number_requests
    • First observedlist_numbers
    • First observedlist_opt_outs
    • First observedlist_registration_submissions
    • First observedlist_registrations
    • First observedlist_scheduled_messages
    • First observedlist_schedules
    • First observedlist_segments
    • First observedlist_templates
    • First observedlist_toll_free_verifications
    • First observedlist_topics
    • First observedlist_webhook_deliveries
    • First observedlist_webhooks
    • First observedlookup_phone
    • First observedpause_automation
    • First observedpause_batch
    • First observedplan_import
    • First observedpreview_segment
    • First observedpurchase_number
    • First observedquery_audience
    • First observedredact_message
    • First observedrelease_number
    • First observedremove_from_list
    • First observedreplay_event
    • First observedreplay_failed_webhooks
    • First observedrequest_short_code
    • First observedresume_batch
    • First observedretry_batch
    • First observedrevoke_api_key
    • First observedrotate_webhook_secret
    • First observedsearch_available_numbers
    • First observedsend_batch
    • First observedsend_message
    • First observedsend_verification
    • First observedset_consent
    • First observedset_contact_topic
    • First observedset_spend_limit
    • First observedsimulate_inbound
    • First observedsync_integration
    • First observedtest_webhook
    • First observedtrack_event
    • First observedupdate_automation
    • First observedupdate_contact
    • First observedupdate_customer
    • First observedupdate_integration
    • First observedupdate_list
    • First observedupdate_number_pool
    • First observedupdate_schedule
    • First observedupdate_segment
    • First observedupdate_template
    • First observedupdate_topic
    • First observedupdate_webhook
    • First observedupsert_contact
    • First observedverify_link_domain
    • First observedwait_for_events

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to send real iMessage, SMS, and WhatsApp messages from a business's dedicated number, run campaigns, read replies and lead scores, manage contacts and sequences, and check which numbers are iPhones or on WhatsApp. It is available as a hosted OAuth connector for Claude and ChatGPT or as a local npm package with an API key that adds SMS verification, verify widgets, and reply webhooks.
    82 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI-powered SMS messaging through Twilio with automatic conversation threading, message status tracking, and webhook support for receiving inbound messages.
    41 npm
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for provisioning dedicated real-SIM US phone numbers, receiving inbound SMS, and extracting OTP codes. Built for AI agents automating phone verification workflows.
    12
    258 npm
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources