Emailit
Server Details
Send email, run campaigns and automations, manage contacts and domains, fix deliverability.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- emailit/plugins
- GitHub Stars
- 0
TDQS
Scored across 132 tools
Most tools have distinct resource-action purposes, but there is meaningful overlap around audience subscribers versus contacts (e.g. add-audience-subscriber, bulk-add-contacts-to-audience, bulk-remove-audience-subscribers, bulk-remove-contacts-from-audience, update-audience-subscriber, update-contact). Automation control also has several similar-looking tools (start-automation, trigger-automation, pause-automation, stop-automation, cancel-automation-run, remove-contact-from-automation), though their descriptions help distinguish them.
The server predominantly uses a readable kebab-case verb_noun convention (list-contacts, create-campaign, update-template, delete-webhook). There are minor deviations such as add-audience-subscriber versus create-contact and several bulk-prefixed variants, but the overall pattern remains predictable.
132 tools is far beyond a reasonable MCP surface and creates a large selection burden even for a broad email platform. While the domain is wide, this tool count is excessive and will make agent tool selection and maintenance difficult.
The tool set provides unusually complete lifecycle coverage across contacts, audiences, campaigns, automations, templates, domains, suppression lists, webhooks, events, forms, API keys, verification, and DMARC reporting. CRUD operations and key operational actions such as send, publish, retry, verify, pause, and resume are all represented.
Available Tools
132 toolsadd-audience-subscriberAdd Audience SubscriberBInspect
Add an email address to an audience. Creates the contact if it does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Audience ID. | |
| Yes | |||
| last_name | No | ||
| first_name | No | ||
| custom_fields | No | ||
| double_opt_in | No | Send the double opt-in email; they join when they confirm. The audience must have double opt-in on. | |
| send_confirmation_email | No | Send the audience confirmation email when it is on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a non-read-only, non-destructive, non-idempotent write. The description adds useful behavior beyond that by saying it creates the contact if it does not exist, but it does not explain what happens when the email already exists as a subscriber, nor does it describe subscription status or double opt-in effects beyond what the schema already states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with the core action front-loaded and no wasted wording. It is appropriately sized for a concise tool summary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation with a nested custom_fields object and no output schema, the description is too sparse. It omits optional parameter behavior, existing-subscriber handling, and double opt-in requirements, leaving the agent with significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 7 parameters and only 43% schema description coverage, the description should compensate but does not. It mentions only the audience and email in passing and says nothing about first_name, last_name, custom_fields, double_opt_in, or send_confirmation_email semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: adding an email address to an audience, and notes that a missing contact is created. It does not distinguish this operation from close siblings such as bulk-add-contacts-to-audience or update-audience-subscriber.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool is relevant by naming the action, but gives no explicit guidance on when to use it versus create-contact, update-audience-subscriber, or bulk-add-contacts-to-audience. 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.
add-contact-tagsAdd Contact TagsAIdempotentInspect
Add tags to a contact. Starts "tag added" automations and resumes automations waiting for the tag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID (con_xxx) or email address. | |
| tags | Yes | Tags (stored lowercase). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing a real side effect: it starts 'tag added' automations and resumes automations waiting on the tag. That is exactly the kind of consequence not encoded in idempotentHint/destructiveHint. It still omits whether existing tags are preserved (additive vs replace), which matters for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the side effect. Nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two fully documented parameters and no output schema, the description covers what an agent needs to call it safely, including the automation side effect. The one gap is not stating whether tags are merged with existing ones.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – the id format, lowercase storage, and 1-50 tag limit are all already documented in the schema. The description adds no parameter meaning beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add tags to a contact'), clearly distinguishable from remove-contact-tags and bulk-add-contacts-to-audience by the singular contact scope. It stops short of naming which sibling to use for bulk or removal cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus remove-contact-tags for replacing tags, update-contact, or the bulk audience tools. The usage is only implied by the verb 'Add'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk-add-contacts-to-audienceBulk Add Contacts to AudienceBIdempotentInspect
Subscribe up to 100 contacts to an audience.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Contact IDs (con_xxx), up to 100. | |
| audience_id | Yes | Audience ID (aud_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety and repeat-call profile is covered structurally. The description adds only the 'subscribe' framing, and says nothing about what happens to contacts already subscribed, whether unsubscribed contacts are resubscribed, or any per-call 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the batch limit is stated up front. Nothing is wasted, even if more could have been said.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage and four annotations, the description is technically callable as written. But for a bulk mutation whose sibling bulk-resubscribe-contacts implies distinct resubscribe semantics, an agent cannot tell whether this tool handles previously unsubscribed contacts or errors on duplicates — a real gap left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: ids documents the con_xxx format and 100-item cap, and audience_id documents the aud_xxx format. The description's 'up to 100 contacts' simply restates maxItems, adding no new meaning; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (subscribe) and resource (contacts to an audience) plus the batch cap of 100, which distinguishes it from the single-contact add-audience-subscriber sibling. It does not name any sibling explicitly, so the differentiation 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.
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 over add-audience-subscriber, bulk-update-audience-subscribers, or bulk-resubscribe-contacts. The only hint is the '100 contacts' cap, which is already in the schema's maxItems, so the description provides no routing logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk-delete-contactsBulk Delete ContactsADestructiveIdempotentInspect
Permanently delete up to 100 contacts and their audience memberships.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Contact IDs (con_xxx), up to 100. |
TDQS
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 earns credit for going beyond that by stating the deletion is permanent and, importantly, that audience memberships are removed as a cascade effect — a non-obvious consequence an agent could not read off the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, zero filler, with the destructive nature and the cascade effect front-loaded. Nothing could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, annotation-backed destructive tool with no output schema, this covers what an agent needs: permanence, item limit, and the membership side effect. Failure/partial-success behavior is the only gap, and it is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single ids parameter has 100% schema coverage, including the con_xxx format and the 1–100 bounds, so the schema does the heavy lifting. The description's 'up to 100 contacts' merely restates maxItems without adding format or validation detail beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (permanently delete) plus resource (contacts) plus scope (up to 100) and a stated side effect (audience memberships). It implicitly distinguishes itself from the singular delete-contact by the 'bulk' framing and the 100-item bound, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'Permanently' signals this is an irreversible operation, so the agent can infer caution is warranted, but there is no explicit guidance on when to pick this over delete-contact or bulk-remove-contacts-from-audience, and no stated prerequisite like confirming the contact IDs first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk-remove-audience-subscribersBulk Remove Audience SubscribersBDestructiveIdempotentInspect
Remove many subscribers from an audience by subscriber ids, or every subscriber matching a filter. Contacts are kept.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Audience ID. | |
| ids | No | Subscriber ids. | |
| search | No | ||
| engagement | No | ||
| subscribed | No | ||
| all_matching | No |
TDQS
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 one genuinely useful behavioral fact — "Contacts are kept" — clarifying the removal is from the audience only. However, it says nothing about how ids and filter parameters combine, whether all_matching is required for filter mode, or what happens when both are supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and immediately followed by the clarifying constraint. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter destructive mutation with no output schema and low schema coverage, the description should explain the filter parameters and the role of all_matching. It leaves four of six parameters unexplained and doesn't resolve how ids and filters interact.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%: id and ids are documented in the schema, but search, engagement, subscribed, and all_matching carry no descriptions anywhere. The description gestures at "a filter" without naming which parameters form it or explaining all_matching, which is a significant gap for a destructive bulk operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Remove many subscribers from an audience") and reveals the two operating modes (explicit ids vs. filter-matched). It does not differentiate itself from the very similar sibling bulk-remove-contacts-from-audience, which leaves a real ambiguity for selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two modes imply when each applies (targeted removal by id vs. bulk removal by filter), which is more than nothing. But there is no explicit guidance on choosing between this tool and bulk-remove-contacts-from-audience or remove-audience-subscriber, and no stated prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk-remove-contacts-from-audienceBulk Remove Contacts from AudienceCDestructiveIdempotentInspect
Remove up to 100 contacts from an audience.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Contact IDs (con_xxx), up to 100. | |
| audience_id | Yes | Audience ID (aud_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true, readOnly=false, so the safety profile is covered. The description adds only the 100-item ceiling, which merely restates the schema's maxItems and says nothing about whether removal is reversible, whether it affects subscription status, or how it differs from deleting the contact outright.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler — the scope and limit land first. It is efficient, though efficiency tips into under-specification for a destructive operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, non-annotated-for-reversibility mutation with a confusingly similar sibling set, no output schema, and no explanation of the resulting state after removal. For that complexity level, one sentence is not sufficient to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, including the `con_xxx`/`aud_xxx` ID formats and the maxItems constraint, so the description need not carry parameter detail. The single added fact ("up to 100") is already in the schema, so the description contributes nothing beyond baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource ("Remove ... contacts from an audience") and a stated batch ceiling, so the operation is immediately graspable. However, it never distinguishes itself from the near-identical sibling `bulk-remove-audience-subscribers`, leaving the agent unable to tell which of the two to call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative is named. With siblings like `bulk-remove-audience-subscribers`, `remove-audience-subscriber`, and `bulk-delete-contacts` in the list, the absence of routing guidance is a real cost.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk-resubscribe-contactsBulk Resubscribe ContactsAIdempotentInspect
Resubscribe up to 100 contacts. Only do this when they asked to receive email again.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Contact IDs (con_xxx), up to 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (not read-only, non-destructive, idempotent), so the description's main addition is the consent precondition, which is genuinely useful for a compliance-sensitive write. The 100-item cap is repeated from the schema's maxItems, and nothing is said about partial failures or what happens to IDs that weren't unsubscribed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the what (resubscribe, cap) is front-loaded and the consent rule follows as the gating condition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter bulk mutation with full schema coverage and annotations covering safety, the description supplies purpose, limit, and precondition. The only residual gap is outcome behavior (partial success, unknown IDs), which is minor given there's no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'ids' parameter is documented as 'Contact IDs (con_xxx), up to 100.' The description's 'up to 100 contacts' restates the schema constraint without adding syntax or format guidance, so this sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Resubscribe ... contacts') plus the bulk cap of 100, which is enough to separate it from bulk-unsubscribe-contacts and the audience-subscriber siblings. It doesn't explicitly name a sibling to steer away from, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Adds an explicit precondition — 'Only do this when they asked to receive email again' — which tells the agent when this tool is appropriate. It stops short of naming when-not conditions or alternatives (e.g., for contacts who never unsubscribed), so it's clear context rather than full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk-unsubscribe-contactsBulk Unsubscribe ContactsBDestructiveInspect
Unsubscribe up to 100 contacts from all marketing email. They stop receiving campaigns and automations.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Contact IDs (con_xxx), up to 100. |
TDQS
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 by structured data. The description adds useful effect scope ('stop receiving campaigns and automations'), but omits key behavioral facts for a destructive bulk op: whether it is reversible (a bulk-resubscribe-contacts sibling exists), whether partial failures are possible, and whether transactional mail is unaffected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and its scope; nothing extraneous. The second sentence partly restates the first but adds clarifying detail about campaigns and automations, so it earns its place without being essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with full schema coverage, full annotations, and no output schema, the definition is close to sufficient. The remaining material gap is the reversibility/irreversibility story and any note on bulk partial-failure behavior for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the con_xxx ID format and the maxItems=100 limit. The description's 'up to 100 contacts' merely restates the maxItems constraint rather than adding new meaning such as behavior on invalid or unknown IDs, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (unsubscribe) and resource (contacts) plus scope (up to 100, all marketing email), so the agent knows exactly what the tool does. It does not explicitly name the counterpart sibling tool (bulk-resubscribe-contacts) or differentiate from adjacent tools like bulk-remove-audience-subscribers, which keeps 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Unsubscribe from all marketing email' implies the scenario, but there is no explicit when-to-use statement, no exclusion (e.g., versus removing a contact from a single audience), and no reference to alternatives. Usage is inferable but not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk-update-audience-subscribersBulk Update Audience SubscribersAIdempotentInspect
Subscribe or unsubscribe many subscribers of an audience: by subscriber ids, or every subscriber matching a filter (for example all unengaged ones).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Audience ID. | |
| ids | No | Subscriber ids. | |
| action | Yes | ||
| search | No | Match email or names, with all_matching. | |
| engagement | No | ||
| subscribed | No | ||
| all_matching | No | Apply to every subscriber matching engagement/subscribed/search instead of ids (up to 10,000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, idempotent, non-destructive operation. The description adds useful context that it can affect either explicit subscriber ids or every subscriber matching a filter, but it omits the 10,000-subscriber cap and does not elaborate on the effects of bulk unsubscription.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the core operation and then gives the two targeting modes. Every clause contributes to understanding the tool, with no repetition or noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter bulk write tool with no output schema, the description is adequate but thin. It captures the main targeting modes but leaves the agent to rely on the schema for limits, filter fields, and the exact meaning of all_matching.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is moderate (57%), and the description explains the central ids-versus-filter targeting distinction plus an example tied to engagement. It still does not clarify the search, subscribed, or all_matching semantics beyond what the schema already provides, and the required action parameter is only implied by 'subscribe or unsubscribe'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb pair (subscribe/unsubscribe), the resource (many subscribers of an audience), and the two targeting modes (subscriber ids or a matching filter). It is clear enough to distinguish from single-subscriber tools, but it does not explicitly differentiate itself from nearby bulk-removal or bulk-unsubscribe siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the tool is for bulk audience subscription changes and gives the two targeting modes, including an example of filtering unengaged subscribers. However, it does not say when to prefer this over siblings like bulk-remove-audience-subscribers or bulk-unsubscribe-contacts, nor does it state exclusions or prerequisites.
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 RunADestructiveInspect
Cancel one running run: its waiting steps are canceled and no further steps run. Can't be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). | |
| reason | No | ||
| run_id | Yes | Automation run ID (aur_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the bar is lower, but the description still adds real value by explaining what specifically is destroyed (waiting steps) and that nothing further executes. It does not say what happens when the run has already finished or errored, which is the remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the effect front-loaded and the irreversibility warning 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive one-shot mutation with no output schema, the definition covers the essential outcome and irreversibility, and annotations carry the safety profile. It falls short only on edge-case behavior (already-completed runs, error responses) and on the purpose of the 'reason' field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: id and run_id are documented in the schema, but 'reason' has no description anywhere. The tool description adds no parameter meaning at all, so the undocumented third parameter is left entirely to inference — acceptable but not compensating for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Cancel one running run') and defines the effect precisely: waiting steps canceled, no further steps run. It is clearly distinct from cancel-campaign and cancel-email by scope, though it never explicitly contrasts with the automation-level siblings like stop-automation or pause-automation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 stop-automation, pause-automation, or remove-contact-from-automation, all of which sit in the same sibling set. 'Can't be undone' is a hazard warning, not a usage rule, and no precondition (e.g., the run must still be active) is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel-campaignCancel CampaignADestructiveInspect
Cancel a draft or sending campaign. Scheduled campaigns cannot be canceled; delete them to stop the send. Emails already delivered are not recalled.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (cmp_xxx) or name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, and the description adds genuinely new behavior: cancellation is not retroactive ('Emails already delivered are not recalled') and is state-restricted. It stops short of saying what the campaign's resulting status is or how a second call behaves, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and its valid states, then the exclusion, then the irreversibility caveat. Nothing is redundant with the title or the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with full schema coverage and annotations, the description covers eligibility, the alternative, and non-reversibility. The only real gap is the post-call state of the campaign (and there is no output schema to cover it), which is minor but would help an agent confirm success.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'id' parameter already documents that it accepts a cmp_xxx ID or a name. The description adds no syntax, resolution, or ambiguity-handling 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (cancel) and resource (campaign) plus the eligible states (draft or sending), which immediately separates it from delete-campaign and send-campaign in the sibling list. An agent can pick this tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the excluded state ('Scheduled campaigns cannot be canceled') and routes the agent to the correct alternative ('delete them to stop the send'). That is a concrete when-not plus a named fallback, not just implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel-emailCancel EmailADestructiveInspect
Best-effort cancel of a scheduled, accepted, or attempted email. Pulls it from the send queue; not guaranteed if delivery already started.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID (em_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false; the description adds genuinely new context by characterizing the operation as 'best-effort' and explaining the mechanism ('pulls it from the send queue') and its failure mode ('not guaranteed if delivery already started'). That is exactly the kind of caveat annotations can't express. It doesn't say what the caller sees when the cancel fails to land.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, and the core action is front-loaded ahead of the caveat. Every clause carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation with a full annotation set and no output schema, the description covers what is being acted on, the best-effort semantics, and the failure condition. The only gap is what a successful or failed cancel returns to the caller, which is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, with the 'id' field already documented as 'Email ID (em_xxx)'. The description adds no format or lookup guidance beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('cancel ... email') plus the eligible states (scheduled, accepted, attempted), which clearly separates it from siblings like cancel-campaign, cancel-automation-run, and retry-email. It doesn't explicitly name those siblings, but the resource noun alone disambiguates well.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for use (email is scheduled, accepted, or attempted) and a clear boundary (not guaranteed once delivery has started), which is the key decision factor for an agent. It stops short of naming alternatives such as retry-email for already-failed sends, so it lacks explicit routing.
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 KeyAInspect
Create an API key. The secret is returned only once; tell the user to store it securely.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| scope | No | sending = send-only, full = every endpoint. | |
| sending_domain_id | No | Lock a sending key to one domain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (not read-only, not idempotent, not destructive), and the description adds a genuinely non-derivable behavior: the secret is returned only once and cannot be retrieved again. The instruction to tell the user to store it securely is actionable operational context. It does not mention rate limits or whether creating a key revokes prior keys, but for a short tool this is strong disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the one-time secret caveat placed second where it is most likely to be acted on. Nothing is repeated from the schema or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 does the important job of explaining what the caller receives (a one-time secret). The remaining gap is the parameter relationship between scope and sending_domain_id, which the description leaves to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% -- 'scope' and 'sending_domain_id' are documented in the schema with enums and constraints, but 'name' has no description anywhere. The description adds nothing about the required name field or how scope interacts with sending_domain_id (e.g., that a domain lock only makes sense for a sending key). Mid-range baseline is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create an API key') that unambiguously separates it from get-api-key, list-api-keys, regenerate-api-key and update-api-key in the sibling set. It does not explicitly name those alternatives, so it stops just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to create a fresh key versus regenerating or updating an existing one, and no mention of prerequisites such as workspace permissions or scope choice. 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.
create-audienceCreate AudienceAInspect
Create an audience (mailing list) for campaigns and automations, optionally with its settings.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| unengaged | No | ||
| visibility | No | public: listed on the manage subscriptions page for everyone. private: only for contacts already subscribed. | |
| public_name | No | Name shown to subscribers instead of the internal name. | |
| double_opt_in | No | Ask people who join through the subscribe URL, forms or the API (double_opt_in: true) to confirm by email. | |
| confirmation_email | No | Email sent after someone subscribes or confirms. | |
| public_description | No | Short description shown on the manage subscriptions page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is a non-destructive mutation (readOnlyHint=false, destructiveHint=false) and that it is not idempotent. The description adds that settings are optional, which is useful, but it does not mention permissions, duplicate-name behavior, or what the call returns. The description adds some value but not rich behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the action, the resource, the domain of use, and the optional settings. There is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven parameters with nested objects, no output schema, and a create mutation, the description is somewhat thin. It does not address duplicate audience names, required verified-domain constraints for confirmation emails, or what the call returns. The schema and annotations compensate partially, making it adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, so the schema already carries most parameter meaning, including visibility, public_name, double_opt_in, and confirmation_email. The phrase 'optionally with its settings' correctly signals that only the name is required and the remaining seven parameters are optional settings, but it does not explain the individual settings beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create an audience') and clarifies the resource as a mailing list, which distinguishes it from update-audience, delete-audience, and list-audiences. The added purpose ('for campaigns and automations') makes the tool's role immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying the audience is 'for campaigns and automations', but it does not state when to use this tool versus update-audience or merge-audiences, nor does it mention any prerequisites such as unique naming. It gives context but no explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-automationCreate AutomationAInspect
Save a new automation as a draft: a trigger step, action steps, and connections between step keys. Saving runs nothing; steps run only after start-automation (for each matching event) or trigger-automation (one run). Each action does the same as one tool: send_email = send-email with a template, forward_email = forward-email, add_to_audience = add-audience-subscriber, remove_from_audience = remove-audience-subscriber, update_subscription = bulk-unsubscribe/resubscribe, edit_contact = update-contact, add_tag/remove_tag = add/remove-contact-tags, update_score = update-contact-score, create_contact = create-contact, add_to_suppressions = create-suppression, remove_from_suppressions = delete-suppression, exit_automation = remove-contact-from-automation. Steps that call webhooks can only be added in the dashboard or the REST API. Flow steps: wait, wait_until (date / event / condition, with timeout), condition, goal (runs jump to it when the contact meets it), experiment, run_automation (enter or move to another automation), end_run, end. settings.exit_conditions cancels a contact's run when an event or condition matches (e.g. a purchase). Plans: goal steps and custom events (contact.on_event in exits, goals and waits) need Pro or Business; the contact.on_event trigger needs Business (403 plan_required otherwise). Example "webinar": trigger contact.added_to_audience (registrants) -> wait_until date {type: "global", key: "webinar_date"} 1 day before -> send_email reminder -> wait_until date 1 hour before -> send_email; a goal on contact.on_event c:purchase -> add_tag customer -> exit_automation all -> run_automation onboarding; a separate automation on contact.score_changed threshold 50 starts the sales sequence.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| steps | Yes | ||
| context | Yes | What the automation runs on. | |
| settings | No | ||
| connections | Yes | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it is a non-read-only, non-destructive, non-idempotent write. The description adds real behavioral context beyond that: saving is inert until a start/trigger call, plan gating surfaces as 403 plan_required, and exit_conditions cancel a run when an event or condition matches. It does not mention what happens on duplicate names or whether repeating the call creates a second draft, which is the one gap 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the definition and the inert-until-started constraint before the long action mapping, so the critical facts come first. The action-to-tool enumeration and the multi-paragraph 'webinar' example are dense but each earns its place as concrete guidance; the example could be trimmed without much loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, deeply nested create tool with no output schema, the description covers what an agent needs: the draft-only semantics, the execution model, supported versus unsupported step types, plan gating, exit conditions, and a worked end-to-end example. Missing return-shape detail is minor because the tool's product is a saved draft and the description leaves no ambiguity about the call's effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema description coverage is only 17%, so the description must compensate, and it does: it maps each action value to the equivalent sibling tool (send_email = send-email, update_subscription = bulk-unsubscribe/resubscribe, etc.), explains the flow-step semantics of wait, wait_until modes and branches, condition, goal (runs jump to it), experiment, run_automation and end/end_run, and clarifies that settings.exit_conditions takes an event or a condition. It leaves 'context' and 'connections.branch' largely to the schema, but the added meaning is substantial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Save a new automation as a draft') and enumerates the shape it takes (trigger step, action steps, connections between step keys). It immediately separates itself from the sibling tools that launch automations by stating that saving runs nothing and that start-automation/trigger-automation are what execute it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternatives explicitly (start-automation for each matching event, trigger-automation for a single run) and gives exclusions: webhook steps can only be added via dashboard or REST API, and goal steps / custom events require Pro or Business with contact.on_event needing Business (403 plan_required). That is a genuine when-to-use / when-not / prerequisite set rather than vague context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-campaignCreate CampaignAInspect
Create a draft campaign. Add recipients with update-campaign, then send with send-campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| tags | No | Labels for filtering and the calendar (up to 20). | |
| ab_test | No | A/B test. Send { enabled: false } to turn it off. | |
| content | No | Campaign body: HTML when content_type is html (the default), plain text when it is text. | |
| subject | No | ||
| reply_to | No | ||
| from_name | No | ||
| from_email | No | Sender address on a verified domain. | |
| utm_params | No | UTM overrides. Values may use {campaign_name}, {campaign_id}, {subject}, {variant}, {send_date}. | |
| track_loads | No | Override the sending domain's open tracking for this campaign. null follows the domain (the default). | |
| content_type | No | ||
| preview_text | No | Inbox preview text. | |
| track_clicks | No | Override the sending domain's click tracking for this campaign. null follows the domain (the default). | |
| utm_tracking | No | Add UTM parameters to every link (default utm_source=emailit, utm_medium=email, utm_campaign=<campaign name>). | |
| exclude_unengaged | No | Skip contacts sent 3+ campaigns in 90 days without opening or clicking any. | |
| smart_sending_hours | No | Skip contacts another campaign emailed within this many hours (16 is common). null turns it off. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, idempotent=false and openWorld=false. The description adds the useful fact that the result is an unsent draft with no recipients. It does not warn that retries create duplicate drafts despite idempotentHint=false, nor mention any domain/verification requirement for from_email.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and then the sequencers. Every clause carries routing information; nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter creation tool with no output schema, the description is adequate on workflow but silent on what comes back (presumably a campaign id needed for update-campaign) and on the draft's default settings. An agent can act, but with avoidable guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 69%, a mid-range case where the schema documents the nontrivial fields (ab_test, utm_params, tracking overrides) while the plain fields are self-explanatory. The description adds no parameter meaning at all, so it neither compensates for the gap nor detracts; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Create a draft campaign" gives a specific verb plus the key state qualifier (draft, not sent), which meaningfully separates it from send-campaign and the other create-* tools. It does not explicitly contrast with adjacent creation tools like create-template, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description spells out the workflow: add recipients via update-campaign, then send via send-campaign. That tells an agent the campaign is empty on creation and which sibling to call next. It stops short of stating when a campaign is the wrong choice (e.g. vs. automation) or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-contactCreate ContactAInspect
Create a contact, optionally subscribing it to audiences and setting custom fields, tags and a lead score.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags (stored lowercase). | |
| Yes | |||
| score | No | Initial lead score. | |
| audiences | No | Audience IDs to subscribe to. | |
| last_name | No | ||
| first_name | No | ||
| unsubscribed | No | ||
| custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false, so safety is covered. The description usefully discloses that ancillary fields are optional, but it omits the critical behavior for a non-idempotent create: what happens when the email already exists, and what identifier is returned. That is a meaningful gap beyond the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the core action first and the optional extras after; no filler and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with a nested custom_fields object, no output schema and a non-idempotent annotation, the description should say what a successful call returns and how existing-email collisions are handled. It covers the field surface adequately but leaves the agent guessing on outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 38%, so the description must compensate; it names four of eight parameters (audiences, custom_fields, tags, score) and clarifies they are optional. It says nothing about email being required, nor about first_name/last_name/unsubscribed, so partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a contact') and clarifies that audience subscription, custom fields, tags and lead score are bundled optional capabilities. That distinguishes it from narrower siblings like add-contact-tags or add-audience-subscriber, though it never names those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'optionally subscribing it to audiences and setting custom fields, tags and a lead score' implies this is the one-shot creation path versus follow-up calls to the tag/audience tools. However there is no explicit when-to-use guidance, no mention of update-contact for existing records, and no stated precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-domainCreate DomainAInspect
Add a sending domain. Returns the SPF, DKIM, return-path, and DMARC DNS records to publish before verifying.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Domain or subdomain, e.g. mail.acme.com. | |
| incoming | No | Accept inbound email for this domain. | |
| outgoing | No | Allow sending from this domain. | |
| track_loads | No | Track opens. | |
| use_for_any | No | ||
| track_clicks | No | Track link clicks. | |
| dmarc_reports | No | Collect DMARC aggregate reports. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-destructive, non-idempotent write and no output schema exists, so the description earns real credit for disclosing the return payload (SPF, DKIM, return-path, DMARC records) and the fact that verification cannot succeed until those records are published. It omits failure modes such as duplicate-domain errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the core action front-loaded and the consequential return value stated immediately after. Nothing here could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully covers what comes back and the DNS prerequisite, which is the key thing an agent must relay. It leaves the undocumented use_for_any flag and post-creation verification steps unexplained, so it is strong but not exhaustive for a 7-parameter write tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86%, so the schema already explains name, incoming, outgoing, and all tracking flags; the description adds no parameter-level meaning. It notably never mentions the inbound-email option, which sits slightly at odds with calling it a "sending domain."
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Add a sending domain" gives a specific verb+resource, distinguishing it from list-domains/get-domain/delete-domain. It doesn't explicitly contrast with update-domain or verify-domain, though "before verifying" gestures at the verify flow, so it stops just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "to publish before verifying" implies a workflow ordering (create → publish DNS → verify-domain), but there is no explicit statement of when to use this versus update-domain, or what to do if the domain already exists. 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.
create-formCreate FormBInspect
Create a draft signup form (popup, full page, flyout, embed, or banner).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | No | ||
| settings | No | Display and audience settings. | |
| definition | No | Form steps and fields. Omit on create to start from the default template. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-readOnly, non-idempotent, non-destructive, closed-world; the description's addition of 'draft' tells the agent the created resource is not immediately live and needs a publish step — a meaningful detail beyond annotations. It still omits what happens if a form with the same name exists (non-idempotent consequence) and 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. The parenthetical enum list is the only slightly redundant part since the schema already enumerates those values.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 params including two nested free-form objects and no output schema, the description should at least hint at the create-to-draft-to-publish lifecycle and whether a default template is used. The schema mentions the default template, so the description is not required to, but its coverage of behavior for a mutating tool is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is roughly 50%: 'settings' and 'definition' carry descriptions, while 'name' and 'type' do not. The description simply restates the type enum values already in the schema and adds no syntax or constraint meaning for the required 'name' parameter. Baseline 3 applies since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Create a draft signup form') and it names the form types supported, so the agent knows this is the create counterpart to update-form/publish-form/delete-form. It doesn't explicitly differentiate itself from 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'draft' implies the form is not live until publish-form is called, which is a useful implicit cue. However, there is no explicit statement of when to use this versus update-form, nor any prerequisites (workspace context, permission needs) spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-global-valueCreate Global ValueAInspect
Create a global value, used as {{global.}}. Automations can wait until a date value ("1 day before global.webinar_date").
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Lowercase letters, digits and _, starting with a letter. | |
| name | No | ||
| type | No | Default text. date is YYYY-MM-DD, datetime is ISO 8601. | |
| value | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is a non-read-only, non-destructive, non-idempotent mutation. The description adds useful context about how global values are consumed, including a date-wait example. It does not disclose collision behavior when the key already exists, permission requirements, or whether creation fails on duplicate keys, which matters 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences that front-load the core purpose and then add the most relevant usage context. Every sentence contributes something an agent would not get from the tool name alone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation tool with no output schema and only 40% schema description coverage, the description leaves several gaps. It communicates purpose and downstream usage well, but an agent still lacks guidance on duplicate keys, failure modes, and how type and value interact.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low at 40%, so the description should compensate more. It adds operational meaning for the key reference syntax and date-value behavior, but does not explain the name, description, or how the value parameter must align with the selected type. The added semantics are useful but incomplete against the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: create a global value. It also explains how the created value is referenced as {{global.<key>}}, which helps an agent understand the tool's output context. It does not explicitly differentiate this from update-global-value or delete-global-value, but the create 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by explaining that global values are referenced in templates and can be used in automation date waits. However, it does not state when to use this tool instead of update-global-value, or what to do if a value with the same key already exists. The guidance is contextual but not prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-suppressionCreate SuppressionCInspect
Add an email address to the suppression list so Emailit never sends to it.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| Yes | |||
| reason | No | ||
| keep_until | No | Expiry as ISO 8601, Unix timestamp, or natural language like "in 30 days". Null keeps it forever. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false and idempotentHint=false, so the safety profile is covered. The description adds the delivery-blocking consequence, but says nothing about what happens on a duplicate address — which matters given idempotentHint=false — nor about required scopes/permissions or the returned record.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, which is the right shape for a simple create tool. It is arguably too terse given the undocumented parameters, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters at 25% coverage, no output schema, and a non-idempotent mutation, the description would need to explain the type values, duplicate behavior, and what gets created. None of that is present, so a caller cannot be confident it will invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%: keep_until is documented in the schema, while email, reason and the type enum (recipient/bounce/complaint/unsubscribe) carry no explanation anywhere. The description compensates for none of this, so an agent must guess what each suppression type means and what reason is used for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (add) and resource (suppression list) plus the concrete effect: Emailit will never send to that address. That is clear enough to distinguish it from get-suppression or delete-suppression by name alone, but the description never names those siblings explicitly, leaving the routing to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 update-suppression (e.g. changing an existing suppression's expiry) or the bulk unsubscribe/contact tools. The only usage signal is the implied 'add an address that should never be mailed', which is context rather than a decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-templateCreate TemplateAInspect
Create an email template. Reference it from send-email by ID or alias; publish it before use.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Default sender. | |
| html | No | HTML body; supports {{variables}}. | |
| name | Yes | ||
| text | No | ||
| alias | Yes | Unique slug used by send-email. | |
| editor | No | ||
| subject | No | Subject; supports {{variables}}. | |
| reply_to | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is a non-destructive, non-idempotent write. The description adds one meaningful behavioral trait beyond that – the draft/publish lifecycle gate ('publish it before use') – but says nothing about duplicate-alias handling or what is returned for referencing later, which matters 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the essential lifecycle constraint. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent create with 8 parameters and no output schema, an agent still lacks duplicate-alias behavior, editor-mode semantics, and the response handle. The publish-before-use note is valuable but partial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% with 8 parameters. The description clarifies that alias (and ID) are the handle used by send-email, but leaves text, editor (four-value enum), reply_to and name entirely unexplained, and does not note the {{variables}} templating contract for html/subject.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create an email template'), which cleanly separates it from update-template, delete-template and publish-template in the sibling list. It does not explicitly name those alternatives, so differentiation is implied rather than spelled out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear downstream context: the template is consumed by send-email via ID or alias, and must be published before use. That is real when-to-use guidance, but there are no exclusions or direct pointers to publish-template as the required next step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-verification-listCreate Verification ListAInspect
Verify up to 10,000 addresses in the background with the full mailbox check. Uses verification credits for each address; poll get-verification-list for progress and result counts.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| emails | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say it is a non-destructive, non-idempotent write; the description adds genuinely new traits: asynchronous background execution, per-address credit consumption, and the polling follow-up. It does not say whether duplicate list names are allowed or what a credit shortfall does mid-run, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the capability and limit front-loaded and the operational follow-up second. Nothing is redundant beyond the harmless restatement of the batch cap.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers async behavior, cost, and the polling path, but for a write tool with no output schema it omits what the call returns — critically, whether an ID is returned that get-verification-list needs. An agent knows the workflow shape but not how to thread the result into the next call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains 'emails' only implicitly as 'addresses' and repeats the 10,000 cap already enforced by maxItems; the required 'name' parameter (label? unique key? used for lookup later?) is never addressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (verify) and resource scope (up to 10,000 addresses, background, full mailbox check), which cleanly separates it from the single-address verify-email sibling. The follow-up polling tool is named, so the agent can see the whole workflow immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes clear this is the bulk/background path and tells the agent to poll get-verification-list rather than wait. It does not explicitly contrast with verify-email for small batches or note prerequisites (e.g. credit balance required), which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-webhookCreate WebhookAInspect
Create a webhook: Emailit will send email, domain, contact, and campaign events to this URL. The response includes the signing secret.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTPS endpoint that receives event POSTs. | |
| name | Yes | ||
| events | No | Event types to subscribe to. With all_events, list only what it leaves out: w:/c: types (or w:* / c:*) and opt-in site-tracking events. | |
| filter | No | Only deliver events matching these rules. Null clears the filter. | |
| enabled | No | ||
| all_events | No | Subscribe to every system event type except the opt-in site-tracking events (product.viewed, cart.updated). Workspace (w:) and custom (c:) events are not included either; list them in events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=true), so the bar is lower. The description adds genuinely non-obvious behavior: the response returns the signing secret, which matters for later signature verification and is not implied by any annotation or schema field. It does not mention that the endpoint may need verification or that the secret is only returned at creation time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the action and its effect come first, and the return-value fact is second. Every clause carries information an agent would not get from the schema alone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A six-parameter mutation tool with no output schema benefits from the explicit note about the signing secret in the response. However, defaults are unaddressed (what happens if events and all_events are both omitted), and there is no guidance on endpoint validation or idempotency, leaving real gaps for a creation tool with a nested filter parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 67% schema coverage, the schema already documents url, events, filter, and all_events in detail. The description reinforces which event families exist but adds nothing about the events-vs-all_events interaction, the filter rule object, or the undocumented name/enabled parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Create a webhook") and immediately explains the effect: Emailit POSTs email, domain, contact, and campaign events to the URL. That is clearly more than a restatement of the name. It stops short of distinguishing itself from update-webhook or test-webhook, which are the nearest ambiguous siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to create a new webhook versus updating an existing one, nor any pointer to test-webhook or list-webhooks for verification. The only implicit cue is the event categories listed, which hints at the subscription use case but never states prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-workspace-eventCreate Workspace EventBInspect
Define a workspace event and its typed properties (string, number, date, boolean). Send it afterwards as w:. Pro and Business plans.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Event name, e.g. "customer.type". | |
| title | No | ||
| properties | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, non-idempotent, closed-world, so the mutation profile is covered. The description adds genuinely new context: the plan gating and the w:<name> dispatch convention. It stops short of disclosing what happens when a name collides with an existing event, which is the main behavioral risk 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and resource, followed by the follow-up workflow and the plan constraint. No filler. The telegraphic "Send it afterwards as w:<name>" is terse to the point of being slightly cryptic, which keeps it off a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter create mutation with no output schema, the description covers purpose, the follow-up send step, and plan eligibility, but omits duplicate-name behavior, whether the created event identifier is needed downstream, and whether properties can be amended later. Adequate, with real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, so the description needs to compensate and partially does: it enumerates the four property types (string, number, date, boolean) that constrain the nested `properties` array. The `title` and `description` parameters are undocumented in both schema and description, leaving half the surface unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Define a workspace event and its typed properties") and enumerates the property types allowed, so the agent knows exactly what is being created. It does not name the sibling it is distinct from (update-workspace-event, delete-workspace-event), but the "send it afterwards" clause implicitly routes to send-event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The "send it afterwards as w:<name>" line gives a real usage sequence: define here, then dispatch through send-event. "Pro and Business plans" states an eligibility constraint. However there is no explicit when-not guidance (e.g. what to do if the event already exists, or how this differs from update-workspace-event).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-api-keyDelete API KeyADestructiveIdempotentInspect
Permanently revoke an API key. Apps using it stop working immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | API key ID. |
TDQS
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 genuinely useful blast-radius context that annotations cannot convey: apps using the key stop working immediately, making the operational consequence concrete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the permanence warning front-loaded and the consequence second. Zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with rich annotations and no output schema, the description covers what an agent must know before calling: it is permanent and immediately impactful. Only the alternative-action routing (regenerate vs delete) is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'id' parameter, so the schema already carries the semantics and the description rightly does not restate it. Baseline 3 applies; no added value is offered, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('revoke') and resource ('API key') plus the permanence modifier, which distinguishes it from the reversible sibling operations like update-api-key or regenerate-api-key. An agent can immediately tell what this does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this over the closely related alternatives. The most important distinction — revoke permanently versus regenerate-api-key or update-api-key — is never named, even though those siblings exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-audienceDelete AudienceADestructiveIdempotentInspect
Permanently delete an audience and its subscriber records. Contacts are kept.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Audience ID. |
TDQS
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 description is not carrying the safety burden alone. It still adds genuinely useful behavior context by naming exactly what is destroyed (subscriber records) and what survives (contacts), which annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste; the destruction scope is front-loaded and the retention caveat follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive delete with full annotation coverage and no output schema, this covers what an agent must know: it is permanent and contacts are not affected. Only the absence of any rollback/irreversibility confirmation or prerequisite note keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (id) with 100% schema description coverage, so the schema fully documents it. The description adds no format, sourcing, or lookup guidance for the audience ID, leaving it at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (permanently delete) and resource (audience) plus a precise scope note: subscriber records go, contacts stay. That distinguishes it from bulk-remove-audience-subscribers and bulk-delete-contacts by implication, though 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the 'permanently' and 'contacts are kept' framing tells an agent this is an irreversible container removal, not a contact purge. There is no explicit when-to-use/when-not statement and no named alternative such as update-audience for reversible changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-automationDelete AutomationADestructiveIdempotentInspect
Delete an automation. New events no longer start runs; runs already in progress finish.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). |
TDQS
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 genuinely new behavioral detail the annotations cannot express: new events stop starting runs, but in-flight runs are allowed to complete. It stops short of saying whether the automation record itself is recoverable or whether dependent resources 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, and the core action is front-loaded before the side-effect clarification. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with no output schema and annotations that already flag destructiveness, this is nearly sufficient: the side effect on running executions is the main thing an agent needs. What is missing is whether deletion is permanent or retrievable, and whether verification via get-automation is advisable first.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, and the schema documents it fully with the expected format ('Automation ID (aut_xxx)') at 100% coverage. The description adds nothing about the identifier, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete an automation') and immediately defines what deletion means operationally. It does not explicitly contrast with the very close siblings pause-automation, stop-automation, or cancel-automation-run, so an 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'runs already in progress finish' hints that this differs from stopping or cancelling a run, but the description never says when to choose delete vs stop-automation vs pause-automation. No prerequisites or warnings about permanence are given, leaving the agent to infer them from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-campaignDelete CampaignADestructiveIdempotentInspect
Permanently delete a campaign that has not been sent.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (cmp_xxx) or name. |
TDQS
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 value beyond that by stating permanence and an eligibility precondition (campaign must be unsent), though it does not explain failure behavior when the precondition is violated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with the destructive nature and the precondition front-loaded; every word earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with full annotations and full schema coverage, the description covers what is destroyed and the precondition. The only meaningful gap is not routing the agent to cancel-campaign for campaigns that have already been sent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'id' parameter is documented as accepting a camp_xxx ID or a name, so the schema carries the full burden. The description adds nothing about the identifier beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('delete a campaign') plus a scoping precondition ('that has not been sent'), which clearly signals it is for unsent campaigns only. It does not name the sibling to use for sent campaigns (cancel-campaign), so differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'has not been sent' implies when the tool is applicable, but it never states what to do otherwise (e.g., use cancel-campaign for sent campaigns) and gives no prerequisites or confirmation guidance for a destructive operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-contactDelete ContactADestructiveIdempotentInspect
Permanently delete a contact and its audience memberships.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID (con_xxx) or email address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered structurally. The description still earns credit by adding what actually gets destroyed — the contact's audience memberships — and reinforcing irreversibility with "Permanently," context the annotations cannot express. It doesn't cover auth requirements or behavior when the contact is missing, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler, and the most consequential fact (permanence plus cascade) is front-loaded. Nothing here is redundant with the title or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation with full schema coverage and rich annotations, the description supplies the missing piece — scope of deletion. Minor gaps remain around what happens on a nonexistent ID and whether the contact is also removed from automations, but no output schema is needed to be explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single `id` parameter already documents the con_xxx-or-email format, so the schema does the heavy lifting. The description adds no additional meaning about identifier handling, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Permanently delete a contact") and adds the side effect on audience memberships, which goes beyond a bare restatement of the name. It doesn't distinguish itself from the sibling bulk-delete-contacts or remove-audience-subscriber, so an agent must infer the single-vs-many boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is given. The description never points to bulk-delete-contacts for multi-record deletion or to remove-audience-subscriber when only membership removal is wanted, leaving the choice to inference 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-domainDelete DomainADestructiveIdempotentInspect
Permanently delete a domain. Sending from it stops immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. |
TDQS
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 covered. The description adds a concrete consequence beyond the annotations: outbound sending from the domain stops immediately, which tells the agent what blast radius to expect. It still omits whether deletion fails when the domain is attached to campaigns or whether related records cascade.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the destructive scope front-loaded and the operational consequence second. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool whose annotations already carry the safety flags, the description covers what is destroyed and the immediate side effect. It leaves out dependency/cascade behavior and any undone-state warning, which an agent confirming a destructive action would still want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required 'id' parameter with 100% schema description coverage, so the schema already identifies it. The description contributes nothing about the identifier (format, source, whether it accepts the domain name instead of the ID), which is the correct baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Permanently delete a domain', which unambiguously separates it from update-domain and verify-domain. It doesn't explicitly contrast with siblings, keeping 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of update-domain or verify-domain, nor any prerequisite note (e.g. whether a domain in active use can be deleted). The word 'Permanently' hints at caution but gives no explicit when/when-not rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-formDelete FormBDestructiveIdempotentInspect
Permanently delete a form. Embedded copies stop working.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Form ID (frm_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, so the bar is lower, yet the description adds real value by disclosing the downstream consequence that embedded copies stop working. It stops short of noting permission requirements or whether the form must be unpublished first.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero padding; the destructive nature is front-loaded and the consequence follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Placeholder.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single required parameter with 100% schema description coverage ("Form ID (frm_xxx)"), so the schema fully carries the load. The description adds no further meaning about the id, which is the expected baseline here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Permanently delete a form"), which is unambiguous. It does not explicitly distinguish itself from siblings like unpublish-form or bulk operations, but the delete semantics are clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to prefer this over the non-destructive unpublish-form alternative, or any prerequisites (ownership, published state). The agent must infer that deletion is the last resort.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-global-valueDelete Global ValueADestructiveIdempotentInspect
Delete a global value. Templates using it render it empty.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Global value ID (gv_xxx) or key. |
TDQS
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 structurally. The description adds genuinely new context: templates referencing the value render it empty, which tells the agent about downstream blast radius on live emails/templates. It still omits whether deletion is recoverable and whether in-use values can be deleted at all.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the action first and the consequence 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.
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 rich annotations and no output schema, the description covers what it does and one non-obvious side effect. It is nearly complete, though a note on irreversibility would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'id' parameter is documented as accepting a gv_xxx ID or key. The description adds nothing about 'id' beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Delete') and resource ('a global value'), which cleanly separates it from update-global-value, get-global-value, and create-global-value in the sibling list. It does not explicitly name those alternatives, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to use this versus update-global-value (which could clear a value non-destructively) or bulk cleanup paths. The only contextual hint is the rendering consequence, which is impact information rather than selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-suppressionDelete SuppressionADestructiveIdempotentInspect
Remove an address from the suppression list so it can receive email again.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Suppression ID (sup_xxx) or email address. |
TDQS
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 clear. The description adds useful behavioral context beyond annotations by explaining the consequence: the address becomes eligible to receive email again. It does not mention irreversibility or confirmation, but the annotations carry that burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, and the core action and effect are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter deletion tool with rich annotations and fully documented schema, the description is nearly complete enough. It covers the business effect, though it omits explicit usage alternatives or confirmation expectations that could help in a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter is fully documented in the schema. The description does not add details about the id parameter and even says "an address" while the schema allows either a suppression ID or email address. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (remove) and resource (suppression list), and adds the outcome that the address can receive email again. It does not explicitly name siblings like update-suppression or list-suppressions, but the operation is clearly distinguishable from those tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "so it can receive email again" implies when to use the tool, but there is no explicit guidance on alternatives, exclusions, or prerequisites. An agent can infer its purpose, but the description does not route the agent among related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-templateDelete TemplateBDestructiveIdempotentInspect
Permanently delete a template.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID (tem_xxx). |
TDQS
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 mostly carried by structured data. The word 'Permanently' adds a small amount of value by signaling irreversibility, but the description says nothing about what is destroyed beyond the template record, whether deletion fails if the template is in use, or any auth/scope requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with the action front-loaded and no filler. It is efficiently sized, though the terseness leaves room that could have been used for a caveat about irreversibility or in-use templates.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-parameter mutation, the annotations already carry the risk profile and the schema fully documents the input, so nothing critical is missing for a correct call. However, no output schema exists and the description gives no hint of the response or failure modes, leaving it only minimally viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter 'id' is documented in the schema as 'Template ID (tem_xxx)', so the description has no gap to fill. The baseline of 3 applies: the schema does the work, and the description adds nothing about the identifier.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (template), clearly distinct from sibling delete-* tools that target other resources. It does not explicitly distinguish from unpublish-template or update-template, 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.
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 unpublish-template (which likely removes a template from availability without destroying it) or update-template. No preconditions, no mention of what happens when a template is still referenced by emails or campaigns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-webhookDelete WebhookBDestructiveIdempotentInspect
Permanently delete a webhook. Pending deliveries are dropped.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID (wh_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the core safety profile is structured data. The description adds genuine domain context beyond that – 'Permanently' and 'Pending deliveries are dropped' – which tells the agent about in-flight data loss that annotations cannot express. It stops short of stating error behavior for a nonexistent ID or that the webhook stops firing immediately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the destructive action front-loaded and the consequence tucked behind it; nothing is wasted. It is arguably a touch terse for a destructive operation, but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with full annotation coverage, the description supplies the one fact annotations omit: pending deliveries are lost. Combined with the 100%-covered schema and destructive/idempotent hints, an agent has enough to call it correctly, though a note on failure mode for an unknown ID would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with 'id' documented as 'Webhook ID (wh_xxx).' including the expected format. The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Permanently delete a webhook') that clearly distinguishes it from get-webhook, update-webhook, and the many other delete-* siblings by naming the resource. It does not, however, contrast it against a sibling such as update-webhook for reversible disabling, so differentiation is by noun rather than explicit text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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-webhook (disable) or the retry-webhook-request siblings, and no mention of prerequisites or irreversibility checks. The agent must infer that this is the terminal teardown option.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-workspace-eventDelete Workspace EventADestructiveIdempotentInspect
Delete a workspace event definition. Stored events are kept; new events of this type are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Definition ID (etp_xxx), name, or w:name. |
TDQS
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 genuinely non-redundant behavior: stored events are retained while new events of the type are rejected — this is the key operational fact beyond what annotations say. It stops short of stating what happens to in-flight or referenced events, or error behavior for an unknown ID.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the action front-loaded and the non-obvious side effect immediately after. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter delete with full annotation coverage and no output schema, this is nearly complete: the agent knows the action, the identifier, and that stored data survives. A brief note on whether deletion is reversible or fails on unknown IDs would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, with the schema itself documenting the accepted 'etp_xxx / name / w:name' forms. The description adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Delete') plus a precisely scoped resource ('a workspace event definition'), and the second sentence disambiguates it from deleting the stored events themselves — a distinction an agent could otherwise get wrong given the sibling 'get-event'/'list-events' family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the consequence stated ('new events of this type are rejected'), so an agent can infer this is for stopping future event ingestion. But it never names an alternative or exclusion — e.g. when to use update-workspace-event to disable instead, or whether this affects existing automations that reference the event.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export-contactsExport ContactsARead-onlyIdempotentInspect
Export contacts matching the filters as CSV text (email, names, subscription, audiences, custom fields).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Only contacts with this tag (comma-separate several for any of them). | |
| page | No | Page number (default: 1). | |
| sort | No | Sort column: email, first_name, last_name, name, audiences, created_at, updated_at, unsubscribed, score, audience_id, custom_fields.<key>. | |
| limit | No | Results per page (max: 100). | |
| match | No | Combine filters with AND (all, default) or OR. | |
| order | No | Sort direction. | |
| search | No | Free-text search. | |
| filters | No | Structured filters, combined with AND unless match is "or". | |
| max_score | No | Only contacts with at most this lead score. | |
| min_score | No | Only contacts with at least this lead score. | |
| audience_id | No | Only contacts in this audience. | |
| unsubscribed | No |
TDQS
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 usefully adds the return format and column set. However, it leaves a real ambiguity: it accepts page/limit (max 100), so it is unclear whether the CSV covers all matching contacts or only one page, and no note on result size or rate limits is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that names the action, the filter scoping, the output format, and the columns. Nothing is wasted and no sentence is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 parameters, 92% schema coverage, and full annotations, the definition is serviceable but thin: the pagination behavior of an export, and how it differs from list-contacts, are left unstated. Since there is no output schema, a short note on the CSV's shape/paging would have closed the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 92%, so the baseline is 3; the description does add a bit by framing the parameters as filters that shape the exported column set (email, names, subscription, audiences, custom fields). It does not add syntax or semantics for individual parameters, which the schema already handles well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Export contacts") plus the output form (",CSV text") and the columns produced, which is more informative than the title alone. It stops short of naming the closest sibling (list-contacts) to make the export-vs-list distinction explicit, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"matching the filters" and "as CSV text" imply the use case (get a CSV of a filtered contact set), but there is no explicit when-to-use, when-not-to-use, or alternative such as list-contacts. Guidance is inferred from format rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forward-emailForward EmailADestructiveInspect
Forward an outgoing email to a new recipient. Default is a plain resend. Set include_headers to add forwarded headers and an optional comment. Limited to 3 forwards per hour per workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID (em_xxx). | |
| to | Yes | New recipient email address(es). | |
| body | No | Alias for comment. | |
| from | No | ||
| html | No | ||
| text | No | ||
| comment | No | Note prepended when include_headers is true. | |
| subject | No | ||
| include_headers | No | Add forwarded headers and an optional comment. Default is a plain resend. |
TDQS
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 description adds the valuable rate-limit constraint (3 forwards per hour per workspace) and the default-vs-headers behavior. It does not explain what makes the operation destructive (e.g., new delivery created, original untouched), which is a real gap for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose first, then the mode toggle, then the rate limit. Every sentence carries information an agent needs, with no redundancy against the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent 9-parameter tool with no output schema, the description covers the key mode toggle and rate limit but leaves several parameters and the destructive semantics (attachment handling, whether the original is modified, response shape) unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 56%, so roughly half the parameters are undocumented anywhere. The description adds meaning for include_headers and comment (including the body alias only indirectly), but 'from', 'subject', 'html', and 'text' go unexplained, and 'to'/'id' are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Forward an outgoing email to a new recipient') and clarifies the default mode versus the include_headers variant. It doesn't explicitly distinguish itself from send-email or retry-email, so sibling differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the default behavior (plain resend) and when to use include_headers, which is useful conditional guidance. However, it never names alternatives such as send-email, retry-email, or update-email, nor does it state when not to forward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-api-keyGet API KeyARead-onlyIdempotentInspect
Retrieve an API key (without its secret).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | API key ID. |
TDQS
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 the meaningful behavioral detail that the secret is omitted, but it does not describe authentication requirements or the returned fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no wasted words. It front-loads the action and immediately clarifies the secret-omission scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter getter with rich safety annotations, the description covers the main behavioral nuance: the secret is not returned. Because there is no output schema, it could say more about what metadata is returned, but the essential context for calling it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully documented in the schema as 'API key ID.' with 100% schema description coverage. The tool description does not add format examples or constraints beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieve an API key. The parenthetical '(without its secret)' adds an important scope detail and distinguishes it from operations that expose secrets, though it does not explicitly name sibling tools like list-api-keys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied: fetch a single API key when the key metadata is needed without revealing the secret. However, there is no explicit guidance on when to use this versus list-api-keys, update-api-key, or regenerate-api-key.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-audienceGet AudienceARead-onlyIdempotentInspect
Retrieve an audience with its settings, subscriber, unengaged and pending double opt-in counts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Audience ID. |
TDQS
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 contribution is disclosing the returned data shape (settings plus three count types), which is genuinely useful since no output schema exists, but it says nothing about permissions, not-found behavior, or whether counts are live.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence that front-loads the verb and resource and spends its remainder on return-value detail rather than filler. Nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only getter with rich annotations, this covers purpose and return contents adequately. The remaining gaps—not-found/error behavior and whether the counts are real-time—are modest for this tool class.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage and a single 'id' parameter documented as 'Audience ID.', the schema carries the parameter semantics. The description adds no format, ID-source, or lookup guidance beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Retrieve) and resource (audience) and enumerates what the response contains (settings, subscriber/unengaged/pending double opt-in counts). It is clearly distinguishable from mutation siblings like update-audience or delete-audience, though it doesn't explicitly contrast with list-audiences or get-audience-subscriber.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the singular 'get' + required id, i.e. fetch one known audience by ID. There is no explicit statement of when to prefer this over list-audiences or get-audience-subscriber, and no prerequisites or exclusion notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-audience-subscriberGet Audience SubscriberCRead-onlyIdempotentInspect
Retrieve one subscriber of an audience.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Audience ID. | |
| subscriber_id | Yes | Subscriber ID. |
TDQS
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. The description adds nothing beyond that – no note on permissions, error behavior for an unknown subscriber, or whether membership must exist – so it contributes no behavioral context of its own.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero waste and the resource stated up front. It is efficient, though the brevity reflects under-specification rather than disciplined compression.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read with full schema coverage and complete annotations, the definition is minimally sufficient. Still missing is any hint of the return payload (subscriber fields) or the failure mode when the subscriber is not in the audience, which would matter to an agent deciding whether to call this or list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'id' (Audience ID) and 'subscriber_id' (Subscriber ID) documented inline, so the baseline is 3. The description's phrase 'subscriber of an audience' loosely maps to the two-parameter scoping but adds no format, validation, or lookup detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Retrieve') and resource ('one subscriber of an audience'), and 'one' distinguishes it from the list-audience-subscribers sibling. However, it does not distinguish this from other single-resource getters such as get-contact, nor does it name the sibling it is not, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 tool versus list-audience-subscribers, get-contact, or update-audience-subscriber. The agent must infer usage entirely from the name and the presence of an 'id' + 'subscriber_id' pair.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-automationGet AutomationBRead-onlyIdempotentInspect
Retrieve an automation with its steps and connections.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). |
TDQS
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. The description adds one genuinely useful behavioral fact — that the response is a composite of steps and connections — but says nothing about depth, pagination, or whether missing IDs error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the payload hint ('steps and connections') is packed into the same clause rather than added as a separate line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-by-ID tool with full annotation coverage and a fully documented single parameter, the definition is essentially sufficient. The mention of steps and connections partially compensates for the absence of an output schema, though error behavior for an unknown ID is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'id' parameter is documented as an automation ID with the 'aut_xxx' format, so the schema carries the meaning. The description adds no parameter-level detail, which is acceptable for a one-param tool at full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve an automation') and clarifies the payload includes steps and connections, which distinguishes it from list-automations and from the narrower get-automation-run/get-automation-stats siblings. It doesn't explicitly name any sibling, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus list-automations (to discover IDs) or get-automation-run/step-stats (for execution data). The agent must infer the fetch-by-ID context entirely from the name and schema.
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 RunBRead-onlyIdempotentInspect
Retrieve one automation run with its step history.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). | |
| run_id | Yes | Automation run ID. |
TDQS
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 new behavioral fact — the response embeds step history rather than just run metadata — but says nothing about pagination, size limits, or error behavior for a missing run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the resource named before the payload detail; zero redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with full annotation coverage and complete param docs, this is close to adequate, but with no output schema the description is the only source of return-shape information and provides just one clause (step history). Minimum viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both required params (id, run_id) documented including the aut_xxx format hint. The description adds no parameter-level meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb ("Retrieve") with a specific resource ("one automation run") and adds scope ("with its step history"). This clearly distinguishes it from list-automation-runs, though it doesn't explicitly name the sibling or clarify versus get-automation/get-automation-stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Retrieve one" hints at single-record lookup versus a list, but there is no explicit when-to-use statement, no prerequisite (e.g., requiring run_id from list-automation-runs), and no routing to alternatives like get-automation or get-automation-step-stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-automation-statsGet Automation StatsBRead-onlyIdempotentInspect
Return run totals by status and outcome for an automation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). | |
| since | No | ISO 8601 start time. | |
| until | No | ISO 8601 end time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds that the result is aggregated counts rather than individual runs, which is useful context, but it says nothing about default time windowing, aggregation granularity, or timezone handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the extreme brevity leaves nothing to orient the caller beyond the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only aggregation with fully described params and no output schema, the description conveys the return shape at a high level. It omits default date-range behavior and the fact that output is aggregate counts rather than a list, which an agent deciding between this and list-automation-runs would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so id, since and until are already documented, including the aut_xxx format and ISO 8601 formats. The description adds no further semantics such as whether the range is inclusive, what happens when since/until are omitted, or which timezone applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb-plus-resource: returns aggregated run totals broken down by status and outcome for one automation. It is distinguishable from get-automation (entity detail) and list-automation-runs (raw runs), though it does not explicitly name the near-sibling get-automation-step-stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus get-automation-step-stats or list-automation-runs, and no prerequisites or exclusions. The agent must infer the choice 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-automation-step-statsGet Automation Step StatsBRead-onlyIdempotentInspect
Return totals for one step, including the delivery funnel for send_email steps.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). | |
| since | No | ISO 8601 start time. | |
| until | No | ISO 8601 end time. | |
| step_key | Yes | Step key from the automation definition. |
TDQS
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's only added behavioral value is disclosing that send_email steps return a delivery funnel, which is useful but thin; it says nothing about the shape of 'totals', time-window behavior, or what happens for steps in other states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero filler. It is efficient but correspondingly sparse; no clause is wasted, though there is little structure to speak of.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of describing returns; it names 'totals' and the send_email funnel but does not say what totals are included or what non-email steps return. Combined with a fully documented input schema and strong annotations, this is adequate but leaves a real gap for a stats tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — id, step_key, since and until are all documented in the schema itself. The description adds no further semantics for any parameter (e.g., whether since/until are required for funnel data, or expected format for step_key), so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-plus-resource ('Return totals for one step') and adds scope detail about the delivery funnel for send_email steps. It implicitly contrasts with get-automation-stats (whole automation) via 'one step', but never names that sibling, so distinguishing requires the agent to infer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'one step' hints at per-step granularity versus automation-level stats, and the send_email funnel mention hints at when the extra data appears. There is no explicit when-to-use, when-not-to-use, or named alternative (e.g., get-automation-stats).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-campaignGet CampaignBRead-onlyIdempotentInspect
Retrieve a campaign with its content, recipients, and stats.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (cmp_xxx) or name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds useful return-payload context (content, recipients, stats), but says nothing about behavior when the ID is unknown or ambiguous, and its "stats" claim overlaps confusingly with the dedicated get-campaign-stats sibling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, zero filler, and the most decision-relevant information (what comes back) is front-loaded immediately after the verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description's enumeration of returned data is the key contribution and it is present. For a read tool it is adequate, but it leaves the agent guessing about not-found behavior and about how name lookup resolves against ID lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents the cmp_xxx format and name alternative, so the schema carries the load. The description adds no syntax, resolution-order, or error semantics beyond it; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Retrieve a campaign") and even enumerates the payload (content, recipients, stats), which is more than a restatement of the title. It does not distinguish itself from nearby siblings like get-campaign-stats or list-campaigns, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus get-campaign-stats (stats-only) or list-campaigns (enumeration), nor any note that the id accepts either an ID or a name at this level. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-campaign-statsGet Campaign StatsARead-onlyIdempotentInspect
Results of a sent campaign: delivered, opens, clicks, bounces, unsubscribes, mailbox providers, and A/B variant results with the leader and its significance.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (cmp_xxx) or name. |
TDQS
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 genuine context beyond that by enumerating the metric families returned, including A/B variant results with leader and significance — content the agent otherwise could not anticipate since 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the resource and then the returned fields, with no filler. It is a noun phrase rather than a verb-led statement, which is slightly less directive, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description covers the main thing the agent needs — what data comes back. It stops short of noting edge cases such as stats being unavailable before a send or whether figures are live versus final.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'id' parameter already documents that it accepts a campaign ID (cmp_xxx) or name. The description adds nothing about the identifier, but with full schema coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (a sent campaign) and enumerates exactly what is returned — delivery, opens, clicks, bounces, unsubscribes, mailbox providers, and A/B results. That makes the purpose unmistakable, though it never explicitly contrasts with get-campaign (configuration) or get-automation-stats, which are the nearest siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus get-campaign, list-campaigns, or get-automation-stats, and no prerequisites such as 'the campaign must have been sent'. The agent must infer the usage 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.
get-contactGet ContactBRead-onlyIdempotentInspect
Retrieve a contact by ID or email address.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID (con_xxx) or email address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds no extra context such as what happens when the ID/email doesn't match (error vs empty), or that email lookup may be case-insensitive or ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no wasted words. It is sized appropriately for a trivial lookup, though it wastes its only sentence on information already in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read with full annotations and full schema coverage, the essential information is present. But with no output schema, the description could briefly say a contact object is returned and what a miss looks like, which it omits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already documents 'Contact ID (con_xxx) or email address.' The description merely repeats that same fact, adding no new meaning such as precedence when both forms could match or whether email must be verified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (retrieve) and resource (contact), and the get- prefix plus the description distinguish it from list-contacts and update-contact. However, it doesn't explicitly name the sibling boundaries the way a top score would.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the name and the single-contact scope: look up one contact when you have an identifier. No explicit statement of when to use this versus list-contacts or the bulk/export alternatives, and no prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-current-workspaceGet Current WorkspaceARead-onlyIdempotentInspect
Return the Emailit workspace this connection acts on by default, your role in it, and the granted scope. Call it to confirm which account changes apply to.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 contributes beyond that by stating this is the *default* workspace for the connection and that role and granted scope are returned, which is essential because 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste; the returned content is stated first and the usage cue second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no input parameters, full annotation coverage and no output schema, the description carries the burden of describing return values — which it does at field level (workspace, role, scope). It stops short of saying what happens if no default workspace exists or how the data is shaped, a minor gap for a simple identity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters (parameter count 0, empty properties object), so there is nothing for the description to disambiguate. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Return') with a specific resource ('the Emailit workspace this connection acts on by default') and enumerates what comes back: workspace, role, granted scope. It is clearly distinct from the many get-*/list-* siblings that target concrete resources like get-workspace-event or get-domain, though it never names an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call it to confirm which account changes apply to' gives a concrete decision context for invoking it before mutating operations. There are no exclusions or named alternatives, but for a zero-parameter identity probe there is little ambiguity to resolve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-dmarc-forensic-reportGet DMARC Forensic ReportCRead-onlyIdempotentInspect
Retrieve one DMARC forensic report.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. | |
| report_id | Yes | Forensic report ID. |
TDQS
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 nothing on top of that: no note about whether reports expire, how long forensic data is retained, or what happens if the report ID is unknown. With annotations carrying the entire behavioral burden, this is a minimal contribution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; nothing is redundant. It is efficient, though the 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.
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 an agent could learn what a forensic report record contains, and it says nothing about the return shape. For a tool requiring both a domain ID and a report ID, the absence of any hint about the two-key lookup leaves a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (id as Domain ID, report_id as Forensic report ID) are documented in the schema. The description adds no meaning beyond that, so the baseline 3 applies. It notably does not explain the coupling between the domain ID and report ID, which is the one non-obvious aspect of the call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb ("Retrieve") and a resource ("one DMARC forensic report"), which is enough to know it fetches a single record. But it is essentially a restatement of the title and never distinguishes it from close siblings like get-dmarc-report or list-dmarc-forensic-reports. The word "one" is the only clue that this is a single-item fetch rather than a listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 list-dmarc-forensic-reports or get-dmarc-report, and no stated prerequisites. The agent must infer usage purely from the tool name and its position among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-dmarc-reportGet DMARC ReportBRead-onlyIdempotentInspect
Retrieve one DMARC aggregate report with its records.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. | |
| report_id | Yes | DMARC report ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context that the report's records are returned inline, but says nothing about whether records are paginated or truncated for large reports, nor about error behavior when the report is not yet processed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is arguably too terse for a tool that returns a nested report body, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two fully documented required params and rich annotations, an agent can invoke this correctly, and there is no output schema to explain. Still, the description omits the return shape (report metadata plus the records array) and any retrieval caveats, leaving a modest gap for a report-fetching tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both required parameters (domain 'id' and 'report_id') documented in the schema itself. The description adds nothing about the ID formats or the relationship between the two, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (retrieve) plus resource (one DMARC aggregate report) and it notes that the embedded records come back with it. The word 'aggregate' subtly distinguishes it from get-dmarc-forensic-report and from list-dmarc-reports, though no sibling is named outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to use this versus list-dmarc-reports or get-dmarc-forensic-report, nor any prerequisite about where id/report_id come from. The only signal is the word 'one', which implies single-item retrieval rather than listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-dmarc-statsGet DMARC StatsBRead-onlyIdempotentInspect
DMARC pass/fail totals and alignment rates for a domain over a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. | |
| to | No | End date, ISO 8601. | |
| from | No | Start date, ISO 8601. |
TDQS
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 fully covered by structured fields. The description adds only that results are aggregated over a range; it says nothing about whether missing dates default to a window, whether the call is expensive, or the shape of returned counters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single eighteen-word sentence with the resource and the returned metrics front-loaded; nothing is padded or repeated. It is arguably too terse rather than too verbose, which costs less than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return value, and it does so only at a high level (pass/fail totals, alignment rates) without indicating structure or units. The optional from/to parameters and any default window are left unexplained, which is a real gap for a stats tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: id, from, and to are each documented in the schema, so the baseline of 3 applies. The description adds no extra semantics such as whether from/to are inclusive, what happens if only id is supplied, or maximum range limits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (implied retrieval) and resource: DMARC pass/fail totals and alignment rates for a domain over a date range. That is clear enough to act on, but it never distinguishes itself from close siblings like get-dmarc-report, get-dmarc-forensic-report, or list-dmarc-reports, which 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'over a date range' hints at aggregated analysis rather than raw report retrieval, but there is no explicit when-to-use, no mention of prerequisites (e.g., DMARC reporting must be enabled, a report uploaded), and no routing to get-dmarc-report for individual reports. Usage must be fully 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.
get-domainGet DomainARead-onlyIdempotentInspect
Retrieve a domain with its DNS records and per-record verification status.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so the safety profile is fully covered structurally. The description contributes some payload context by disclosing that DNS records and per-record verification status come back, but says nothing about lookup failures (unknown ID), pagination, or freshness of verification data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the most decision-relevant detail (the returned DNS records and verification status) is placed before any alternative tooling would need to be considered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with full annotation coverage, the description is nearly sufficient, and it usefully previews the return contents despite there being no output schema. It falls just short on error behavior and on whether verification status is live or cached, which an agent acting on that field would want to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One required parameter with 100% schema description coverage ('Domain ID.'), so the schema already carries the semantics and baseline 3 applies. The description adds nothing about the ID's format (UUID, hostname, or slug) or where an agent obtains a valid ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Retrieve') and resource ('a domain'), and additionally scopes the payload to DNS records and per-record verification status, which separates it from list-domains and from update-domain/verify-domain. It doesn't explicitly name a sibling, but the read-one-domain scope is unambiguous from the name-plus-description pair.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the single-domain fetch keyed by ID, with list-domains as the bulk alternative. There is no statement of when to prefer it, no mention of what to do if the domain is missing or unverified, and no pointer to verify-domain for acting on the verification status it returns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-emailGet EmailBRead-onlyIdempotentInspect
Retrieve a single email with its status and delivery details.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID (em_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is fully covered. The description adds only that the result includes status and delivery details — useful but thin, and it says nothing about 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no wasted words. It is sized appropriately, though its brevity is partly the source of the missing differentiation rather than pure efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must convey the return shape; 'status and delivery details' gestures at it but doesn't enumerate fields. For a simple single-record read with full annotation coverage this is close to adequate, but a bit more on the returned object would close the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with 100% schema description coverage ('Email ID (em_xxx)'), so the schema already carries the semantics. The description adds no extra meaning about the ID's format or source; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Retrieve') and resource ('a single email') and hints at the returned content ('status and delivery details'), which partially differentiates it from siblings like get-email-body and get-email-raw. However, it never explicitly says it is the email record/metadata view, so the boundary with get-email-meta remains blurry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, despite five closely related siblings (get-email-body, get-email-meta, get-email-raw, get-email-attachments, get-email). The agent must infer that this is the general record fetch while the others retrieve specific parts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-email-attachmentsGet Email AttachmentsCRead-onlyIdempotentInspect
Return the attachments of an email.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID (em_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world behavior, so the description adds nothing new. It does not say what happens when an email has no attachments, whether attachment content is included or only metadata, or whether results are paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste. It is concise but borders on under-specified rather than tightly constructed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the burden of explaining what is returned (attachment list, filenames, sizes, content, URLs). It does not, leaving the return shape entirely unknown to the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage ('Email ID (em_xxx)'), so the schema does the work. The description adds no extra meaning about the ID format or lookup behavior, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'Return the attachments of an email.' It implicitly distinguishes itself from siblings such as get-email-body and get-email-raw by naming the attachments specifically, but it never states that distinction explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like get-email or get-email-body, and no prerequisites. The agent must infer that this tool is for fetching attachment metadata/content for an already-known email ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-email-bodyGet Email BodyBRead-onlyIdempotentInspect
Return the parsed text and HTML body of an email.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID (em_xxx). |
TDQS
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 fully covered. The description adds the useful distinction that the body is parsed (text and HTML) rather than raw, but says nothing about behavior when a body is absent or in a non-text format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler and no redundancy. It is appropriately sized for a simple single-parameter read, though it leaves room for a short disambiguating clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining the return value, and it does so only loosely ('text and HTML body'). It does not say whether both parts are always present or how they are keyed in the response, which matters for a tool whose whole purpose is returning two body formats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'id' parameter is documented as an email ID with the em_xxx format. The description adds no semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Return') and states exactly what resource is returned: the parsed text and HTML body of an email. However, it makes no attempt to distinguish itself from the numerous email-related siblings (get-email, get-email-raw, get-email-meta, get-email-attachments), which an agent must disambiguate by name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this instead of get-email-raw or get-email, which is the critical decision for an agent facing four sibling readers of the same email resource. Usage must be inferred entirely from the word 'parsed' versus sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-email-metaGet Email MetaARead-onlyIdempotentInspect
Return email metadata and headers without attachment content.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID (em_xxx). |
TDQS
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 and idempotency are covered. The description adds only the scoping fact that attachment content is excluded; it says nothing about authentication, size limits, or what happens with a missing/invalid email ID.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the resource and carrying one useful qualifier. There is no filler or redundancy to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey what 'metadata and headers' actually contains, and that term is left vague. Given the density of sibling email getters, a brief note on what fields are returned would make the definition complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema description coverage ('Email ID (em_xxx)'), so the schema fully documents it. The description adds no additional meaning about the ID beyond the schema, which is the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return email metadata and headers') and adds a scope limiter ('without attachment content') that separates it from get-email-attachments. It does not differentiate itself from close siblings get-email, get-email-body, or get-email-raw, so an agent still has to infer which getter to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without attachment content' implies you should use this when attachments aren't needed, but there is no explicit when-to-use or when-not-to-use guidance and no named alternative. Against four sibling email-reading tools, the routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-email-rawGet Email RawBRead-onlyIdempotentInspect
Return the full raw MIME message of an email.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID (em_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds only that the return is the 'full raw MIME message'; it does not disclose size limits, encoding behavior, header inclusion, or other operational traits beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the tool's purpose and contains no wasted words. It is appropriately sized for a simple getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, the single parameter is fully documented, and annotations cover the safety profile. Still, without an output schema, the description could do more to explain what an agent receives and how this raw MIME retrieval differs from sibling retrieval tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the single 'id' parameter, including the 'em_xxx' format. The description does not add parameter meaning beyond what the schema already provides, which is acceptable baseline behavior when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Return the full raw MIME message of an email.' It is clearer than a bare getter because it specifies the raw MIME format. However, it does not distinguish this tool from close siblings like get-email, get-email-body, get-email-meta, or get-email-attachments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no explicit guidance on when to use this tool versus get-email-body, get-email-meta, or get-email. An agent can infer that 'raw MIME' is for raw source access, but there are no stated conditions, exclusions, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-eventGet EventCRead-onlyIdempotentInspect
Retrieve one event with its full payload.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Event ID (evt_xxx). |
TDQS
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 the response includes the 'full payload', which is a modest but real signal about return richness. No error/not-found behavior is mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero waste. It is not padded, though its brevity comes partly from under-specification rather than discipline.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-param read with full annotations, the description is minimally sufficient. It omits the distinction from get-workspace-event and list-events and says nothing about behavior when the ID is unknown, which are the likely agent failure modes here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage (evt_xxx format, minLength 1), so the schema carries the semantics. The description adds nothing about the ID beyond the schema. Baseline 3 is appropriate for high coverage plus one param.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (retrieve) and resource (one event), which is better than restating the name. But the sibling list includes both list-events and get-workspace-event, and the description never distinguishes this tool from those. An agent can't tell from the description alone which event-lookup tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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-events (bulk retrieval) or get-workspace-event. The one thing implied is 'one event', but no exclusions, prerequisites, or alternative routing are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-formGet FormARead-onlyIdempotentInspect
Retrieve a signup form with its definition and settings.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Form ID (frm_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, so the safety profile is fully covered. The description's only added value is that the response includes the form definition and settings — useful, but thin for a read-only tool whose annotations carry most of the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the payload ('definition and settings') comes immediately after the action. Nothing to trim, though it is so short that it barely structures anything.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-param read tool with full annotation coverage, the description covers what it fetches and hints at the returned content. No output schema exists, but 'definition and settings' is sufficient signal about the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter with 100% schema description coverage ('Form ID (frm_xxx)'), so the schema fully documents it. The description adds nothing about the id format or behavior on invalid IDs. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Retrieve a signup form' with the scope 'definition and settings', which distinguishes it from list-forms (enumeration) and update-form (mutation). It does not name those siblings explicitly, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The verb 'Retrieve' plus the required single form ID implies lookup-by-identifier, letting an agent infer when to use this over list-forms. But there is no explicit when/when-not guidance and no alternative tool is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-global-valueGet Global ValueBRead-onlyIdempotentInspect
Retrieve one global value by ID or key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Global value ID (gv_xxx) or key. |
TDQS
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 fully covered. The description adds only that lookup accepts either an ID or a key; it says nothing about missing-value behavior or error semantics, which is the main remaining unknown for a getter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource, with zero filler. Appropriately sized for a one-parameter getter, though extremely minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only single-record lookup with full schema coverage and annotations, this is minimally sufficient. What an agent cannot infer is what happens on a nonexistent or ambiguous identifier, and there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already documents "(gv_xxx) or key." The description's "by ID or key" restates the schema rather than adding format or fallback detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (retrieve a global value) and scope (one, by ID or key), which separates it from list-global-values by singular vs plural. It does not explicitly name the 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Retrieve one" implies the single-record use case versus the list tool, but the description never states when to use this rather than list-global-values or what to do if the identifier is unknown. 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.
get-suppressionGet SuppressionARead-onlyIdempotentInspect
Retrieve a suppression by ID or email address.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Suppression ID (sup_xxx) or email address. |
TDQS
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 idempotency profile is fully covered. The description adds nothing beyond the schema's key options — no not-found behavior, no return shape — which is acceptable given the annotation coverage but not additive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero waste, front-loading verb, resource, and accepted key types. Nothing superfluous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, non-destructive read tool with full schema coverage and rich annotations, this is nearly complete. Minor residual gaps are the response shape and whether an invalid/unknown identifier errors or returns empty; with no output schema, a brief note would have helped.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter's description already documents both the sup_xxx ID format and the email-address alternative. The description merely echoes the same 'ID or email address' duality, adding no format or validation detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Retrieve) and resource (a suppression) plus the lookup keys (ID or email address). It is distinguishable from list-suppressions and create/update/delete-suppression by its singular retrieval semantics, though it does not 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'by ID or email address' phrasing implies a single-record lookup rather than a filtered list, which points an agent away from list-suppressions. However, there is no explicit when-to-use/when-not statement or mention of what to do if the record is not found.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-templateGet TemplateBRead-onlyIdempotentInspect
Retrieve a template with its content.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID (tem_xxx). |
TDQS
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 fully covered structurally. The description adds one piece of behavioral value beyond that: the response includes the template content, not just metadata. It says nothing about not-found behavior or content format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler or redundancy. It is efficient, though its brevity borders on under-specification rather than optimal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with rich annotations and no output schema, the description covers the essentials. It omits any note on error/not-found behavior or what the returned 'content' represents, which would be helpful given there is no output schema to describe the return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter and 100% schema description coverage (the schema documents the 'tem_xxx' ID format and minLength), the schema carries the parameter semantics. The description adds no additional meaning about the id, which is the correct baseline for this case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve a template') and adds a meaningful scope cue ('with its content') that hints at a single-item fetch rather than a listing. It does not explicitly name the sibling it differs from (list-templates), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of alternatives such as list-templates or get-template variants. The only implicit cue is 'with its content', which weakly implies fetching a full template body when you already have an ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-verification-listGet Verification ListBRead-onlyIdempotentInspect
Retrieve a verification list with progress and result counts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Verification list ID (evl_xxx). |
TDQS
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's only additional context is that the response carries progress and result counts, which is modestly useful given there is no output schema, but it says nothing about pagination, missing IDs, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler; it leads with the verb and resource. It is arguably too terse to earn a 5, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read with strong annotations this is close to adequate, and the mention of progress/result counts partially compensates for the absent output schema. It still leaves the agent guessing how this differs from get-verification-list-results and what happens when the ID is unknown.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single id parameter is documented in-schema with its evl_xxx format. The description adds no syntax or lookup guidance beyond that, so the schema is doing all the work — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Retrieve) and resource (verification list) plus what the payload contains (progress and result counts). It does not distinguish itself from the closely related siblings list-verification-lists and get-verification-list-results, so an agent must infer the difference 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given, and no alternative is named. With siblings like list-verification-lists (enumeration) and get-verification-list-results (detail rows) present, the description misses the chance to route the agent between list, get, and results calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-verification-list-resultsGet Verification List ResultsBRead-onlyIdempotentInspect
Return per-address results of a verification list, optionally by status or result.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Verification list ID (evl_xxx). | |
| page | No | Page number (default: 1). | |
| limit | No | Results per page (max: 100). | |
| result | No | ||
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and a closed-world scope, so safety is well covered. The description adds nothing about pagination behavior (page/limit exist in the schema), what happens when a list is still processing, or result ordering — modest added value on top of the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the resource scope front-loaded and no filler. It is efficient, though the terseness borders on under-specification given five parameters and paginated output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated read-only listing with five parameters, no output schema, and 60% schema coverage, an agent still lacks guidance on pagination defaults/limits, result ordering, and whether filtering by status=processing returns empty. The description covers the core purpose but not enough of the operational detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%: id, page, and limit are documented in the schema, while result and status are bare enums with no inline descriptions. The description mentions filtering by result/status but does not clarify the semantic difference between the two or their relationship, so it only partially compensates for the coverage gap. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Return per-address results of a verification list"), which clearly separates it from get-verification-list (list metadata) and list-verification-lists. It does not explicitly name those siblings, so an agent must infer the distinction, but the scope statement is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Optionally by status or result" implies the filter use case but never states when to call this versus get-verification-list or list-verification-lists, nor any preconditions (e.g., the list must be completed before results exist). 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.
get-webhookGet WebhookARead-onlyIdempotentInspect
Retrieve a webhook with its subscribed events and filter.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID (wh_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds only that the response includes subscribed events and filter, with no mention of behavior for a missing/invalid ID or any permission scoping.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero filler; the return shape is stated immediately after the verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the right work by naming the returned fields (events and filter). It is nearly complete for a simple read; only not-found/error behavior is absent, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single `id` parameter is documented in the schema as 'Webhook ID (wh_xxx)'. The description adds nothing beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve a webhook') and adds what comes back ('with its subscribed events and filter'), so the agent knows this is a single-object fetch with expansions rather than a bare lookup. It does not explicitly distinguish itself from list-webhooks or get-* siblings, which keeps it at 4.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: fetching a single webhook by ID. There is no statement about when to prefer this over list-webhooks, or that it should follow create-webhook/update-webhook to confirm state. 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-workspace-eventGet Workspace EventCRead-onlyIdempotentInspect
Retrieve one workspace event definition.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Definition ID (etp_xxx), name, or w:name. |
TDQS
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 fully covered elsewhere. The description adds nothing beyond that - no note on error behavior for a missing ID, no mention of what a 'definition' contains, and no return-shape context despite there being 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with zero padding and the key scope word ('one') up front. It is efficient, though the terseness edges toward under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-record read with full annotation coverage and a fully described parameter, the description is minimally adequate. It leaves 'workspace event definition' undefined and gives no distinction from get-event, which is the main gap for this sibling-dense toolset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'id' parameter is documented in the schema as accepting a definition ID (etp_xxx), a name, or w:name. The description adds no further meaning, which is acceptable given the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb and resource ('Retrieve one workspace event definition'), and the word 'one' signals single-item retrieval versus list-workspace-events. However, it does not differentiate itself from the sibling get-event, and 'definition' is unexplained, so an agent must guess at the boundary between the two getters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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-workspace-events, get-event, or create/update-workspace-event. The agent must infer usage purely from the name and the single required 'id' parameter.
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 KeysBRead-onlyIdempotentInspect
List API keys in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1). | |
| sort | No | Sort column: name, type, scope, created_at. | |
| limit | No | Results per page (max: 100). | |
| match | No | Combine filters with AND (all, default) or OR. | |
| order | No | Sort direction. | |
| search | No | Free-text search. | |
| filters | No | Structured filters, combined with AND unless match is "or". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered by structured data. The description adds only that results are scoped to 'the workspace'; it says nothing about page size defaults, total counts, or returned fields. With annotations carrying the load, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the workspace scoping arrives immediately. It is efficient, though arguably too terse for a tool with seven filtering and pagination parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with pagination, multi-field sorting, free-text search, and compound filters, the description never signals that any of this exists, so an agent could call it with no parameters and assume it returns everything. No output schema exists, so the return shape is also undisclosed, leaving real gaps despite a strong schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so page, limit, sort, order, match, search, and filters are all documented in the schema itself. The description adds no additional meaning about filtering or sorting semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List API keys') plus scope ('in the workspace'), which separates it from get-api-key, create-api-key, and delete-api-key by name alone. It doesn't explicitly name a sibling alternative, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this over get-api-key for a known key, nor any mention of pagination behavior or what to do when the result set is large. 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.
list-audiencesList AudiencesARead-onlyIdempotentInspect
List audiences in the workspace. Archived audiences are hidden unless archived is "true" or "all".
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1). | |
| sort | No | Sort column: name, public_name, visibility, subscribers_count, created_at. | |
| limit | No | Results per page (max: 100). | |
| match | No | Combine filters with AND (all, default) or OR. | |
| order | No | Sort direction. | |
| search | No | Free-text search. | |
| filters | No | Structured filters, combined with AND unless match is "or". | |
| archived | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds the non-obvious default that archived audiences are excluded unless explicitly requested — behavior that is not encoded anywhere in the schema (the archived property carries no default and no description).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, each carrying distinct information: what the tool returns and how the most surprising parameter behaves. Front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a well-documented 8-parameter schema and full annotations, the description covers what structured fields do not: the archive-exclusion default. Remaining gaps (pagination shape, return payload) are either in the schema or low-stakes given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (88%), so the baseline would be 3. The description earns above baseline by documenting the semantics of the one undocumented parameter, archived, whose enum values 'true'/'false'/'all' are otherwise unexplained and whose default is silent in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List audiences') plus the scope ('in the workspace'), which an agent can distinguish from get-audience or list-audience-subscribers by name alone. It doesn't explicitly name what it is not, but the collection-vs-single distinction is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The archived sentence implies the default listing behavior (active audiences only) and tells the agent that archived records exist behind a flag, which is a usage-relevant condition. It stops short of naming alternatives such as get-audience for a single record or list-audience-subscribers for members.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-audience-subscribersList Audience SubscribersBRead-onlyIdempotentInspect
List subscribers of an audience, optionally only subscribed or unsubscribed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Audience ID. | |
| page | No | Page number (default: 1). | |
| sort | No | Sort column: email, first_name, last_name, subscribed, subscribed_at, last_engaged_at, created_at. | |
| limit | No | Results per page (max: 100). | |
| match | No | Combine filters with AND (all, default) or OR. | |
| order | No | Sort direction. | |
| search | No | Free-text search. | |
| filters | No | Structured filters, combined with AND unless match is "or". | |
| engagement | No | Only subscribers with (or without) an open or click in the audience's unengaged window. | |
| subscribed | No |
TDQS
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 only the subscribed/unsubscribed scoping option and says nothing about pagination defaults, result caps, or ordering behavior, so it adds limited behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or repetition. It is efficient, though the terseness borders on under-specification given the tool's 10 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 parameters, structured filters, free-text search, sorting, pagination, and engagement filtering, plus no output schema, the description covers only the subscribed toggle and omits the filtering/pagination model entirely. The rich schema compensates substantially, but an agent reading the description alone would underestimate the tool's capabilities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 90%, so the schema already documents id, page, sort, limit, match, order, search, filters, and engagement in detail. The description only echoes the 'subscribed' boolean, adding no syntax or semantics beyond the schema, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List subscribers of an audience'), which is unambiguous against single-record siblings like get-audience-subscriber. It does not explicitly name or differentiate from list-contacts or the bulk-* audience-subscriber siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives (e.g. list-contacts, get-audience-subscriber, bulk-remove-audience-subscribers). The clause 'optionally only subscribed or unsubscribed' describes a parameter option rather than tool-selection context, leaving usage to inference.
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 RunsBRead-onlyIdempotentInspect
List runs of an automation, optionally by status or contact.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). | |
| page | No | Page number (default: 1). | |
| status | No | ||
| per_page | No | Results per page (max: 100). | |
| contact_id | No | Only runs of this contact (con_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds that results can be filtered by status or contact, but says nothing about pagination defaults, ordering, or how many runs are returned per call — context an agent would want for a paged 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. It is efficient, though the brevity leaves no room for the pagination or sibling-routing context that would have made it more useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter list tool with no output schema, the definition is minimally adequate: the annotations carry the safety profile and the schema carries the parameters. Missing are result ordering, pagination behavior, and any differentiation from list-contact-automation-runs, which an agent would need to pick correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so id, page, per_page and contact_id are already documented in the schema. The description only echoes the two filter parameters (status, contact) without adding format, default, or enum detail beyond what the schema provides — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List runs of an automation") and names the optional filters, so the agent knows it returns run records for one automation. It does not distinguish itself from the close sibling list-contact-automation-runs, which returns a similar resource from the contact side.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Optionally by status or contact" implies how to narrow results, but there is no explicit when-to-use, no exclusion, and no pointer to list-contact-automation-runs or get-automation-run for single-run lookups. Usage is inferable from the name and filters rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-automationsList AutomationsBRead-onlyIdempotentInspect
List automations with context, status, and name filters.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name contains. | |
| page | No | Page number (default: 1). | |
| sort | No | ||
| order | No | ||
| status | No | ||
| context | No | ||
| per_page | No | Results per page (max: 100). |
TDQS
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 mention of pagination behavior, default sort order, or result size characteristics that an agent would need to plan calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the purpose front-loaded and no filler. It is arguably under-sized for a seven-parameter list tool, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should give some sense of what is returned (automation records with status/context, presumably), pagination shape, and default ordering. Annotations cover read-only safety, and the schema covers page/per_page bounds, but the return-value and sorting behavior remain undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 43%, and the description names three of the seven parameters (name, status, context) as filter dimensions, which helps orient the agent. However, it says nothing about sort/order semantics, matching behavior for 'name' (substring per schema), or how pagination interacts with results, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('automations') and names the filter dimensions (context, status, name). It does not distinguish itself from nearby siblings like list-automation-runs or get-automation, but the gap is small given the naming is self-descriptive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions that filters exist, implying use for filtered enumeration, but never says when to prefer this over get-automation or list-automation-runs. No exclusions, prerequisites, or clarifying context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-campaignsList CampaignsCRead-onlyIdempotentInspect
List marketing campaigns, optionally by status.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1). | |
| limit | No | Results per page (max: 100). | |
| search | No | Search by name or subject. | |
| status | No |
TDQS
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 adds nothing beyond that — no mention of pagination behavior, default page size, ordering of results, or whether drafts/archived items are included by default. For a list endpoint, result-set semantics are exactly the behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste. It is arguably under-specified rather than over-long, so the brevity is efficient but leaves value on the table.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description never says what a campaign record contains or how pagination metadata is returned. Combined with no usage guidance and a silent 'search' parameter, an agent cannot call this confidently beyond the trivial case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema documents page, limit and search directly, and the description only echoes that a status filter exists. It adds no meaning for the 'status' enum (which has no per-value description in the schema) and never mentions 'search', so it does not compensate for the remaining gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb (list) and resource (marketing campaigns), which distinguishes it from mutation siblings like create-campaign or send-campaign. It does not, however, distinguish itself from read siblings such as get-campaign or get-campaign-stats, leaving the agent to infer that this is the plural/enumerating variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this versus get-campaign (single record) or get-campaign-stats, nor any preconditions. The only usage hint is the implied 'status' filter, with no statement of when that filtering should be preferred over fetching all pages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-contact-automation-runsList Contact Automation RunsARead-onlyIdempotentInspect
List one contact's runs across all automations (latest 100), e.g. to see which workflows they are in.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Contact email, instead of contact_id. | ||
| status | No | ||
| contact_id | No | Contact ID (con_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds one genuinely useful behavioral fact: results are capped at the latest 100 runs. It says nothing about ordering guarantees, whether the cap is paginable, or what happens when the contact has no runs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence that front-loads scope, then the result cap, then a use case. No filler and nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description could reasonably say what a run entry contains, but that is a minor omission. The larger gap is that with 0 required parameters the agent gets no guidance on whether email or contact_id must be supplied, and the hard 100-run cap has no guidance on narrowing via the status filter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% — email and contact_id are documented and the 'instead of' phrasing signals mutual exclusivity, while the status enum is self-explanatory. The description adds no parameter meaning at all, and notably does not resolve the ambiguity that zero parameters are marked required (can the tool be called with neither email nor contact_id?).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List one contact's runs across all automations'), and the phrase 'across all automations' implicitly separates it from list-automation-runs, which scopes to a single automation. It does not name that sibling explicitly, so the differentiation requires a small inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause 'e.g. to see which workflows they are in' gives one concrete use case, which is better than nothing. There is no statement of when to prefer list-automation-runs or get-automation-run instead, 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-contactsList ContactsBRead-onlyIdempotentInspect
List contacts with search, audience, subscription, and custom-field filters.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Only contacts with this tag (comma-separate several for any of them). | |
| page | No | Page number (default: 1). | |
| sort | No | Sort column: email, first_name, last_name, name, audiences, created_at, updated_at, unsubscribed, score, audience_id, custom_fields.<key>. | |
| limit | No | Results per page (max: 100). | |
| match | No | Combine filters with AND (all, default) or OR. | |
| order | No | Sort direction. | |
| search | No | Free-text search. | |
| filters | No | Structured filters, combined with AND unless match is "or". | |
| max_score | No | Only contacts with at most this lead score. | |
| min_score | No | Only contacts with at least this lead score. | |
| audience_id | No | Only contacts in this audience. | |
| unsubscribed | No |
TDQS
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 scope, so the safety profile is covered. The description adds the filter families available but says nothing about result shape, maximum page size behaviors, sort defaults, or whether scores/unsubscribed filtering is exclusive — modest added context given the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler, front-loading the verb and resource before the filter capabilities. Every clause maps to actual functionality exposed in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter read-only list tool with rich schema descriptions and no output schema, the definition covers the essential capability. The only real gap is the absence of sibling disambiguation (export vs list vs audience subscriber listing), which is minor against the well-documented schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 92%, so nearly every parameter is already documented in the schema (tag, page, sort, limit, match, order, filters, score bounds, audience_id, unsubscribed). The description's mention of search, audience, subscription, and custom-field filters roughly mirrors those schema entries without adding format, defaults, or interaction rules beyond what is already stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete verb and resource ('List contacts') plus the filter families it supports (search, audience, subscription, custom-field), which is more than a restatement of the name. It does not, however, distinguish this tool from plausible siblings such as export-contacts, list-audience-subscribers, or get-contact, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 sibling is named. An agent is left to guess whether to use this versus export-contacts for bulk retrieval or list-audience-subscribers for audience-scoped listing; only the tool's purpose implicitly signals it is the general contact query tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-contact-tagsList Contact TagsBRead-onlyIdempotentInspect
List the tags used in the workspace with how many contacts have each.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search | No | Tag contains. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered. The description adds that each tag is returned with a contact count, which is genuine behavioral value since there is no output schema, but it says nothing about ordering, pagination, or the default page size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero filler. It is arguably too terse for a tool with an undocumented parameter, but nothing wasteful is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return shape (tags plus counts) which is helpful given no output schema, but omits pagination/limit semantics and result-ordering for a list tool with two parameters. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: 'search' is documented as a substring match, but 'limit' has no description anywhere. The tool description never mentions either parameter, so it fails to compensate for the undocumented limit (max 1000, min 1) or explain default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List the tags') and adds scope ('used in the workspace') plus a return payload ('how many contacts have each'). It is clearly distinguishable from add-contact-tags/remove-contact-tags, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. The read-only listing intent is implied by the verb 'List', but the agent is not told to prefer this over list-contacts or how it relates to the tag mutation siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-dmarc-asnsList DMARC ASNsCRead-onlyIdempotentInspect
DMARC message volume by sending network (ASN).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. | |
| to | No | End date, ISO 8601. | |
| from | No | Start date, ISO 8601. |
TDQS
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 — no mention of aggregation behavior, time-range defaults, or whether results are grouped/sorted, which is what an agent would actually need here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short with zero redundancy, which is good, but it is a sentence fragment rather than a front-loaded, self-contained statement. Brevity here 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a fragment description, an agent cannot know the response shape (per-ASN volume counts, ordering, aggregation window) or the effect of omitting the date range. For a reporting tool with a required domain ID, that is a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the required domain 'id' and the optional ISO 8601 'from'/'to' dates are already documented. The description adds no syntax, default, or semantic nuance 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The fragment 'DMARC message volume by sending network (ASN)' conveys the resource and the grouping dimension, so an agent can roughly tell it apart from list-dmarc-countries or list-dmarc-reporters. But there is no verb and no explicit statement of what is returned (counts? messages? per-ASN rows?), leaving the purpose only partially pinned down.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, and no routing to closely related siblings such as list-dmarc-sources, list-dmarc-countries, or get-dmarc-stats. The agent must infer the choice purely 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-dmarc-countriesList DMARC CountriesCRead-onlyIdempotentInspect
DMARC message volume by sending country.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. | |
| to | No | End date, ISO 8601. | |
| from | No | Start date, ISO 8601. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered. The description adds only the notion of per-country volume, and says nothing about how the aggregation is computed, whether the from/to window is required to be meaningful, or how results are ordered or paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short fragment with no padding, but it is under-specified rather than efficient: there is no verb, no scope statement, and nothing front-loaded about the domain scoping that the required id parameter implies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 describe the return shape (per-country rows with volume counts?) and the effect of the from/to window. Neither is covered, leaving an agent unable to predict the response for a report-style tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% – id (domain ID), from and to (ISO 8601) are all documented in the schema. The description adds no 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.
Does the description clearly state what the tool does and how it differs from similar tools?
"DMARC message volume by sending country" does indicate the resource and the metric being returned, which is slightly more than the name alone. But it is a noun fragment with no verb and no differentiation from the closely related siblings list-dmarc-asns, list-dmarc-sources, list-dmarc-reporters and list-dmarc-reports, so an agent cannot tell which aggregation to pick from the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative-naming guidance at all. With four sibling DMARC listing tools, the absence of any routing hint 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.
list-dmarc-forensic-reportsList DMARC Forensic ReportsCRead-onlyIdempotentInspect
List DMARC forensic (failure) reports for a domain.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. | |
| to | No | End date, ISO 8601. | |
| from | No | Start date, ISO 8601. | |
| limit | No | ||
| offset | No |
TDQS
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 them: no pagination behavior, no default date window when from/to are omitted, no indication of result volume or ordering, all of which matter for a list endpoint with a limit capped at 100.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and contains zero waste, but it is too terse rather than well-sized: the same brevity that makes it clean is what leaves the usage and pagination gaps. Efficient, not complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, no output schema, and no annotations gaps, the description should at minimum explain the date-range and pagination semantics and what a report record contains. Annotations carry the safety profile, which offsets some of the shortfall, but a list tool with a capped limit needs more than one sentence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 60%: id, from and to are documented, but limit and offset carry no schema descriptions. The description says only 'for a domain', which restates the required id, and gives no hint about date-range filtering, pagination, or default values, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List') and a specific resource ('DMARC forensic (failure) reports') scoped 'for a domain', and the parenthetical clarifies what forensic means. It is clearly distinguishable from list-dmarc-reports and get-dmarc-forensic-report in substance, but it never names those siblings, so differentiation is left to the agent's inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: no statement about opting for this vs. list-dmarc-reports (aggregate) or get-dmarc-forensic-report (single record), and no mention of prerequisites such as a verified domain or a prior list-domains call to get the required id. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-dmarc-reportersList DMARC ReportersCRead-onlyIdempotentInspect
Organizations that sent DMARC reports for the domain.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. | |
| to | No | End date, ISO 8601. | |
| from | No | Start date, ISO 8601. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety behavior is covered. The description adds no further behavioral context such as how reporters are grouped, whether results are paginated, or how date range affects output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single, concise sentence with no wasted words. However, it is under-specified rather than effectively front-loaded, and it omits the most useful scoping detail (date range).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has three parameters including date range and sits among many similar DMARC list tools. The description does not explain how to use the date filters, how results differ from related tools, or what the agent should expect, leaving meaningful gaps despite the simple schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains id, from, and to. The description does not add any parameter meaning beyond the schema, which is acceptable but not helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as DMARC reporters, but it is phrased as a noun phrase rather than a clear action and does not explicitly say it lists them. It gives a vague sense of output (organizations that sent reports) but does not distinguish this from nearby siblings such as list-dmarc-sources, list-dmarc-asns, or list-dmarc-countries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 the many other DMARC list tools. It also does not mention the available from/to date filtering, which is a key usage decision for this endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-dmarc-reportsList DMARC ReportsBRead-onlyIdempotentInspect
List DMARC aggregate or forensic reports received for a domain.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. | |
| to | No | End date, ISO 8601. | |
| from | No | Start date, ISO 8601. | |
| page | No | Page number (default: 1). | |
| type | No | ||
| limit | No | Results per page (max: 100). | |
| match | No | Combine filters with AND (all, default) or OR. | |
| offset | No | ||
| status | No | ||
| filters | No | Structured filters, combined with AND unless match is "or". | |
| org_name | No | Reporting organization, e.g. google.com. |
TDQS
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 reports are 'received for a domain,' saying nothing about volume, pagination behavior, default ordering, or date-range defaults — useful context for a list tool with 11 parameters but not a critical gap given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though its brevity leaves little room for routing or behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, no output schema, and a rich nested filters structure, the description gives no information about result shape, pagination interaction between page/limit/offset, or filter combination behavior. For a moderately complex list tool, this is under-described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 73%, so most parameters (date range, pagination, type, match, filters, org_name) are documented in the schema. The description mentions no parameter semantics at all, so it does not compensate for the undocumented remainder (status, offset, and the type enum's lack of description). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (DMARC aggregate or forensic reports) scoped to a domain, which is clearer than the name alone. It does not distinguish itself from the close siblings list-dmarc-forensic-reports or get-dmarc-report, so an agent must infer that this is the broader version covering both report types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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-dmarc-forensic-reports, get-dmarc-report, or get-dmarc-stats. The only usage signal is implicit in the phrase 'aggregate or forensic,' which the schema's type enum already conveys.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-dmarc-sourcesList DMARC SourcesBRead-onlyIdempotentInspect
Sending sources (IPs and hostnames) seen in DMARC reports, with pass/fail counts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. | |
| to | No | End date, ISO 8601. | |
| from | No | Start date, ISO 8601. |
TDQS
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 useful context that results contain pass/fail counts for IPs and hostnames, but it does not mention pagination, ordering, or how date-range filters affect aggregation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or repetition. It is appropriately sized for a simple list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description should clarify return shape more than 'pass/fail counts' – for example grouping, pagination, and date-filter behavior. It is broadly adequate but leaves meaningful gaps for an agent interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so id, from, and to are fully documented in the schema. The description adds no parameter-specific meaning such as date-range semantics or whether id is required, so the baseline 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource is 'sending sources (IPs and hostnames) seen in DMARC reports' and that output includes pass/fail counts, which distinguishes it from siblings such as list-dmarc-asns, list-dmarc-countries, and list-dmarc-reporters. However, it relies on the tool name for the 'list' verb and does not explicitly state that results are scoped to a single domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use guidance, no exclusions, and does not name sibling alternatives such as list-dmarc-reporters, list-dmarc-asns, or list-dmarc-countries. Usage is only implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-domainsList DomainsBRead-onlyIdempotentInspect
List sending domains in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1). | |
| sort | No | Sort column: name, created_at, spf_status, dkim_status, return_path_status. | |
| limit | No | Results per page (max: 100). | |
| match | No | Combine filters with AND (all, default) or OR. | |
| order | No | Sort direction. | |
| search | No | Free-text search. | |
| filters | No | Structured filters, combined with AND unless match is "or". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is fully covered without the description. The description adds only the workspace scope; it says nothing about whether results are paginated or how filtering affects the returned set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, though its terseness means it carries no supporting context. It is efficient but borders on under-specification rather than optimized conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With seven optional parameters enabling pagination, sorting, free-text search and structured filtering, the description never signals those capabilities, so an agent must open the schema to discover the tool is queryable. Annotations and schema fill the gaps, but the description alone is only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: page, limit, sort, order, match, search and filters are all documented in the schema, including enum meanings and filter conditions. The description contributes no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List sending domains') plus the scope 'in the workspace', which lets an agent distinguish it from get-domain or create-domain by name alone. It does not explicitly name those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The listing verb plus pagination/filter parameters implicitly convey when to use it, and no exclusion or prerequisite is stated. There is no explicit pointer to get-domain for fetching a single domain or to the sibling list tools, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-emailsList EmailsBRead-onlyIdempotentInspect
List sent and received emails with pagination, status, recipient, sender, subject, domain, API key, and date filters.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1). | |
| sort | No | Sort column: to, from, subject, status, tag, created_at, updated_at, spam_score, api_key_id, sending_domain_id. | |
| type | No | ||
| limit | No | Results per page (max: 100). | |
| match | No | Combine filters with AND (all, default) or OR. | |
| order | No | Sort direction. | |
| search | No | Free-text search. | |
| status | No | ||
| date_to | No | ISO date, inclusive. | |
| filters | No | Structured filters, combined with AND unless match is "or". | |
| rcpt_to | No | Recipient address contains. | |
| subject | No | Subject contains. | |
| date_from | No | ISO date, inclusive. | |
| mail_from | No | Sender address contains. | |
| api_key_id | No | ||
| sending_domain_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds only pagination and filter scope, which the schema already carries, and says nothing about default sort order, result shape, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the core purpose precedes the filter enumeration. Slightly list-like, but every clause maps to real parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 16 optional parameters and no output schema, the description is thin: it never mentions the free-text search, the structured filters array, or how match=or interacts with filters. The schema covers these, so an agent can still call it correctly, but the description does not round out the picture for a fairly complex list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema already documents most parameters, and the description's filter list (status, recipient, sender, subject, domain, API key, date) maps onto rcpt_to, mail_from, subject, api_key_id, sending_domain_id and the date fields. It adds no semantics for search, sort, order, match, or the structured filters array, so it does not exceed the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List ... emails') and adds scope ('sent and received') that maps to the inbound/outbound type filter. An agent can distinguish it from get-email, but the description does not name any sibling or note how it differs from list-events or the bulk email getters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the enumeration of filter dimensions, which signals this is the browsing/search tool for the email collection. There is no explicit when-to-use guidance, no mention of when to prefer get-email for a single message, and no stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-eventsList EventsBRead-onlyIdempotentInspect
List workspace events (email delivered, bounced, clicked, contact created, and more), newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1). | |
| type | No | Event type or comma-separated types, e.g. "email.bounced,email.complained". | |
| limit | No | Results per page (max: 100). | |
| scope | No | Only system events, workspace-defined events (w:), or custom events (c:). | |
| include_data | No | Include the full event payload. Default false. |
TDQS
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 contributes one genuine behavioral fact beyond that: results are returned newest first. It says nothing about pagination behavior or the cost/volume of a full listing, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the resource, gives concrete examples, and ends with the ordering guarantee. Nothing is repeated from the schema and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read tool with full schema coverage and complete annotations, the description covers the essentials. What it lacks is disambiguation from list-workspace-events and create-workspace-event, which is the main thing an agent must resolve before choosing this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (page, type, limit, scope, include_data) is already documented with examples and bounds. The description adds no parameter-level meaning (e.g., combining type with scope), so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List workspace events") and illustrates the event types covered, so the agent knows what data comes back. The ordering note ("newest first") further pins down the result. However, it never distinguishes itself from the very similar sibling list-workspace-events, so the purpose is clear in isolation but not in context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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: no statement of when to call list-events versus list-workspace-events, get-event, or send-event. The only implied guidance is the enumeration of event categories, which hints at content but not at selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-formsList FormsBRead-onlyIdempotentInspect
List signup forms with name, type, and status filters.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1). | |
| sort | No | Sort column: name, type, status, created_at. | |
| limit | No | Results per page (max: 100). | |
| match | No | Combine filters with AND (all, default) or OR. | |
| order | No | Sort direction. | |
| search | No | Free-text search. | |
| filters | No | Structured filters, combined with AND unless match is "or". |
TDQS
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 filtering is by name/type/status, which is actually narrower than the schema (created_at is also filterable and sortable), and says nothing about pagination behavior or result ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the brevity costs some information that could have been added without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with a nested filter object, sorting, and pagination, the description covers only the filterable fields and ignores paging and ordering entirely. The 100% schema coverage carries most of the weight, so the description is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents every parameter including the condition enum and the match semantics. The description's mention of name/type/status filters adds nothing beyond the schema and in fact omits created_at, so it cannot exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (signup forms), plus which attributes can be filtered. An agent can distinguish it from get-form by the plural/list framing, though the description never explicitly says to use get-form for a single form.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb 'List' — there is no statement of when to prefer this over get-form or how it relates to create-form/update-form. No guidance on paging through large result sets despite page/limit parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-global-valuesList Global ValuesARead-onlyIdempotentInspect
List the workspace's global values: reusable values like a webinar date, booking link or offer URL, used as {{global.}} in templates, automation steps and conditions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 useful domain context about how the values are referenced downstream, but says nothing about the shape of the result (keys plus values, ordering, any pagination) — a real gap for a tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence: verb and resource first, then the concrete definition and usage context. Every clause earns its place, with no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument, read-only list tool with rich annotations, the description covers what is listed and why it matters. The only shortfall is that there is no output schema and the description does not indicate what each entry contains (key, value, timestamps), leaving the return shape to be discovered at call time.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description does not need to explain any inputs, and it correctly avoids inventing filtering or key arguments that the empty schema would contradict.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (list) plus resource (the workspace's global values), and it defines the resource with concrete examples (webinar date, booking link, offer URL) and its rendering form {{global.<key>}}. An agent can tell this apart from get-global-value, create-global-value, and update-global-value from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: by explaining that the values are consumed in templates, automation steps, and conditions, the description hints at why an agent would list them. It never explicitly says when to use this versus get-global-value for a single key, nor does it state any prerequisites (e.g. workspace scoping).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-suppressionsList SuppressionsBRead-onlyIdempotentInspect
List suppressed addresses with search, type, reason, and expiry filters.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1). | |
| sort | No | Sort column: email, reason, type, created_at, keep_until. | |
| limit | No | Results per page (max: 100). | |
| match | No | Combine filters with AND (all, default) or OR. | |
| order | No | Sort direction. | |
| search | No | Free-text search. | |
| filters | No | Structured filters, combined with AND unless match is "or". |
TDQS
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 beyond annotations about result volume, pagination defaults, or ordering behavior, but it does not contradict them either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is tight, though the brevity leaves little room for the usage and behavioral context the tool would benefit from.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter list tool with no output schema, the description is minimal but the schema fully documents every parameter and annotations cover the safety profile. What is missing is any statement of what a suppression record contains or how pagination should be driven, which the description leaves entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each of the 7 parameters carries its own description (pagination, sort/order, match semantics, filter conditions). The description's mention of search, type, reason and expiry filters loosely maps to the search and filters parameters but adds no syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list suppressed addresses) plus the dimensions that can be filtered, so an agent knows this is the read/list counterpart to get-suppression, create-suppression and delete-suppression. It does not explicitly name those siblings, so differentiation relies on the verb alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance, no mention of fetching a single suppression via get-suppression instead of listing, and no stated prerequisites. The agent must infer usage purely from the name and the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-templatesList TemplatesCRead-onlyIdempotentInspect
List templates in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1). | |
| sort | No | Sort column: name, alias, editor, subject, created_at. | |
| limit | No | Results per page (max: 100). | |
| match | No | Combine filters with AND (all, default) or OR. | |
| order | No | Sort direction. | |
| filters | No | Structured filters, combined with AND unless match is "or". | |
| include_content | No | Include HTML and text bodies. |
TDQS
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 only thing the description adds is "in the workspace," which is a scope note that is arguably redundant, and it says nothing about pagination limits, default page size, or the cost of include_content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler or redundancy, and the core action is front-loaded. It is efficient, though the 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven optional parameters, full schema description coverage, rich annotations, and no output schema, an agent has enough to invoke the tool correctly. The description's job is to route and explain, which the schema largely handles here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter — page, limit, sort, order, match, filters, include_content — is documented inline with enums and constraints. The description adds no additional meaning, which is acceptable given the schema does the work, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb (list) and a resource (templates) plus a workspace scope, so the basic action is intelligible. But it is essentially an expansion of the title "List Templates" and does nothing to separate it from get-template, create-template, publish-template, or the other template siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus get-template (single item) or any of the template mutation tools, and no mention of the filtering/pagination workflow the schema clearly supports. The agent must infer all 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.
list-verification-listsList Verification ListsCRead-onlyIdempotentInspect
List bulk verification lists with their progress.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1). | |
| limit | No | Results per page (max: 100). | |
| search | No | ||
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and a closed-world scope, so the safety profile is fully covered. The description adds only that progress information is included in results, which is mild value; it says nothing about ordering, pagination behavior, or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the key scope detail front-loaded and zero filler. It is efficient, though the terseness borders on under-specification rather than exemplary conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list endpoint with four parameters, no output schema, and undocumented filter semantics, the description leaves the agent without a picture of what is returned or how search/status narrow results. An agent could call it, but could not confidently use its filters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Two of four parameters (search, status) have no schema description at all, putting coverage at 50%, and the description does not compensate — it never mentions filtering, searching, or the status enum. Only page/limit are self-documenting via the schema, leaving the more consequential filters unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('bulk verification lists') plus the added scope 'with their progress', so an agent knows this is the collection endpoint rather than the singular get-verification-list. It does not explicitly name the sibling alternatives (get-verification-list, get-verification-list-results), so differentiation is inferable from naming 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.
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-verification-list or get-verification-list-results, nor any mention of pagination/filtering workflow. The agent must infer from the tool name alone that this is the enumeration endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-webhooksList WebhooksCRead-onlyIdempotentInspect
List webhooks in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1). | |
| sort | No | Sort column: name, url, enabled, created_at. | |
| limit | No | Results per page (max: 100). | |
| match | No | Combine filters with AND (all, default) or OR. | |
| order | No | Sort direction. | |
| search | No | Free-text search. | |
| filters | No | Structured filters, combined with AND unless match is "or". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description only adds that results are workspace-scoped; it says nothing about default page size, sort order, result caps, or what a webhook 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with zero filler. It is efficiently written, though its brevity 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters (pagination, sorting, free-text search, structured filters) and no output schema, the description omits anything an agent would need to know that this is a filterable, paginated listing. It is technically safe to call but leaves the tool's real capabilities undisclosed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with enums and per-field descriptions already documenting page, limit, sort, order, match, search, and filters. The description adds no parameter meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List webhooks') and scopes it to the workspace. It does not distinguish this from siblings like get-webhook or list-workspace-events, but the read/list 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get-webhook (single record) or list-workspace-events, and no mention of pagination or filtering expectations. Usage must be inferred from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-workspace-eventsList Workspace EventsARead-onlyIdempotentInspect
List the workspace-defined event types (sent as w:) with their typed properties.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1). | |
| limit | No | Results per page (max: 250). | |
| search | No | Match name or title. |
TDQS
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 and side-effect profile is fully covered. The description adds the genuinely useful w:<name> naming convention and notes that events carry typed properties, but says nothing about pagination behavior or result counts despite page/limit parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the resource and the key clarifying detail are both up front and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list this is nearly sufficient, and annotations carry the safety profile. However there is no output schema, so the description carries the burden of explaining return shape and it only hints at it ('with their typed properties') without describing pagination metadata or item structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so page, limit and search are already documented in the schema. The description adds no filtering or pagination semantics 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('List') and a precise resource ('workspace-defined event types'), plus the clarifying detail that these are sent as w:<name>. That scopes it apart from list-events and get-workspace-event in practice, though 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.
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 sibling is named as the alternative. The parenthetical 'sent as w:<name>' does imply the usage context (retrieve valid event names for sending), so 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.
merge-audiencesMerge AudiencesAIdempotentInspect
Copy the subscribers of other audiences into this one. People already in it keep their status. Optionally delete the merged audiences.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Audience to merge into. | |
| source_ids | Yes | Audiences to merge into it. | |
| delete_sources | No | Delete the merged audiences afterwards. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag mutation, idempotency, and non-destructiveness; the description adds real value on top by stating the merge semantics (existing members keep their status) and that source deletion is optional. The gated deletion point is useful context that explains why destructiveHint=false despite a delete capability. It stops short of saying what happens to non-subscribed/removed contacts in deleted sources or whether the merge is synchronous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then the two behavioral facts that matter. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with full schema coverage and annotations, the description covers what the tool does and the key side effects. Only minor gaps remain: no statement of return shape (no output schema) or what an agent should expect for the 50-source limit and large merges.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description only loosely restates delete_sources as "optionally delete" without giving a default. The 50-source cap and the array-of-ids shape are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Copy the subscribers of other audiences into this one") and clarifies the membership rule for existing subscribers. It does not explicitly distinguish itself from near-neighbours like bulk-add-contacts-to-audience, but the 'audience into audience' framing is distinctive enough to be unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer this is the many-audiences-at-once path, but nothing states when to pick it over bulk-add-contacts-to-audience or update-audience-subscriber. No preconditions, permissions, or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause-automationPause AutomationAInspect
Pause an automation so new events don't start runs. Runs already in progress keep going.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false and readOnlyHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior: only new event-triggered runs are blocked, while in-flight runs continue — exactly the fact an agent needs before mutating state. It stops short of saying how to resume or what happens when pausing an already-paused automation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the primary effect is front-loaded, and the qualifier about existing runs follows immediately. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation with full annotation coverage and no output schema, the description covers the essential semantic question (what does pausing actually stop). Minor gaps remain around resume path and behavior on an already-paused automation, but nothing blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema coverage and the schema already documents the aut_xxx ID format. The description adds no extra meaning about the identifier, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (Pause) and resource (an automation) plus the concrete effect on the resource. It implicitly separates itself from stop-automation by describing what continues running, but it never names that sibling, so differentiation requires inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The statement that in-progress runs keep going strongly implies when to prefer pause over a hard stop, but no alternative tool (stop-automation, cancel-automation-run, delete-automation) is named and no explicit when-not condition is given. 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.
publish-formPublish FormAInspect
Publish a form so it starts collecting signups from anyone with its link or embed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Form ID (frm_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, idempotent=false and openWorld=true, so the mutation profile is covered. The description still earns credit by disclosing the real consequence of publishing: the form becomes publicly reachable via link or embed, i.e. signups from anyone. It stops short of stating reversibility (unpublish-form) or what happens when publishing an already-published form.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action, with the outcome attached. No filler, no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation with annotations and no output schema, the description covers what an agent needs in order to call it. The only shortfalls are the unstated inverse operation and lack of any note about the state transition if the form is already published.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (id) with 100% schema description coverage including the frm_xxx format hint, so the schema carries the load. The description adds nothing about the identifier beyond what the schema already says — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Publish a form") plus the concrete effect ("starts collecting signups from anyone with its link or embed"). It is clearly distinct from create-form/update-form/delete-form by name, though it never names the inverse unpublish-form or the analogous publish-template.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb — the description makes clear the form must exist and this makes it live. But there is no explicit when-to-use/when-not guidance, no mention that unpublish-form reverses it, and no note that publish-template is a different resource type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish-templatePublish TemplateAInspect
Publish the current template draft so new sends use it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID (tem_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the safety profile is covered; the description usefully adds the effect on new sends. It does not address the non-idempotent trait (what a second publish does), whether publishing is reversible (no unpublish-template sibling exists), or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with the action and its consequence, zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter state-change tool with no output schema, the description conveys the essential effect. Minor gaps remain around repeat publishing and reversibility, which is the only thing an agent might still need to reason about.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single `id` parameter is documented in the schema with its tem_xxx format, so the description need not add parameter detail. Baseline 3 applies since the description adds nothing about parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (publish) on a specific resource (the current template draft) and adds the outcome ('new sends use it'). This clearly separates it from create-template, update-template and get-template, though it does not name any sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'so new sends use it' implies the usage context (promote a finished draft into the live version), but there is no explicit when-to-use/when-not guidance, no prerequisite that the draft be finalized, and no mention of what happens on re-publish.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
regenerate-api-keyRegenerate API KeyADestructiveInspect
Issue a new secret for an API key and invalidate the old one immediately. The new secret is returned only once.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | API key ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false; the description adds the two facts an agent most needs beyond that: the old secret is invalidated immediately (irreversible break for existing consumers) and the new secret is returned only once (must be captured on this call). It stops short of permission/scope requirements, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler; the destructive consequence and the one-time return are both front-loaded and each earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully tells the agent the response carries the new secret and only once. For a one-param destructive tool whose safety profile is annotated, that covers nearly everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, and the schema documents it fully at 100% coverage ('API key ID'), so the description adds nothing about the id argument. Baseline 3 applies since the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Issue a new secret for an API key') plus the immediate consequence ('invalidate the old one'). Clearly distinct from siblings like update-api-key, get-api-key, and delete-api-key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The warning that the old secret is invalidated immediately implies this is a last-resort rotation action, but it never says when to choose this over update-api-key or delete-api-key + create-api-key, nor lists prerequisites or required permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove-audience-subscriberRemove Audience SubscriberADestructiveIdempotentInspect
Remove a subscriber from an audience. The contact is kept.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Audience ID. | |
| subscriber_id | Yes | Subscriber ID. |
TDQS
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 genuine value by clarifying scope of destruction: only the audience membership is removed while the contact record is preserved, which softens and disambiguates the destructive hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two brief sentences with zero waste, and the core action is front-loaded before the clarifying constraint. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter removal with rich annotations and fully documented schema, the description covers the essential nuance (contact retained). Only minor omissions remain, such as behavior when the subscriber is not in the audience.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (id, subscriber_id) are documented in the schema. The description adds no format, syntax, or constraint details 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (remove) and resource (subscriber from an audience), and the second sentence 'The contact is kept' distinguishes the effect from delete-contact or bulk-remove siblings. An agent can tell exactly what changes and what survives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and by the 'contact is kept' clarification, but there is no explicit when-to-use guidance and no named alternative (e.g., bulk-remove-audience-subscribers or delete-contact) referenced. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove-contact-from-automationRemove Contact from AutomationADestructiveInspect
Cancel every running run of this automation for one contact (by contact_id or email), e.g. when they bought and must leave a sales sequence.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). | |
| No | Contact email, instead of contact_id. | ||
| reason | No | ||
| contact_id | No | Contact ID (con_xxx). |
TDQS
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 doesn't need to re-establish that this is a destructive write. It does add real value by disclosing scope: ALL running runs are cancelled, not a single run. It does not state whether this is reversible, whether it errors when the contact has no runs, or how a `reason` is surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and scope, with the example trailing as supporting detail. No padding or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter destructive action with no output schema, the definition covers action, scope, and contact-identification, which is most of what an agent needs. The remaining gaps (idempotency of repeated calls, behavior on contact-not-in-automation, precedence of email vs contact_id) are secondary but real for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% (id, email, contact_id documented), so the baseline is 3. The description adds the 'by contact_id or email' selector hint, but leaves the requiredness/mutual exclusivity of those two ambiguous and says nothing about the undocumented `reason` parameter or which identifier wins if both are supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Cancel') plus resource scope ('every running run of this automation for one contact'), which is meaningfully distinct from cancel-automation-run and stop-automation. It does not explicitly name those siblings, so the agent must infer the distinction, but the scoping is precise enough to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The embedded example ('when they bought and must leave a sales sequence') gives a concrete triggering scenario, which is genuine guidance. However, it never states when to prefer cancel-automation-run (single run) or stop-automation (whole automation) instead, and adjacent sibling names invite confusion for a destructive operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove-contact-tagsRemove Contact TagsAIdempotentInspect
Remove tags from a contact. Starts "tag removed" automations.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID (con_xxx) or email address. | |
| tags | Yes | Tags (stored lowercase). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the mutation profile is covered. The description adds genuinely new context beyond those flags by disclosing the side effect that a "tag removed" automation fires — a non-obvious behavioral consequence of a non-destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core action front-loaded and the side effect immediately after. Nothing here could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, fully documented, annotated tool with no output schema, the essentials are present. However, it doesn't say what the return looks like, whether partial/missing tags cause failures, or whether the call is all-or-nothing across the tag array — details an agent might want before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters documented (contact ID-or-email, tag array stored lowercase, 1–50 items). The description adds no additional semantics such as behavior for tags the contact doesn't have or whether omission of a tag causes an error, so it sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Remove tags from a contact"), which is immediately actionable and clearly the inverse of the sibling add-contact-tags. It stops short of naming that sibling or distinguishing scope (single contact vs. bulk), so it's 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.
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 inverse tool (add-contact-tags) or bulk equivalents, and no prerequisites (e.g., whether the contact must exist or the tag must already be applied). An agent must infer selection 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.
reset-form-tokenReset Form TokenADestructiveInspect
Rotate the public form token. Existing embed codes stop working until updated.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Form ID (frm_xxx). |
TDQS
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. The description earns credit by disclosing the concrete downstream consequence — existing embed codes break until manually updated — which is exactly the kind of impact context annotations cannot convey. It stops short of saying whether the previous token can be recovered or reverted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, sixteen words total, with the action front-loaded and the consequence immediately following. Nothing repeats the title or restates the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation with no output schema and full annotation coverage, the description supplies the essential missing piece — what breaks and who is affected. It leaves minor gaps around reversibility and whether the new token is returned in the response, but the agent has enough to call it correctly and warn the user.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'id' parameter is fully documented in the schema as 'Form ID (frm_xxx)'. The description adds nothing about the parameter, which is acceptable given the schema already does the work — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Rotate') and resource ('public form token'), which no sibling tool performs — the closest analogue, reset-webhook-secret, acts on a different resource. An agent can distinguish this from update-form, publish-form, or delete-form without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence makes the operational context clear: rotation invalidates existing embed codes, so the agent knows this is a last-resort action taken when a token is compromised or leaked. It does not, however, name alternatives (e.g., update-form to change form settings) or state explicit when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset-webhook-secretReset Webhook SecretADestructiveInspect
Rotate the webhook signing secret. The old secret stops working immediately; the new one is returned once.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID (wh_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the two facts an agent cannot guess: the old secret is invalidated immediately (breaking existing consumers) and the new secret is shown only once (unrecoverable). Annotations already flag destructive/non-idempotent, and the description adds the precise consequence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the core action first and the consequence/return semantics second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, irreversible mutation with no output schema, the description covers what breaks and what is returned. It could add one line on the operational follow-up (integrations must be updated with the new secret), which is the only meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
A single parameter with 100% schema coverage and a clear format hint ('wh_xxx'), so the schema carries the burden. The description adds nothing about the id, which is acceptable at this coverage level, hence baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-and-resource pair ('Rotate the webhook signing secret') that is unambiguous and distinguishable from secret-adjacent siblings like regenerate-api-key and reset-form-token by naming the resource. It stops just short of explicitly contrasting them, so 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to rotate versus using update-webhook, nor any stated prerequisites (e.g., needing the webhook to exist or admin scope). The purpose implies rotation is intentional, but the agent must infer all selection logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry-emailRetry EmailADestructiveInspect
Retry delivery of a failed, errored, or held email to its original recipients.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID (em_xxx). |
TDQS
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 usefully adds that delivery targets the original recipient list and only applies to failed/errored/held emails, but it does not warn that a non-idempotent retry can produce duplicate deliveries or that retrying a 'held' email may release it irreversibly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that leads with the action and packs the eligibility states and recipient target into the remainder. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, non-idempotent, destructive mutation with no output schema, the essentials are present but incomplete: the agent is not told what happens on success (status change, new email ID), whether ineligible states cause an error, or how duplicate-send risk is handled. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter with 100% schema description coverage ('Email ID (em_xxx)'), so the schema fully documents the input. The description adds no format, ID-source, or constraint detail beyond it; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource (retry delivery of an email) and narrows the scope to emails in 'failed, errored, or held' states sent to 'original recipients'. That scope implicitly separates it from send-email, forward-email, and cancel-email, though 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Eligibility is implied by 'failed, errored, or held', which tells the agent the tool is only appropriate for emails in those states. However, there is no explicit when-not guidance, no mention of alternatives such as re-sending via send-email, and no prerequisites (e.g., whether the email must be within a retry window).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry-failed-webhook-requestsRetry Failed Webhook RequestsAInspect
Send every failed delivery of a webhook to its URL again and re-enable the webhook.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID (wh_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes meaningfully beyond the annotations by disclosing a non-obvious side effect: the webhook is re-enabled, not just retried. Combined with openWorldHint=true and idempotentHint=false, the agent can infer external HTTP calls will be re-fired. It still doesn't say what happens on partial failure or whether already-successful deliveries can be duplicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the action and scope, with the secondary state change ('re-enable') stated compactly. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation with full schema coverage and populated annotations, the description covers the key unknowns (bulk retry plus webhook re-enablement). No output schema exists, and the description doesn't say whether it reports how many deliveries were retried or how partial failures surface, which is the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, with the wh_xxx format documented in the schema itself. The description adds no meaning beyond identifying the target as 'a webhook'; baseline 3 applies since the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Send every failed delivery of a webhook to its URL again'. The word 'every' implicitly contrasts with the singular sibling retry-webhook-request, but the sibling is never named, so differentiation requires inference from the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'every failed delivery' implies the situation (bulk recovery after delivery failures), but there is no explicit when-to-use or when-not guidance and no mention of the sibling retry-webhook-request for single-delivery retries. Usage has to be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry-webhook-requestRetry Webhook RequestCInspect
Send one webhook delivery to its URL again.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID (wh_xxx). | |
| request_id | Yes | Webhook request ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false). The description adds only that the delivery goes to the external URL, and omits the important implications: with idempotentHint=false a retry can produce duplicate deliveries downstream, the request likely must be in a failed state, and the effect on the original delivery record is unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficiently written, though the same brevity is what leaves the behavioral gaps noted above.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an outbound, non-idempotent mutation with no output schema, the description says nothing about preconditions (must the delivery have failed?), what a retry returns (a new request ID?), or duplicate-delivery risk. An agent could invoke it correctly syntactically but not confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both id and request_id documented as webhook ID and webhook request ID), so the baseline is 3. The description adds nothing about the relationship between the two identifiers or which one determines what gets re-sent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: re-sending one webhook delivery to its URL. The word 'one' implicitly contrasts with the bulk sibling retry-failed-webhook-requests, but the description never names that sibling or otherwise differentiates explicitly, so an agent must infer the split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or prerequisites are given. It's unclear whether the target request must have previously failed, whether re-sending a successful delivery is permitted, or when to prefer test-webhook or retry-failed-webhook-requests; the agent is left to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send-campaignSend CampaignADestructiveInspect
Send a campaign to its audiences now, or schedule it with scheduled_at, optionally spread out (throttled, recipient local time, best time per contact). Delivers to real subscribers, so confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (cmp_xxx) or name. | |
| scheduled_at | No | Future send time, ISO 8601 or natural language. | |
| send_options | No | ||
| send_strategy | No | immediate (default); throttled: send_options.per_hour; local_time: send_options.local_time "YYYY-MM-DDTHH:mm" in each contact's time zone (send_options.timezone for the rest); smart_time: each contact at their usual engagement hour within send_options.window_hours (default 24). |
TDQS
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 known; the description usefully adds the real-world consequence (delivers to actual subscribers) and the confirm-first requirement. It does not cover permissions, whether sending is reversible, or what happens if the campaign is already sent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both load-bearing: first the action and its variants, then the risk warning. The critical caution is front-loaded enough to be read before invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent, open-world tool with no output schema, the definition leaves gaps: no indication of what is returned (job/send status, scheduled confirmation), no preconditions (must the campaign be in draft?), and no note on partial failure across audiences or throttled batches.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and send_strategy's schema description already spells out every mode in more detail than the parenthetical in the description, so that text mostly restates. The nested send_options fields (per_hour, window_hours, timezone defaults) have no schema descriptions and are not clarified in prose either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("send a campaign to its audiences") plus the two modes, immediate send vs. scheduled via scheduled_at. The resource specificity separates it from send-email, but the description never names an alternative sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational guidance: "confirm with the user first" because it delivers to real subscribers, and it distinguishes immediate vs. scheduled usage in the first sentence. It stops short of explicit exclusions or naming a sibling (e.g., cancel-campaign to stop a send).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send-emailSend EmailADestructiveInspect
Send a transactional email from a verified sending domain. Supports HTML, plain text, templates with variables, attachments, CC/BCC, scheduling, and open/click tracking. Delivers to real recipients, so confirm recipients and content with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | Recipient email address(es). | |
| bcc | No | ||
| from | No | Sender in RFC format, e.g. "Acme <hello@mail.acme.com>". Must use a verified domain. | |
| html | No | HTML body. | |
| meta | No | Custom metadata returned in events and webhooks. | |
| text | No | Plain-text body. | |
| headers | No | ||
| subject | No | Subject line. Optional when a template provides it. | |
| reply_to | No | ||
| template | No | Template ID (tem_xxx) or alias. | |
| tracking | No | ||
| variables | No | Template variables. | |
| attachments | No | ||
| scheduled_at | No | ISO 8601 time or natural language like "tomorrow at 9am". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true; the description adds real value on top by warning that messages reach actual external recipients and that the sending domain must be verified. It omits that a sent message cannot be recalled (only cancel-email for scheduled sends) and says nothing about rate limits or failure behavior, keeping it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and the verified-domain constraint, ending on the safety instruction. No filler and 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter, nested-object mutation tool with no output schema, the description covers the essential prerequisites (verified domain, confirmation with user) and the major feature surface. It leaves gaps on body-mode mutual exclusivity, error/return behavior, and scheduling semantics, which an agent may still have to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 60% schema coverage, several params (cc, bcc, reply_to, headers, tracking) lack schema descriptions; the description compensates by naming CC/BCC, attachments, scheduling, templates with variables, and open/click tracking, which clarifies what the tracking object actually controls. It does not explain the html/text/template exclusivity or what `headers` and `reply_to` are for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Send a transactional email") plus the scoping constraint ("from a verified sending domain") and enumerates supported content modes. It implicitly separates itself from send-campaign by using the word "transactional," but no sibling is named explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Delivers to real recipients, so confirm recipients and content with the user first" gives a concrete precondition for invocation. It does not, however, point to alternatives like send-campaign for bulk sends or retry-email for resends, so routing guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send-eventSend EventAInspect
Record a workspace-defined event (type "w:", validated against its definition) or a custom event (type "c:", any JSON properties). Optionally attribute it to a contact by email or contact_id. Pro and Business plans (up to 100 / 1,000 event types); Pay as you go gets 403 plan_required.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | w:<name> or c:<name>, e.g. "c:order.completed". | |
| No | Contact email to attribute the event to. | ||
| contact_id | No | Contact ID (con_xxx). | |
| properties | No | Event payload. | |
| occurred_at | No | ISO 8601 time it happened. Defaults to now. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-idempotent, non-destructive. The description adds real behavioral context beyond them: server-side validation of workspace event names against their definition, plan-tier limits (100/1,000 event types) and the specific 403 plan_required error. It omits that retrying the same payload creates duplicate events, which is relevant for a non-idempotent write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core action and the type taxonomy before plan constraints. No filler, though the plan-tier sentence could be compressed by dropping the numeric split if it is not decision-relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so the description could mention what a successful send returns (event id / accepted status), but for a fire-and-forget ingestion endpoint the essentials — format, validation, attribution, plan gating — are all present. An agent can call this correctly from the description plus schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description still adds value: it clarifies that attribution to a contact is optional and can be done via either email or contact_id, and reinforces that `properties` is unconstrained for custom events — semantics the schema states minimally.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (record an event) and immediately splits it into the two distinct shapes: workspace-defined 'w:<name>' validated against its definition, and custom 'c:<name>' with arbitrary JSON. This distinguishes it from create-workspace-event and list-events without the agent needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'w:<name>' branch implicitly tells the agent a workspace event definition must already exist, and the plan-tier sentence names the exact failure condition (403 plan_required). It does not, however, contrast this tool with trigger-automation or explain when to prefer a custom vs workspace event beyond format.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start-automationStart AutomationADestructiveInspect
Start or resume an automation. From then on every event that matches its trigger starts a run that executes its steps for real, including sending emails and changing contacts (see get-automation for the steps). Each run uses 3 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing real side effects ('sending emails and changing contacts') on an ongoing, event-driven basis, plus a concrete cost ('Each run uses 3 credits'). This is exactly the context an agent needs before invoking a destructive, open-world, non-idempotent tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then consequences, then cost. Every sentence supplies distinct, decision-relevant information with no restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-param mutation tool with no output schema, it covers effect, trigger behavior, cost, and a reference for inspecting steps. A note on how to verify the resulting state or undo (pause/stop) would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'id' parameter has full schema coverage with its aut_xxx format documented, so the schema already carries the semantics. The description adds nothing parameter-specific, which is acceptable at 100% coverage but is baseline rather than added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Start or resume an automation') and clarifies the ongoing consequence that the automation then fires runs on matching events. It implicitly distinguishes itself from trigger-automation (one-off run) by framing runs as event-triggered, but never names that sibling to make the boundary explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Start or resume' plus the trigger/event framing gives a clear context for use, and the pointer to get-automation tells the agent where to inspect steps first. It stops short of explicit exclusions, e.g., when to prefer trigger-automation for a single manual run or pause/stop for the inverse operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop-automationStop AutomationADestructiveInspect
Stop an automation and cancel every run in progress. Canceled runs can't be resumed, even if the automation is started again.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=false, so the safety bar is lowered, but the description still earns credit for disclosing the specific blast radius: every in-progress run is canceled, and those runs cannot be resumed even after restart. That irreversibility detail is real information beyond the annotation. It stops short of saying whether an already-stopped automation errors or no-ops.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the primary action first and the consequence/irreversibility second. Every clause carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation with destructive annotations and no output schema, the description covers action, scope of destruction, and irreversibility — the essentials. Missing is the idempotency behavior (what happens on repeat calls) and any recovery path, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single required parameter with 100% schema description coverage ('Automation ID (aut_xxx)'), so the schema fully documents it. The description adds nothing about the id, which is acceptable given the coverage, but earns only the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb (stop) on a concrete resource (automation) and adds the cascading effect on in-progress runs. It does not explicitly differentiate itself from the close siblings pause-automation, cancel-automation-run, and delete-automation, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mention of canceling in-progress runs implies the usage context (a hard halt rather than a soft pause), but there is no explicit 'use this when...' statement or named alternative. With pause-automation and cancel-automation-run as siblings, an explicit comparison would materially help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test-webhookSend Test WebhookAInspect
Send a sample event of the given type to the webhook URL and return the response. Limited to 5 per minute.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID (wh_xxx). | |
| type | Yes | Event type to send, e.g. email.delivered or c:order.completed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, openWorld=true, idempotent=false, destructive=false. Beyond that, the description adds two genuinely useful facts the annotations do not convey: it is rate limited to 5 per minute, and it returns the target's response so the agent knows to inspect the result. It stops short of saying what a failed delivery looks like or whether the event is recorded in event history.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, the core action front-loaded and the operational constraint (rate limit) appended. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, fully-described-schema tool with no output schema, the description covers purpose, rate limit, and that a response is returned. Only failure/error semantics and whether the test event appears in event logs are missing, which are secondary for a testing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both 'id' (wh_xxx) and 'type' (full enum plus w:/c: patterns) are already fully documented. The description only restates 'event type' and implies the webhook URL comes from the id, adding no new parameter-level semantics. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (send), a specific resource (a sample event of the given type to the webhook URL), and adds that the response is returned. This is clear enough to distinguish it from create-webhook/update-webhook/get-webhook, though it never names the closest alternatives (send-event, retry-webhook-request) explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'sample event' implies this is for testing rather than real delivery, and the rate limit hints at appropriate use, but there is no explicit when-to-use/when-not or named alternative such as send-event for genuine events. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger-automationTrigger AutomationADestructiveInspect
Start one run of a running automation now. The run executes the automation's steps right away (see get-automation), including sending real emails. The automation needs a system.manual trigger step; in contact automations pass the contact as payload.contact_id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). | |
| payload | No | Trigger data, e.g. { "email": "jane@example.com" }. |
TDQS
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 concrete substance: the steps execute right away and real emails get sent, and the trigger step must be system.manual. That tells the agent the blast radius is immediate and non-simulated, which annotations alone do not convey. It stops short of saying what happens to failures or whether repeated calls create duplicate runs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the side effect, then the precondition. Nothing is redundant and the most important warning (real emails are sent) is placed early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete enough to invoke correctly: verb, side effects, precondition, and payload routing are all present, and no output schema is needed for correct calling. The remaining gap is what the call yields (run ID / how to inspect or cancel the resulting run), which would help an agent close the loop but is not required to trigger safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and documents id as aut_xxx plus a generic payload object, so the baseline is 3. The description adds meaning the schema lacks by specifying that contact automations require payload.contact_id, which is more precise than the schema's email example. The payload shape for non-contact automations remains unelaborated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: start exactly one run of an already-running automation, immediately. The phrase 'one run of a running automation' implicitly separates it from start-automation (which presumably enables the automation itself) and from cancel/pause/stop siblings, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a hard precondition (the automation must have a system.manual trigger step) and a routing rule for contact automations (pass payload.contact_id), which are genuinely useful. However, it never names an alternative tool or says when to choose start-automation, pause-automation, or get-automation-run instead, so sibling routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpublish-formUnpublish FormBInspect
Take a form offline. It stops collecting signups.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Form ID (frm_xxx). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false), and 'It stops collecting signups' adds real behavioral context about the effect. However it does not say whether existing submissions survive, whether the form can be republished, or what happens if the form is already unpublished.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler; the effect ('stops collecting signups') follows the action immediately. Slightly under-sized rather than verbose, which is not penalized here.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-param tool with annotations and no output schema, little is needed. Still, the reversible-vs-destructive question and the fate of existing submissions are unaddressed and directly affect whether an agent should call this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
A single required parameter with 100% schema coverage, where the schema already documents the form ID format (frm_xxx). The description adds nothing about the identifier, so the baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Take a form offline' is a specific verb+resource that unambiguously distinguishes this from delete-form or update-form. It does not name its inverse sibling publish-form, but the operation itself is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus delete-form, update-form, or its obvious counterpart publish-form. The agent must infer that this is a reversible state toggle rather than a destructive action, which is a key calling decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-api-keyRename API KeyCIdempotentInspect
Rename an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | API key ID. | |
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so safety basics are covered structurally. The description adds nothing beyond that: it doesn't say whether renaming affects the key's validity, whether the new name must be unique within the workspace, or what the response contains. For a mutation tool this is a real gap even at the lower annotation-adjusted bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding or redundancy. It is short rather than bloated; the weakness is under-specification, which the other dimensions capture.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-required-parameter mutation with no output schema and one undocumented parameter, the description leaves too much unstated: no naming rules, no permission requirements, no note on whether the API key value or its scopes are untouched. There is no output schema, so the description also owes at least a hint about the return.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50% — the id parameter is documented as "API key ID" but the required name parameter has no description at all. The description could have compensated by stating naming constraints (uniqueness, length, character rules), and it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource pair ("Rename an API key") is specific enough to be understood, and it usefully narrows the tool to changing the name only, not the key material itself. But it is essentially a restatement of the title "Rename API Key" and never differentiates the tool from nearby siblings like regenerate-api-key, delete-api-key, or create-api-key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to reach for this tool versus regenerate-api-key (which rotates the secret) or delete-api-key, and no prerequisites such as required permissions or whether the key must be inactive. The agent must infer the routing decision entirely on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-audienceUpdate AudienceBIdempotentInspect
Rename an audience or change its settings: visibility, public name, double opt-in, confirmation email, unengaged filter, archived.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Audience ID. | |
| name | No | ||
| archived | No | ||
| unengaged | No | ||
| visibility | No | public: listed on the manage subscriptions page for everyone. private: only for contacts already subscribed. | |
| public_name | No | Name shown to subscribers instead of the internal name. | |
| double_opt_in | No | Ask people who join through the subscribe URL, forms or the API (double_opt_in: true) to confirm by email. | |
| confirmation_email | No | Email sent after someone subscribes or confirms. | |
| public_description | No | Short description shown on the manage subscriptions page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, idempotent, non-destructive, closed-world, so the safety profile is carried. The description adds the scope of mutable fields, but omits important behavior: whether unspecified fields are left untouched (partial-update semantics), what archiving an audience does to its subscribers/campaigns, and any permission or verified-domain requirements for confirmation email senders.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with the action first and the field inventory after; every clause carries information. The colon-list is slightly dense but nothing is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, nested-object mutation with no output schema, the description covers what can change but not how: no statement that only supplied fields are modified, no confirmation of return value, no note on prerequisites. Adequate to start, but leaves an agent guessing about partial-update behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% with rich per-field descriptions (visibility enum, double opt-in, unengaged days, sender domain), so the schema does most of the work. The description's field list matches the schema but adds no syntax or constraint detail, and even omits public_description, so it is at the baseline rather than above it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (rename/change) and resource (audience) and enumerates the mutable settings, so an agent can tell this is a partial update of an existing audience rather than create-audience or update-audience-subscriber. No explicit naming of siblings, but the resource+verb combination is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance: nothing says to fetch the audience first, that the audience must exist in the current workspace, or that this is the tool for settings rather than list-audiences/create-audience. The field list implies scope but not decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-audience-subscriberUpdate Audience SubscriberCIdempotentInspect
Update a subscriber, including subscribing or unsubscribing them from the audience.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Audience ID. | |
| No | |||
| last_name | No | ||
| first_name | No | ||
| subscribed | No | ||
| custom_fields | No | ||
| subscriber_id | Yes | Subscriber ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation is idempotent and non-destructive. The description adds only that the operation can subscribe or unsubscribe, which is largely conveyed by the 'subscribed' boolean in the schema. It does not disclose partial-update semantics, behavior when the subscriber does not exist, or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It is appropriately terse, although that terseness contributes to the gaps noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with a nested object, low schema coverage, and no output schema, the description is too thin. It omits core update semantics and parameter guidance that an agent needs to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 29% across 7 parameters, so the description should compensate but does not. It does not explain required 'id'/'subscriber_id', the optional email/name fields, or the nested 'custom_fields' object, leaving most parameters undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb and resource: 'Update a subscriber.' It also mentions the key capability of subscribing/unsubscribing. It is clear but does not differentiate from siblings such as add-audience-subscriber, remove-audience-subscriber, or bulk-update-audience-subscribers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. The description does not explain whether to use it instead of add-audience-subscriber, remove-audience-subscriber, or the bulk-update variant, nor does it state prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-automationUpdate AutomationADestructiveInspect
Change an automation's name, description or settings, or replace its steps and connections (same step types as create-automation). Passing steps or connections replaces the whole graph; the previous steps can't be restored.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Automation ID (aut_xxx). | |
| name | No | ||
| steps | No | ||
| settings | No | ||
| connections | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive, but the description adds specific destruction semantics: passing steps or connections replaces the whole graph and the previous steps cannot be restored. It does not explain authentication needs, rate limits, or whether omitting name/description/settings preserves existing values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste: the first states what can change, and the second front-loads the destructive replacement behavior. The create-automation reference is compact and useful rather than repetitive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex nested mutation with no output schema and only 17% schema description coverage, the description covers the biggest risk, graph replacement, but leaves important context implicit: partial-update behavior for name/description/settings, the relationship between steps and connections, and whether settings are merged or replaced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low at 17%, so the description must compensate. It usefully explains that steps and connections replace the entire graph and that step types match create-automation, but it adds little about id, name, description, settings, or whether unspecified fields are preserved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: changing an automation's name, description or settings, or replacing its steps and connections. It also references create-automation for the step types, so an agent can distinguish this as the update path rather than creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies use on an existing automation and warns about graph replacement, but it does not explicitly state when to choose this over siblings like create-automation, delete-automation, pause-automation, or start-automation. The reference to create-automation is only for step types, not for routing between create and update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-campaignUpdate CampaignADestructiveInspect
Update a draft campaign. Passing content replaces its body and passing recipients replaces the audience list (at least one audience must be included); the previous values can't be restored.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (cmp_xxx) or name. | |
| name | No | ||
| tags | No | Labels for filtering and the calendar (up to 20). | |
| ab_test | No | A/B test. Send { enabled: false } to turn it off. | |
| content | No | Campaign body: HTML when content_type is html (the default), plain text when it is text. | |
| subject | No | ||
| reply_to | No | ||
| from_name | No | ||
| from_email | No | Sender address on a verified domain. | |
| recipients | No | ||
| utm_params | No | UTM overrides. Values may use {campaign_name}, {campaign_id}, {subject}, {variant}, {send_date}. | |
| track_loads | No | Override the sending domain's open tracking for this campaign. null follows the domain (the default). | |
| content_type | No | ||
| preview_text | No | Inbox preview text. | |
| track_clicks | No | Override the sending domain's click tracking for this campaign. null follows the domain (the default). | |
| utm_tracking | No | Add UTM parameters to every link (default utm_source=emailit, utm_medium=email, utm_campaign=<campaign name>). | |
| exclude_unengaged | No | Skip contacts sent 3+ campaigns in 90 days without opening or clicking any. | |
| smart_sending_hours | No | Skip contacts another campaign emailed within this many hours (16 is common). null turns it off. |
TDQS
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 still adds real value: it discloses that content/recipients are wholesale replacements, that at least one audience must remain, and that prior values are unrecoverable. It does not say what happens when the campaign is not a draft (error vs. ignored) 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler, leading with the scope restriction and following immediately with the destructive replacement semantics. Every clause carries information an agent needs before calling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter destructive mutation with no output schema, the description covers the highest-risk behaviors (replacement, irreversibility, audience minimum) but says nothing about the failure mode for non-draft campaigns or what a successful update returns. Adequate to call safely, incomplete for an agent predicting outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, above baseline, and the description adds semantics the schema lacks: content overwrites the body rather than merging, recipients overwrites the whole audience list, and an at-least-one-audience constraint that appears nowhere in the schema (recipients has no minItems). The remaining 15 parameters (ab_test, utm_params, tracking overrides) are left entirely to schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus a scoping constraint: only *draft* campaigns are updatable, which inherently separates it from send-campaign, cancel-campaign, and delete-campaign. It stops short of naming any sibling explicitly, so an agent must infer the routing itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'draft campaign' qualifier implies when this is legal and the replacement rules imply when to include content/recipients, but there is no explicit when-to-use, when-not, or pointer to alternatives such as create-campaign or update-email. 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.
update-contactUpdate ContactADestructiveInspect
Update a contact. Passing audiences replaces its audience memberships, tags replaces its tags (add_tags / remove_tags change them), score sets the lead score, and unsubscribed: true stops all marketing email to it. Changes start "contact updated", "tag added" and "score changed" automations.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID (con_xxx) or email address. | |
| tags | No | Replace all tags. | |
| No | |||
| score | No | Set the lead score. | |
| add_tags | No | Tags (stored lowercase). | |
| audiences | No | ||
| last_name | No | ||
| first_name | No | ||
| remove_tags | No | Tags (stored lowercase). | |
| unsubscribed | No | ||
| custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations (destructiveHint=true, idempotentHint=false) by naming the actual destructive behaviors: 'audiences' and 'tags' wholesale replace existing values, and 'unsubscribed: true stops all marketing email to it'. It also discloses side effects the agent cannot see elsewhere — that 'contact updated', 'tag added' and 'score changed' automations fire.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then a single dense clause per parameter group — no filler. The quoted automation names add length but each carries behavioral information, so nothing is genuinely wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent 11-param mutation with no output schema, the description covers the risky semantics (replacement, unsubscribe, automation triggers) that an agent most needs. It does not state that omitted fields are left unchanged, which is the main remaining gap for a partial-update tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 45% schema coverage across 11 params, the description carries real weight: it explains the replace-vs-increment distinction for tags/audiences/add_tags/remove_tags and the effect of unsubscribed. It leaves email, first_name, last_name and custom_fields unaddressed, though those are largely self-describing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Update a contact') and then enumerates which fields mean what, which lets an agent separate tag replacement from the add-contact-tags/remove-contact-tags siblings. It does not mention update-contact-score, which overlaps on the 'score' field, so the sibling differentiation is incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real selection guidance: 'tags replaces its tags (add_tags / remove_tags change them)' tells the agent when to use this tool versus the dedicated tag tools. It stops short of explicit exclusions, e.g. that a score-only change could go through update-contact-score instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-contact-scoreUpdate Contact ScoreAInspect
Add to, subtract from or set a contact's lead score. Starts "score changed" automations (e.g. leads above 50 enter a sales workflow).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID (con_xxx) or email address. | |
| value | Yes | ||
| operation | No | Default add. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnly=false, destructive=false, idempotent=false), so the description's job is to add side-effect context — and it does: it discloses that the write fires 'score changed' automations and may push a lead into a sales workflow. It stops short of saying what the call returns or whether scores can go negative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operation scope and followed by the side-effect warning. No filler, and 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation with no output schema, the description covers the operation modes and the automation side effect but leaves gaps: return value (presumably the updated score), permission requirements, and interaction between `value` sign and `operation` are all unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: `id` and `operation` are documented in the schema (operation only as 'Default add.'), while `value` is undocumented. The description's 'add to, subtract from or set' gives meaning to the enum values but adds nothing about `value` (e.g. negative-value behavior vs. subtract) or the ID-or-email acceptances.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb set (add/subtract/set) and resource (a contact's lead score), which maps directly to the `operation` enum and clearly scopes this to the score field. It implicitly distinguishes itself from update-contact but never names the sibling, so it falls short of the top mark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (whenever you want to nudge or set a lead score), and the automation example hints at why someone would. There are no explicit exclusions or pointers to alternatives such as update-contact for non-score field changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-domainUpdate DomainCIdempotentInspect
Update domain settings such as open/click tracking, inbound, or DMARC report collection.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. | |
| incoming | No | Accept inbound email for this domain. | |
| outgoing | No | Allow sending from this domain. | |
| inbound_key | No | ||
| track_loads | No | Track opens. | |
| use_for_any | No | ||
| track_clicks | No | Track link clicks. | |
| tracking_key | No | Custom tracking CNAME label. | |
| dmarc_reports | No | Collect DMARC aggregate reports. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond re-listing a few field names: it never says whether omitted fields are left unchanged (partial vs full replace), whether DNS/tracking keys must be re-supplied, or what happens to existing settings on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though it spends its words repeating field names already present in the schema rather than on the missing behavioral information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no output schema, the description should cover partial-update behavior, the meaning of the key parameters, and permission requirements. None of that is present, leaving significant gaps for a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 78%, so the schema largely documents the parameters. The description maps loosely onto track_loads/track_clicks, incoming, and dmarc_reports, but says nothing about incoming vs outgoing, inbound_key, tracking_key, or use_for_any, and does not clarify partial-update semantics for the single required id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update) and resource (domain settings) and enumerates representative fields: open/click tracking, inbound, DMARC collection. An agent can tell it apart from create-domain, delete-domain, and verify-domain by name alone, though the description does not explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (does the domain need to exist or be verified?), and no mention of alternatives such as verify-domain or create-domain. The agent is left to infer that this is a partial-modification tool from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-emailReschedule EmailCIdempotentInspect
Change the send time of a scheduled email.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID (em_xxx). | |
| scheduled_at | Yes | New send time, ISO 8601. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say what happens if the email already sent, whether the old schedule is replaced, or what errors occur when the email isn't in a scheduled state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, exactly matching the action. It is efficient, though so terse that it borders on restating the title 'Reschedule Email' rather than adding information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-changing tool with no output schema, the description leaves key questions unanswered: timezone/ISO handling expectations, behavior when the email is already sent or cancelled, and whether the response confirms the new schedule. Annotations cover safety but not these operational details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both `id` (em_xxx format) and `scheduled_at` (ISO 8601) fully documented in the schema. The description adds no format, constraint, or timezone guidance beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('change the send time') and resource ('a scheduled email'), which is precise enough for an agent to know exactly what mutation occurs. It does not explicitly contrast with neighbors like cancel-email, retry-email, or get-email, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives such as cancel-email or send-email, and no stated preconditions. The word 'scheduled' hints the email must currently be scheduled, but this is left implicit rather than stated as a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-formUpdate FormCIdempotentInspect
Update a form name, type, definition, or settings.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Form ID (frm_xxx). | |
| name | No | ||
| type | No | ||
| settings | No | Display and audience settings. | |
| definition | No | Form steps and fields. Omit on create to start from the default template. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds nothing beyond that: it never says whether this is a partial or full replacement, what happens to `definition` or `settings` keys not supplied, or whether publishing state is affected — the most consequential unknowns for a form mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the terseness comes at the cost of the behavioral detail noted above rather than because nothing more was needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with five parameters, two nested free-form objects (`settings`, `definition`), and no output schema, so the description carries real weight. It omits partial-update semantics, validation or permission requirements, and any indication of what a successful response contains — significant gaps for nested-object writes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%: `id`, `settings`, and `definition` are documented in the schema, while `name` and `type` are bare (the enum values are self-explanatory). The description's field list mirrors the schema properties and adds no semantics such as the frm_xxx ID format or how `definition` merging works, so it lands at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Update') plus resource ('a form') and enumerates the mutable surface (name, type, definition, settings). An agent can distinguish it from get-form, delete-form, and the state-changing publish-form/unpublish-form siblings without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus update-template, publish-form, unpublish-form, or reset-form-token, and no mention of prerequisites or the fact that only the fields supplied are changed. The agent must infer all routing and preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-global-valueUpdate Global ValueBIdempotentInspect
Change a global value. Emails sent from then on use the new value, and so do runs that reach a Wait until step afterwards; runs already waiting keep the date they read.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Global value ID (gv_xxx) or key. | |
| key | No | ||
| name | No | ||
| type | No | Default text. date is YYYY-MM-DD, datetime is ISO 8601. | |
| value | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-read-only, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely useful propagation semantics beyond that: future emails and runs hitting a Wait until step pick up the new value, while already-waiting runs keep the previously read value. It stops short of covering how automation steps other than Wait until behave or what a partial update returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no filler; the propagation clause earns its place. Minor issue: 'keep the date they read' reads as date-type-specific even though the sentence is written generally, which slightly muddies the framing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation with low schema coverage and no output schema, the description covers side effects well but leaves parameter behavior, partial-update semantics, and error conditions unaddressed. Adequate but with clear gaps an agent would hit on first call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% and the description says nothing about the 6 parameters — not id vs key semantics, not that partial updates are allowed, not type/value coupling, not what a null value means. The 'date' wording hints at date-type value behavior but is not framed as parameter guidance, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('Change a global value') that is unambiguous against siblings like create-global-value and delete-global-value, whose verbs already differentiate them. It does not explicitly call out the distinction, but the purpose is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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-global-value (new value) or delete-global-value (removal), and no mention of prerequisites such as needing an existing ID/key. Usage is only implied by the verb 'change'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-suppressionUpdate SuppressionBIdempotentInspect
Change the type, reason, or expiry of a suppression.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Suppression ID (sup_xxx) or email address. | |
| type | No | ||
| reason | No | ||
| keep_until | No | Expiry as ISO 8601, Unix timestamp, or natural language like "in 30 days". Null keeps it forever. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds the scope of changeable fields but says nothing about permission requirements, whether an update is a merge or a replace, or what happens when only id is passed — gaps the annotations don't fill.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler and no repetition of the title. It is efficient, though the terseness leaves no room for the routing or behavioral context the tool actually needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an undocumented half of its schema and no output schema, the description should say more: whether unspecified fields are untouched, whether the id can be an email address (only the schema says this), and what the update returns or affects. As written, the agent must infer all of it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 50% schema coverage, id and keep_until are documented while type and reason are bare. The description at least names type and reason as the fields being changed, which marginally compensates, but it adds no semantics for the enum values or what reason is used for, so it stays at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ("Change") plus the resource ("suppression") and enumerates the mutable fields (type, reason, expiry), so an agent can distinguish it from create-suppression, get-suppression, and delete-suppression without opening a schema. It stops short of explicitly naming those siblings, which keeps it out of 5 territory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to reach for this vs. create-suppression or delete-suppression, no prerequisites, and no note on what to do when only the required id is supplied. The mutating verb implies the use case, but nothing routes the agent between this tool and its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-templateUpdate TemplateBIdempotentInspect
Update a template draft. Publish it to make the change live.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID (tem_xxx). | |
| from | No | Default sender. | |
| html | No | HTML body; supports {{variables}}. | |
| name | No | ||
| text | No | ||
| alias | No | ||
| editor | No | ||
| subject | No | Subject; supports {{variables}}. | |
| reply_to | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotent=true, destructiveHint=false, readOnlyHint=false, so the safety profile is covered. The description adds the valuable lifecycle fact that edits are not live until published, but omits partial-update semantics (are omitted fields preserved or cleared?), editor-mode switching effects, and variable validation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the disclosure front-loaded and no filler. The pronoun 'it' in the second sentence is slightly ambiguous (it could be misread as this tool performing the publish).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 parameters, 44% schema coverage, and no output schema, the description should carry more weight. It provides no field-level guidance and no return-value expectations, leaving an agent under-informed for a 9-parameter mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 44% across 9 parameters, and the description says nothing about any of them. Key ambiguities remain unaddressed in both schema and description: which fields are optional, whether the 'editor' enum changes how 'html'/'text' are interpreted, and how reply_to string-vs-array is handled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (update) and resource (template) and adds the meaningful qualifier 'draft', which distinguishes it from publish-template and create-template. It stops short of explicitly naming those siblings, and it doesn't clarify behavior for templates already published.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Publish it to make the change live' implies the draft-then-publish workflow, which is real guidance, but the alternative tool (publish-template) is never named and no conditions or prerequisites are stated. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-webhookUpdate WebhookBInspect
Update a webhook URL, name, events, filter, or enable it again. Events then go to the new URL.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID (wh_xxx). | |
| url | No | HTTPS endpoint that receives event POSTs. | |
| name | No | ||
| events | No | Event types to subscribe to. With all_events, list only what it leaves out: w:/c: types (or w:* / c:*) and opt-in site-tracking events. | |
| filter | No | Only deliver events matching these rules. Null clears the filter. | |
| enabled | No | ||
| all_events | No | Subscribe to every system event type except the opt-in site-tracking events (product.viewed, cart.updated). Workspace (w:) and custom (c:) events are not included either; list them in events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, non-idempotent, open-world behavior, so the description's job is lighter. It adds one real consequence — future events are delivered to the new URL — but doesn't say whether omitted fields are left untouched, whether passing events/filter replaces the existing values, or that a bad URL could silently drop deliveries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the actionable list of fields, and no filler. The delivery-routing note in the second sentence carries real information rather than restating the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a partial-update tool with a fairly rich schema and explicit annotations, the description covers the main mutation surface and its effect. The remaining gaps — all_events, and whether list-valued fields overwrite — are noticeable but not blocking for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, so baseline is around 3. The description names five of the six optional parameters in plain terms (url, name, events, filter, enabled), which helps an agent map intent to fields, but it never mentions all_events or explains replacement-vs-merge behavior for events and filter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update) and resource (webhook) plus the set of mutable fields, so an agent knows exactly what it changes. It doesn't explicitly separate it from neighbors like create-webhook or reset-webhook-secret, but the field list makes the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus test-webhook, retry-webhook-request, reset-webhook-secret, or delete-webhook. The phrase 'enable it again' faintly hints at using this to re-activate a disabled webhook, but no conditions 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.
update-workspace-eventUpdate Workspace EventAIdempotentInspect
Update a workspace event definition. properties, when given, replaces the whole list. Stored events are not changed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Definition ID (etp_xxx), name, or w:name. | |
| name | No | ||
| title | No | ||
| properties | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so safety is largely covered. The description earns credit for adding non-obvious behavior: `properties` replaces the entire list rather than merging, and already-recorded events are unaffected. It does not disclose the return value or whether the replacement is reversible, which matters since annotations label this non-destructive despite a replace-all semantic.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, and the headline purpose is front-loaded ahead of the two caveats. Every clause carries information an agent cannot get from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover the safety profile and there is no output schema to explain, so the remaining burden is small but not fully met: it is unclear whether omitted fields are left untouched (partial update) or cleared, which is the single most important ambiguity for an update tool. Adding one sentence on that and on failure behavior for a missing/invalid id would close the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description must carry the load, and it does so for exactly one parameter: it explains that `properties` is a full replacement, not an append/merge. The other parameters (name, title, description, and the id format) get no added meaning from the description; `id` is partly covered by the schema's etp_xxx/name/w:name note, but the update-vs-omit semantics of the scalar fields are left unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Update a workspace event definition") that maps cleanly onto update-workspace-event and is distinguishable from the get-/list-/create-/delete-workspace-event siblings by prefix. It stops short of explicitly naming a sibling or the object it operates on for an agent unfamiliar with the domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the tool is for editing an existing event *definition*, and "Stored events are not changed" signals the scope boundary between definition and instance. There is no explicit when-to-use, no prerequisites (e.g. that the definition must already exist, use create-workspace-event otherwise), and no mention of delete-workspace-event for removal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload-dmarc-reportUpload DMARC ReportBInspect
Import a DMARC aggregate report (XML, or base64 of a .xml/.gz/.zip file) for a domain.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. | |
| content | No | Raw report XML. | |
| filename | No | ||
| content_base64 | No | Base64 of the report file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false), so the description only needs to add context. It adds the accepted input formats, which is genuinely useful, but says nothing about duplicate handling, validation failures, or what a rejected report looks like — notable given the non-idempotent flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the accepted formats are packed into the same clause rather than padded into a second paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent write with four parameters and no output schema, the description covers input format but omits the outcome: whether an imported report returns an ID, whether re-imports are rejected or duplicated, and whether the report is parsed synchronously.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% with only 'filename' undocumented. The description earns credit by explaining the choice between the two content parameters — raw XML versus base64 of a .xml/.gz/.zip — which the schema does not disambiguate. It does not clarify the semantics of filename.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (import) and a specific resource (DMARC aggregate report), plus the accepted encodings. The word 'aggregate' implicitly separates it from the forensic-report siblings, though no sibling is named outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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-dmarc-report or list-dmarc-reports, no prerequisite that the domain must already exist, and no statement about what to do when a report has already been imported.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify-domainVerify DomainAInspect
Look up the domain's DNS records now and update the verification status of each record.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, so the safety profile is covered. The description adds that the call performs an immediate live DNS lookup and updates each record's status individually, but says nothing about what happens when a lookup fails, whether statuses regress, or whether repeated calls are safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, no filler, and the action and side effect are front-loaded. Nothing in it is redundant with the title alone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter and no output schema, the definition covers the mechanics but leaves the agent unsure what the call yields (per-record statuses? overall pass/fail?) and how partial DNS failures are reported. For a non-idempotent external-network mutation, a note on outcome or failure behavior would close the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'id' parameter is documented in the schema as 'Domain ID.' The description adds no format, example, or sourcing guidance for the id, so the schema does all the work and the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb pair (look up DNS records, update verification status) and a specific resource (the domain identified by id). It is clearly distinguishable from get-domain (read-only fetch) and update-domain (manual edit) because it performs a live external lookup plus a status mutation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'now' – re-run after DNS changes to refresh verification state – but the description never states when to call it versus get-domain, update-domain, or create-domain, and gives no prerequisites or exclusions. An agent can infer the intent but must guess the trigger conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify-emailVerify Email AddressBInspect
Check whether one address is deliverable. Result is safe, role, catch_all, unknown, inbox_full, disabled, disposable or invalid. Uses verification credits.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | fast (default): syntax, domain and list checks only. full: also asks the mailbox server whether the address exists and whether the domain is catch-all. | |
| Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by disclosing the credit cost, which is critical for an agent deciding whether to call this repeatedly; this is consistent with readOnlyHint=false. It also enumerates the possible result values, useful given there is no output schema, though it omits latency/escalation differences between fast and full checks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the deliverability check front-loaded, followed by result values and cost. The result enumeration is lengthy but earns its place because no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, covering result values is the right call, and credit cost is disclosed. What is missing is how 'mode' affects the meaning or confidence of the returned status (e.g., 'unknown' in fast vs full), which an agent needs to interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: the 'mode' parameter is well documented in the schema itself, and 'email' is self-evident as the single required input, so the description needn't repeat them. However, the description never mentions that 'mode' changes what is checked, so it adds nothing to parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Check') and a specific resource scope ('one address is deliverable'), which distinguishes it from the sibling verify-domain (domains) and from list-based verification tools. It is not fully explicit about sibling differentiation, but 'one address' does the disambiguating work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 verify-domain, create-verification-list, or bulk verification flows, and no mention of preconditions (e.g., whether the address needs to exist in the workspace first). Usage is only inferable from the purpose statement.
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.
132 tool updates
- First observed
add-audience-subscriber - First observed
add-contact-tags - First observed
bulk-add-contacts-to-audience - First observed
bulk-delete-contacts - First observed
bulk-remove-audience-subscribers - First observed
bulk-remove-contacts-from-audience - First observed
bulk-resubscribe-contacts - First observed
bulk-unsubscribe-contacts - First observed
bulk-update-audience-subscribers - First observed
cancel-automation-run - First observed
cancel-campaign - First observed
cancel-email - First observed
create-api-key - First observed
create-audience - First observed
create-automation - First observed
create-campaign - First observed
create-contact - First observed
create-domain - First observed
create-form - First observed
create-global-value - First observed
create-suppression - First observed
create-template - First observed
create-verification-list - First observed
create-webhook - First observed
create-workspace-event - First observed
delete-api-key - First observed
delete-audience - First observed
delete-automation - First observed
delete-campaign - First observed
delete-contact - First observed
delete-domain - First observed
delete-form - First observed
delete-global-value - First observed
delete-suppression - First observed
delete-template - First observed
delete-webhook - First observed
delete-workspace-event - First observed
export-contacts - First observed
forward-email - First observed
get-api-key - First observed
get-audience - First observed
get-audience-subscriber - First observed
get-automation - First observed
get-automation-run - First observed
get-automation-stats - First observed
get-automation-step-stats - First observed
get-campaign - First observed
get-campaign-stats - First observed
get-contact - First observed
get-current-workspace - First observed
get-dmarc-forensic-report - First observed
get-dmarc-report - First observed
get-dmarc-stats - First observed
get-domain - First observed
get-email - First observed
get-email-attachments - First observed
get-email-body - First observed
get-email-meta - First observed
get-email-raw - First observed
get-event - First observed
get-form - First observed
get-global-value - First observed
get-suppression - First observed
get-template - First observed
get-verification-list - First observed
get-verification-list-results - First observed
get-webhook - First observed
get-workspace-event - First observed
list-api-keys - First observed
list-audience-subscribers - First observed
list-audiences - First observed
list-automation-runs - First observed
list-automations - First observed
list-campaigns - First observed
list-contact-automation-runs - First observed
list-contact-tags - First observed
list-contacts - First observed
list-dmarc-asns - First observed
list-dmarc-countries - First observed
list-dmarc-forensic-reports - First observed
list-dmarc-reporters - First observed
list-dmarc-reports - First observed
list-dmarc-sources - First observed
list-domains - First observed
list-emails - First observed
list-events - First observed
list-forms - First observed
list-global-values - First observed
list-suppressions - First observed
list-templates - First observed
list-verification-lists - First observed
list-webhooks - First observed
list-workspace-events - First observed
merge-audiences - First observed
pause-automation - First observed
publish-form - First observed
publish-template - First observed
regenerate-api-key - First observed
remove-audience-subscriber - First observed
remove-contact-from-automation - First observed
remove-contact-tags - First observed
reset-form-token - First observed
reset-webhook-secret - First observed
retry-email - First observed
retry-failed-webhook-requests - First observed
retry-webhook-request - First observed
send-campaign - First observed
send-email - First observed
send-event - First observed
start-automation - First observed
stop-automation - First observed
test-webhook - First observed
trigger-automation - First observed
unpublish-form - First observed
update-api-key - First observed
update-audience - First observed
update-audience-subscriber - First observed
update-automation - First observed
update-campaign - First observed
update-contact - First observed
update-contact-score - First observed
update-domain - First observed
update-email - First observed
update-form - First observed
update-global-value - First observed
update-suppression - First observed
update-template - First observed
update-webhook - First observed
update-workspace-event - First observed
upload-dmarc-report - First observed
verify-domain - First observed
verify-email
Related MCP Connectors
Send transactional email, run campaigns, manage contacts and automations, audit deliverability.
- AhaSendOAuthcom.ahasend
Send email, check deliverability, set up domains, and run templates, contacts and campaigns.
- EnvlopedOAuthcom.envloped
Send transactional email, verify domains, build contact segments, and draft marketing campaigns.
- coldingOAuthapp.colding
Send and read email through connected mailboxes. Warm them up, check addresses and run campaigns.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceSend email, find out why an email failed, set up sending domains, and manage templates, contacts, lists and campaigns in your AhaSend account.MIT
- AlicenseNot gradedqualityCmaintenanceEnables sending transactional emails individually or in batches, checking delivery status, and monitoring domain email reputation metrics. It supports email tracking with tags and custom metadata.MIT
- AlicenseAqualityAmaintenanceEnables AI agents to send transactional email, authenticate sending domains, track delivery, and diagnose deliverability issues programmatically.1320 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables users to search, read, and create ecommerce email marketing assets such as campaigns, automations, popups, and landing pages, manage sending-domain setup, and with confirmation schedule/send campaigns or publish/pause assets.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.