PostStack MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PostStack MCP Serversend a welcome email to alex@example.com using our welcome template"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@poststack.dev/mcp
Model Context Protocol server for the PostStack Email API — an EU-hosted, GDPR-compliant email API for AI agents. Lets assistants like Claude, Cursor, and Windsurf send transactional email, draft replies from inbound threads, run deliverability checks, summarise broadcasts, and more — through one curated tool surface.
102 tools, 5 prompts, and 5 resources, all surfaced over either the local
stdio bin or the hosted HTTP transport at https://api.poststack.dev/mcp.
Full MCP reference: poststack.dev/docs/mcp.
Quickstart
Hosted (Claude.ai connector, hosted agents)
Point any MCP client at:
https://api.poststack.dev/mcpAuthenticate with your PostStack API key as a Bearer token. No local install required.
Claude Desktop (stdio)
{
"mcpServers": {
"poststack": {
"command": "npx",
"args": ["-y", "@poststack.dev/mcp"],
"env": {
"POSTSTACK_API_KEY": "sk_live_your_api_key_here"
}
}
}
}Config file location:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
You can also generate the snippet with:
npx @poststack.dev/mcp --print-config claude-desktopClaude Code
claude mcp add poststack -e POSTSTACK_API_KEY=sk_live_your_api_key_here -- npx -y @poststack.dev/mcpCursor / VS Code
Same JSON shape as Claude Desktop, in the editor's MCP settings.
Related MCP server: Resend MCP Server
Environment variables
Variable | Required | Description |
| yes | PostStack API key ( |
| no | Set to |
What the agent gets
The MCP server doesn't just mirror the REST API — it gives agents the context tools they need to make sensible decisions: spam-checking before sending, deliverability summaries before picking a from-address, engagement scores before re-engaging a contact.
Worked example: welcome email
The draft_welcome_email prompt walks an agent through:
get_contact_by_email— confirm the contact and capture propertieslist_templates— pick a published welcome templaterender_template— render with the contact's properties; surface any missing variablessuggest_from_address— pick a verified from-address based on existing mailboxespreview_email— render + spam check + deliverability warnings in one round-tripsend_email— only if preview passed
Other prompts cover re-engagement, follow-up campaigns to non-clickers, broadcast summaries, and inbound triage.
Reference
Tools (102)
emails
send_email— Send a single transactional email immediately, or schedule it for a future time.send_batch_emails— Send multiple emails in a single batch request (up to 100 per call).list_emails— List previously-sent emails with optional filters and pagination.get_email— Get full details and event timeline for a specific email by id.cancel_email— Cancel a scheduled email that has not yet entered the sending pipeline.reschedule_email— Reschedule a scheduled email to a new send time.lint_email— Run a Rspamd-backed spam pre-flight on a draft email and return the score, action, and per-rule symbols.preview_email— Render + lint + measure an email in one shot WITHOUT sending it.
email-validations
validate_email— Check whether an email address is safe to send to BEFORE create_contact or send_email.validate_email_batch— Validate up to 100 email addresses in a single call. Same checks as validate_email per address.
contacts
create_contact— Create a new contact (person who can receive emails / broadcasts).list_contacts— List contacts with optional search and segment filtering.get_contact— Get full details of a contact by id.update_contact— Update an existing contact's name, properties, or subscription state.delete_contact— Permanently delete a contact (irreversible — use unsubscribe_contact for opt-outs).unsubscribe_contact— Mark a contact as unsubscribed from all email (preserves the contact record).get_contact_by_email— Look up a contact by their email address.get_contact_activity— Get a contact's recent email-event timeline grouped by event type (sent / delivered / opened / clicked / bounced / complained / failed).get_engagement_summary— Get a single contact's engagement summary: segment + lifetime counts + open / click rates + last open / click + top tags.search_contacts— Search contacts with filters (segment, engagement, unsubscribed) and a fuzzy query across email/first_name/last_name. Adds a match_reason on each row indicating which field matched the query.
templates
create_template— Create a new email template with {{variable}} placeholders.list_templates— List email templates.get_template— Get a template's full body, subject and variables.update_template— Update an existing template's name, subject, body or variable list.delete_template— Permanently delete a template (irreversible).publish_template— Mark a template as published so it can be referenced by send_email.unpublish_template— Mark a template as unpublished so it cannot be sent.duplicate_template— Create a copy of an existing template (new id, same body, name suffixed " (copy)").render_template— Server-side render a template with the provided variables.
broadcasts
create_broadcast— Create a draft broadcast targeted at a segment.list_broadcasts— List broadcasts.get_broadcast— Get a broadcast's details and aggregate delivery stats.update_broadcast— Edit a draft broadcast in place. Only draft broadcasts can be updated.send_broadcast— Dispatch a draft broadcast to its segment immediately.cancel_broadcast— Cancel a queued or sending broadcast.broadcast_performance— Get broadcast performance — either for one broadcast (variant breakdown if A/B) or for a leaderboard ranked by a chosen metric.find_non_clickers— List contacts who received a broadcast but did NOT click any tracked link in it.
segments
create_segment— Create a static contact segment (manually-managed list).list_segments— List contact segments.get_segment— Get a segment's details and member count.update_segment— Rename an existing segment.delete_segment— Delete a segment definition. Contacts in it are NOT deleted.add_contacts_to_segment— Add one or more contacts to a segment.remove_contact_from_segment— Remove a single contact from a segment.
workflows
list_workflows— List all workflows (event-triggered automation pipelines) defined for this team.get_workflow— Get full details of a workflow including its ordered steps.create_workflow— Create a new workflow shell (no steps yet, status=draft).update_workflow— Update a workflow's name, trigger type, or trigger config.delete_workflow— Permanently delete a workflow and its steps. In-flight runs are NOT cancelled — they finish on the live engine.add_workflow_step— Append (or insert) a step to a workflow.update_workflow_step— Update a step's config. Cannot change step_type or position — delete and re-add for that.remove_workflow_step— Remove a step from a workflow. Remaining steps keep their positions (gaps are allowed).activate_workflow— Move a workflow from draft/paused to active so new trigger events start runs.pause_workflow— Pause an active workflow so new trigger events DO NOT start runs. In-flight runs continue to completion.trigger_workflow— Manually fire a workflow for a specific contact. Works for any trigger_type, but most useful for "manual" workflows.
signup-forms
list_signup_forms— List embeddable signup forms.get_signup_form— Get full details of a signup form including its fields, target segment, and submission count.create_signup_form— Create an embeddable signup form. Submissions create a contact and optionally add them to a segment / subscription topic.update_signup_form— Update a signup form's fields, target segment/topic, messaging, or active state.delete_signup_form— Permanently delete a signup form. Embedded copies on existing pages will fail with 404.
domains
create_domain— Add a new sending domain to PostStack.list_domains— List sending domains.get_domain— Get domain details including DNS records and verification status.verify_domain— Trigger DNS verification for a domain.update_domain— Update domain settings (tracking, TLS, inbound, BIMI, sending stream).delete_domain— Permanently delete a sending domain (irreversible — historical email records remain).check_deliverability— Check whether a from-address is safe to send from RIGHT NOW.
mailboxes
create_mailbox— Provision a mailbox (IMAP/SMTP inbox) on a verified domain.list_mailboxes— List mailboxes across all domains.get_mailbox— Get a mailbox's metadata (status, quota, last login).update_mailbox— Update a mailbox's display name, quota, status, or webhook setting.delete_mailbox— Permanently delete a mailbox and all its stored mail.change_mailbox_password— Reset a mailbox's IMAP/SMTP password.suggest_from_address— Suggest sensible from-addresses for a given purpose, drawn from the team's verified domains + existing mailboxes.
inbound-emails
list_inbound_emails— List inbound emails received by mailboxes on this account.get_inbound_email— Get a received inbound email's full headers and body.list_inbound_email_attachments— List attachments on an inbound email (filename, size, contentType).reply_to_inbound_email— Send a reply to an inbound email (subject and threading headers are set automatically).forward_inbound_email— Forward an inbound email to other recipients with an optional cover note.draft_from_thread— Build a reply-draft skeleton for an inbound email — proper threading, quoted original, salutation/sign-off, suggested from + subject. Heuristic only; the agent fills in the body text.
webhooks
create_webhook— Subscribe a URL to receive event notifications via signed POST requests.list_webhooks— List configured webhook endpoints.get_webhook— Get a webhook's details.update_webhook— Edit a webhook's URL, event list, or enabled state.delete_webhook— Permanently delete a webhook endpoint.
subscription-topics
create_subscription_topic— Create a subscription topic (named opt-in/opt-out preference like "Product Updates").list_subscription_topics— List all subscription topics defined for this account.delete_subscription_topic— Permanently delete a subscription topic. Subscriptions are removed.get_contact_subscriptions— List the subscription topics a contact is currently opted in to.subscribe_contact_to_topic— Opt a contact in to a subscription topic.unsubscribe_contact_from_topic— Opt a contact out of a subscription topic.
contact-properties
create_contact_property— Define a custom contact property (typed schema for the contact.properties field).list_contact_properties— List all custom contact properties defined for this account.update_contact_property— Edit a custom contact property's label, options or required flag.delete_contact_property— Remove a custom contact property definition. Existing contact values for this property are dropped.
suppressions
list_suppressions— List suppressed email addresses (will not receive any emails).add_suppression— Block an email address from receiving any future sends.remove_suppression— Remove an address from the suppression list (sends will resume).
api-keys
create_api_key— Generate a new PostStack API key. The full key is returned ONCE in this response and cannot be retrieved again.list_api_keys— List API keys (only the prefix is returned, never the full secret).get_api_key— Get an API key's metadata (the secret is never returned after creation).revoke_api_key— Permanently revoke an API key — all subsequent requests using it will fail.
Prompts (5)
draft_welcome_email— Guide the agent through drafting and sending a personalised welcome email to a new contact. Looks the contact up, picks a published welcome template, renders it, lints, and sends.reengage_dormant— Find dormant contacts and draft a re-engagement campaign. Pulls the dormant segment, picks an opt-out-friendly template, and stages a broadcast for review.followup_non_clickers— Demo B path — find the best-performing recent broadcast, identify recipients who did NOT click, and draft a follow-up to them.summarize_campaign— Produce a short performance report for a broadcast: headline metrics, A/B winner if applicable, and a one-line recommendation.triage_inbound— Read an inbound email, classify it (support / sales / billing / spam / other), and propose the next action. Drafts a reply skeleton if appropriate.
Resources (5)
poststack://templates— List of all email templates for the authenticated team. Includes id, name, subject, version, published flag.poststack://templates/{id}— A single template by publicId — full body, subject, variables.poststack://domains— List of sending domains for the authenticated team — name, status, DNS records, tracking flags.poststack://segments— List of contact segments for the authenticated team — id, name, contact count.poststack://brand— Authenticated team identity + a default sending suggestion. Includes team name, verified domain count, and the recommended from-address derived from existing mailboxes.
Links
MCP server documentation — full tool / prompt / resource reference
Hosted MCP transport — no local install required
Pricing — free 3,000 emails/month
License
MIT — see LICENSE.
Available Tools
84 toolsadd_contacts_to_segmentA
Add one or more contacts to a segment. When to use: enroll specific contacts in an existing segment (e.g. agent built a list and wants to materialise it). Returns: { added: number } or similar success indicator. Example: { id: "seg_abc", contact_ids: ["con_1", "con_2"] }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Segment ID | |
| contact_ids | Yes | Contact IDs to add |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully describes the operation's purpose, provides a usage scenario, and discloses the return format ('{ added: number } or similar success indicator'). However, it doesn't mention potential side effects, error conditions, or permission requirements that might be relevant for a mutation operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four distinct, purposeful sentences: purpose statement, usage guidelines, return value disclosure, and parameter example. Each sentence adds unique value with zero redundancy, and the most critical information (what the tool does) is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description provides good coverage: clear purpose, usage context, return format, and parameter example. However, it lacks details about error handling, idempotency, or what happens when adding contacts that are already in the segment, which would be helpful for a tool that modifies data.
Complex tools with many parameters or behaviors need more documentation. 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 description coverage is 100%, so the schema already documents both parameters ('Segment ID' and 'Contact IDs to add'). The description adds minimal value beyond the schema by providing an example parameter structure, but doesn't explain format requirements, constraints, or relationships between parameters that aren't already in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Add'), resource ('contacts'), and target ('to a segment') in the first sentence. It distinguishes from sibling tools like 'remove_contact_from_segment' by specifying the opposite operation, and from 'create_segment' by focusing on adding contacts to existing segments rather than creating new ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'When to use' section explicitly provides usage context: 'enroll specific contacts in an existing segment' and gives a concrete example scenario ('agent built a list and wants to materialise it'). This clearly distinguishes when to use this tool versus alternatives like 'create_segment' for new segments or 'update_segment' for modifying segment properties.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_suppressionA
Block an email address from receiving any future sends. When to use: a recipient asked to be removed (manual), or you're importing prior bounces/complaints. Returns: shaped suppression record. Example: { email: "bouncy@aol.com", reason: "hard_bounce" }
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address to suppress | ||
| reason | No | Reason for suppression (defaults to "manual") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by explaining the tool's effect ('Block... from receiving any future sends') and return format ('shaped suppression record'). It could improve by mentioning potential side effects (e.g., whether this affects existing emails) or permission requirements, but covers core behavior adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly structured: purpose statement first, usage guidelines second, return information third, and an example fourth. Every sentence adds value with zero wasted words, making it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description does well by explaining the action, when to use it, and what it returns. It could be more complete by explicitly stating this is a write operation or mentioning any constraints, but it provides sufficient context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds minimal value beyond the schema - it provides an example showing parameter usage but doesn't explain semantics beyond what's in the schema descriptions. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Block an email address') and resource ('from receiving any future sends'), distinguishing it from siblings like 'remove_suppression' or 'list_suppressions'. It uses precise terminology that conveys the tool's exact function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when-to-use guidance: 'a recipient asked to be removed (manual), or you're importing prior bounces/complaints.' This gives concrete scenarios for application, helping differentiate from other suppression-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
broadcast_performanceA
Get broadcast performance — either for one broadcast (variant breakdown if A/B) or for a leaderboard ranked by a chosen metric. When to use: agent wants to find the best-performing broadcast in a date range, or drill into one broadcast's stats. Pass broadcast_id for single mode, or { since, best_metric } for leaderboard mode. Returns: single mode → { broadcast: { id, subject, status, sent_at, total_recipients, delivered, opened, clicked, bounced, open_rate, click_rate }, variants: [...]|null }. Leaderboard → { metric, since, broadcasts: [...] } sorted by metric desc. Example: { broadcast_id: "br_abc" } — single mode. Example: { since: "2026-03-01T00:00:00Z", best_metric: "click_rate", limit: 5 } — leaderboard mode.
| Name | Required | Description | Default |
|---|---|---|---|
| broadcast_id | No | Broadcast publicId — single-broadcast mode | |
| since | No | ISO 8601 cutoff for leaderboard mode (default: 30 days ago) | |
| best_metric | No | Metric for ranking in leaderboard mode (default: click_rate) | |
| limit | No | Max broadcasts in leaderboard (default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's dual-mode behavior, return formats for both modes, and sorting behavior ('sorted by metric desc'). However, it doesn't mention potential limitations like rate limits, authentication requirements, or error conditions that would be helpful for complete transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with zero wasted sentences. It front-loads the purpose, immediately follows with usage guidelines, then provides return format details, and concludes with practical examples. Every sentence serves a distinct purpose: mode explanation, usage guidance, output specification, and parameter illustration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, no annotations, and no output schema, the description does an excellent job covering operational behavior, return formats, and parameter semantics. The only minor gap is the lack of explicit mention about default values (though implied in examples) and potential error cases. Given the complexity of dual-mode operation, the description is nearly complete for agent understanding.
Complex tools with many parameters or behaviors need more documentation. 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, the baseline is 3. The description adds significant value by explaining the semantic relationship between parameters - specifically how 'broadcast_id' triggers single mode while 'since' and 'best_metric' trigger leaderboard mode. It provides concrete examples showing parameter combinations, which helps the agent understand the mutually exclusive usage patterns beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Get broadcast performance') and distinguishes between two distinct modes (single broadcast analysis vs. leaderboard ranking). It explicitly differentiates from sibling tools like 'get_broadcast' (which likely retrieves metadata) by focusing on performance metrics and ranking capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('agent wants to find the best-performing broadcast in a date range, or drill into one broadcast's stats') and clearly distinguishes between the two operational modes with parameter-based instructions. It offers practical examples for both modes, making it easy for an agent to select the appropriate usage scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_broadcastA
Cancel a queued or sending broadcast. When to use: stop a broadcast mid-flight. Already-delivered messages cannot be recalled. Returns: { success: boolean }. Example: { id: "br_abc" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Broadcast ID to cancel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's destructive nature ('cancel'), operational constraints ('queued or sending' only, not delivered), and return format ('{ success: boolean }'), though it doesn't mention permissions, rate limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four concise sentences: purpose statement, usage guidance, return format, and example. Every sentence adds value without redundancy, and key information is front-loaded appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 tool with no annotations and no output schema, the description provides good coverage: clear purpose, usage boundaries, behavioral constraints, and return format. It could be more complete by mentioning authentication requirements or error cases, but it's substantially 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%, so the schema already documents the single 'id' parameter. The description adds minimal value beyond the schema by providing an example ('{ id: "br_abc" }') but doesn't explain parameter semantics further. Baseline 3 is appropriate when 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 clearly states the specific action ('Cancel') and target resource ('a queued or sending broadcast'), distinguishing it from sibling tools like 'update_broadcast' or 'get_broadcast'. It precisely defines the operation's scope without being tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when-to-use guidance ('stop a broadcast mid-flight') and a critical exclusion ('Already-delivered messages cannot be recalled'), helping the agent choose this tool over alternatives like 'update_broadcast' or 'reschedule_email' for cancellation scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_emailA
Cancel a scheduled email that has not yet entered the sending pipeline. When to use: agent wants to recall a scheduled send before it goes out. Cannot cancel emails already delivered. Returns: { success: boolean }. Example: { id: "em_7kf2x9" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID to cancel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by specifying the precondition ('scheduled email that has not yet entered the sending pipeline'), the limitation ('Cannot cancel emails already delivered'), and the return format ('{ success: boolean }'). It doesn't mention error conditions or authentication requirements, but provides substantial behavioral context for a single-parameter 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?
Perfectly structured with four distinct, purposeful sentences: purpose statement, usage guidance, return format, and example. Each sentence adds unique value with zero redundancy. The description is appropriately sized and front-loaded with the most critical 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 mutation tool with no annotations and no output schema, the description provides everything needed: clear purpose, precise usage conditions, behavioral constraints, return format, and parameter example. It addresses the key concerns for a destructive operation (cancellation) without over-explaining simple concepts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with the parameter 'id' documented as 'Email ID to cancel.' The description adds value by providing an example format '{ id: "em_7kf2x9" }' which clarifies the expected parameter structure beyond the schema's basic type information. This compensates well for having only one parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Cancel a scheduled email') and the resource ('email that has not yet entered the sending pipeline'), distinguishing it from siblings like 'cancel_broadcast' which operates on a different resource. It provides precise scope information that goes beyond just restating 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?
Explicitly states 'When to use: agent wants to recall a scheduled send before it goes out' and provides a clear exclusion 'Cannot cancel emails already delivered.' This gives perfect guidance on when this tool is appropriate versus when it won't work, addressing the key decision criteria for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_mailbox_passwordA
Reset a mailbox's IMAP/SMTP password. When to use: rotate after suspected exposure, or onboarding handoff. Returns: { success: boolean }. Example: { id: 17, password: "" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Mailbox ID | |
| password | Yes | New password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates this is a mutation operation ('Reset') and specifies the return format, but doesn't mention important behavioral aspects like authentication requirements, rate limits, whether the old password becomes invalid immediately, or potential side effects on connected email clients. The description adds some value but leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with purpose statement, usage guidelines, return format, and example in just four lines. Each sentence serves a distinct purpose, though the example could be slightly more clearly formatted or labeled as such.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 no annotations and no output schema, the description provides purpose, usage guidelines, and return format, but lacks important contextual information about authentication requirements, error conditions, or what happens to existing sessions. The example helps but doesn't fully compensate for the missing behavioral context that would be crucial for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds value by providing an example parameter structure '{ id: 17, password: "<new strong>" }' that illustrates proper usage, though it doesn't elaborate on password strength requirements or ID validation beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Reset a mailbox's IMAP/SMTP password') and identifies the resource ('mailbox'), making the purpose immediately apparent. It distinguishes this tool from sibling tools like 'update_mailbox' or 'create_mailbox' by focusing specifically on password reset functionality rather than general mailbox updates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance with 'When to use: rotate after suspected exposure, or onboarding handoff.' This gives clear scenarios for when this tool should be invoked, helping the agent distinguish it from other password-related or mailbox management tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_deliverabilityA
Check whether a from-address is safe to send from RIGHT NOW. When to use: BEFORE sending agent-generated content from a non-default domain. Combines DNS verification (DKIM/SPF/DMARC), 30-day bounce + complaint rates, and the standard deliverability warnings (no plain-text body, link-domain mismatch, oversized HTML, etc.) into one response. Returns: { from, domain, domain_verified, dkim, spf, dmarc, return_path, volume_30d, bounce_rate, complaint_rate, warnings[] }. Example: { from: "Acme hi@acme.io" }
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | Sender address (e.g. "Acme <hi@acme.io>" or "hi@acme.io") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does: combines DNS verification, bounce/complaint rates, and deliverability warnings into one response. It also hints at the tool's read-only nature by using 'check' and not implying any modifications, though it doesn't explicitly state permissions 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?
The description is well-structured and front-loaded with the core purpose, followed by usage guidelines, return details, and an example. Every sentence adds essential information without redundancy, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (1 parameter, no output schema, no annotations), the description is quite complete. It explains the purpose, usage, and return structure in detail. However, it lacks explicit mention of error handling or edge cases, which slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the baseline is 3. The description adds value by providing an example parameter usage ('Example: { from: "Acme <hi@acme.io>" }'), which clarifies the expected format beyond the schema's generic description, earning a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-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 explicitly states the tool's purpose: 'Check whether a from-address is safe to send from RIGHT NOW.' It specifies the verb ('check'), resource ('from-address'), and scope ('safe to send from'), clearly distinguishing it from sibling tools like 'verify_domain' or 'suggest_from_address' that serve different functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'When to use: BEFORE sending agent-generated content from a non-default domain.' This clearly indicates the timing ('BEFORE'), context ('agent-generated content'), and condition ('non-default domain'), helping users distinguish when to use this tool versus alternatives like 'send_email' or 'lint_email'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_api_keyA
Generate a new PostStack API key. The full key is returned ONCE in this response and cannot be retrieved again. When to use: agent needs to provision credentials for a new integration. Pick "sending_access" for send-only keys (recommended for app servers) or "full_access" for management. Returns: shaped key including the secret string — display it once and tell the user to store it securely. Example: { name: "Backend prod", permission: "sending_access" }
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the API key | |
| permission | Yes | Permission level: full_access or sending_access (send-only) | |
| mode | No | Key mode (defaults to "live") | |
| domain_id | No | Restrict key to a specific domain ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively explains critical behaviors: the key is returned only once and cannot be retrieved again, and the agent should display it once and advise secure storage. However, it doesn't mention potential side effects like rate limits, authentication requirements, or whether this operation is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four sentences that each serve a distinct purpose: stating the action, warning about one-time retrieval, providing usage guidelines, and giving an example. There is no wasted verbiage, and key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description does well by explaining the one-time nature of the response and security implications. However, it could be more complete by detailing the return format beyond 'shaped key' or mentioning error conditions, though the usage guidelines and behavioral notes partially compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema by providing an example with 'name' and 'permission' parameters, but doesn't explain 'mode' or 'domain_id' semantics further. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Generate a new PostStack API key') and resource ('API key'), distinguishing it from sibling tools like 'get_api_key' and 'list_api_keys' which retrieve existing keys rather than creating new ones. The verb 'Generate' is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'When to use: agent needs to provision credentials for a new integration' and provides clear alternatives for the 'permission' parameter ('sending_access' for send-only keys vs. 'full_access' for management). It also recommends 'sending_access' for app servers, offering practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_broadcastA
Create a draft broadcast targeted at a segment. When to use: agent has assembled a campaign body + segment id and wants to stage it for review or scheduled send. Created in "draft" status — call send_broadcast to dispatch. Returns: shaped broadcast (id, subject, status=draft, recipient counts will populate on send). Example: { segment_id: "seg_abc", from: "Acme hi@acme.io", subject: "April update", html }
| Name | Required | Description | Default |
|---|---|---|---|
| segment_id | Yes | Segment ID to send to | |
| from | Yes | Sender email address | |
| subject | Yes | Email subject line | |
| html | No | HTML body content | |
| text | No | Plain text body content | |
| reply_to | No | Reply-to address | |
| name | No | Internal broadcast name | |
| scheduled_at | No | ISO 8601 datetime to schedule sending | |
| topic_id | No | Subscription topic ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: the broadcast is created in 'draft' status, requires subsequent 'send_broadcast' to dispatch, and returns a shaped broadcast with specific fields (id, subject, status=draft, recipient counts will populate on send). It doesn't mention permissions, rate limits, or error conditions, but covers the core workflow adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise, with four sentences that each add value: purpose statement, usage guidelines, behavioral context, and an example. There is no redundant or unnecessary information, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (creation with 9 parameters) and lack of annotations or output schema, the description does a good job of covering essential context: purpose, usage, behavioral traits, and an example. It doesn't detail all parameters or error handling, but for a tool with high schema coverage, it provides sufficient guidance for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly. The description adds minimal parameter semantics beyond the schema—it mentions 'segment_id', 'from', 'subject', and 'html' in the example but doesn't explain their roles or constraints further. This meets the baseline of 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb+resource: 'Create a draft broadcast targeted at a segment.' It distinguishes from siblings like 'send_broadcast' by specifying it creates a draft, not a sent broadcast, and from 'update_broadcast' by focusing on creation rather than modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'When to use: agent has assembled a campaign body + segment id and wants to stage it for review or scheduled send.' It also specifies the alternative action: 'call send_broadcast to dispatch,' clearly differentiating when to use this tool versus its sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_contactA
Create a new contact (person who can receive emails / broadcasts). When to use: ingest a new signup, programmatic enrollment, or one-off addition. For bulk imports prefer the API import endpoint. Returns: shaped contact (id, email, names, properties, createdAt). Example: { email: "ada@lovelace.io", first_name: "Ada", properties: { plan: "pro" } }
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Contact email address | ||
| first_name | No | First name | |
| last_name | No | Last name | |
| unsubscribed | No | Whether the contact is unsubscribed | |
| properties | No | Custom properties |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by specifying the return format ('shaped contact (id, email, names, properties, createdAt)') and providing an example. It doesn't mention permissions, rate limits, or error conditions, but covers core behavior adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Perfectly structured with purpose statement, usage guidelines, return specification, and example - all in four concise sentences with zero wasted words. Front-loaded with 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 creation tool with no annotations and no output schema, the description provides excellent context: clear purpose, usage guidelines, return format, and example. It doesn't cover error cases or system limits, but is quite complete for practical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description doesn't add parameter-specific information beyond what's in the schema, but the example illustrates usage of email, first_name, and properties parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create') and resource ('new contact'), with additional context about what a contact represents ('person who can receive emails / broadcasts'). It distinguishes from sibling tools like 'update_contact' by focusing on creation rather than modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides when-to-use guidance ('ingest a new signup, programmatic enrollment, or one-off addition') and when-not-to-use alternatives ('For bulk imports prefer the API import endpoint'), clearly differentiating from bulk operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_contact_propertyA
Define a custom contact property (typed schema for the contact.properties field). When to use: agent is extending the contact data model — e.g. add a "plan" or "company" field that other tools can filter on. Returns: shaped property definition. Example: { name: "plan", label: "Subscription Plan", type: "select", options: ["free","pro","scale"] }
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Property key name (e.g. "plan") | |
| label | Yes | Display label (e.g. "Subscription Plan") | |
| type | No | Property type (defaults to "text") | |
| options | No | Options for select-type properties | |
| required | No | Whether this property is required |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool 'Define[s] a custom contact property' and mentions it 'Returns: shaped property definition', which implies a write operation with a structured output. However, it lacks details on permissions, side effects, or error conditions that would be important for a creation 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?
Well-structured with three sentences: purpose statement, usage guidelines, and an example. Each sentence earns its place by providing essential information without redundancy. The description is front-loaded with the core function and remains appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 creation tool with no annotations and no output schema, the description does well by explaining purpose, usage, and providing an example return. However, it lacks details on behavioral aspects like permissions or error handling, which would be needed for full completeness given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 5 parameters. The description adds minimal param semantics beyond the schema, only hinting at usage in the example. Baseline 3 is appropriate as the schema does the heavy lifting, but the description doesn't add significant value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Define' and resource 'custom contact property', specifying it creates a typed schema for contact.properties. It distinguishes from siblings like list_contact_properties (reads) and delete_contact_property (removes), making the purpose specific and 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?
Explicitly provides 'When to use' guidance: 'agent is extending the contact data model — e.g. add a "plan" or "company" field that other tools can filter on.' This gives clear context for when this tool is appropriate versus alternatives like update_contact_property or list_contact_properties.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_domainA
Add a new sending domain to PostStack. When to use: a customer is onboarding a new sending domain. The response includes DNS records (SPF, DKIM, DMARC, return-path) the user must configure before verify_domain succeeds. Returns: shaped domain with dnsRecords[] and pending status. Example: { name: "send.acme.io", region: "eu-west-1" }
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Domain name (e.g. "example.com") | |
| region | No | Sending region | |
| custom_return_path | No | Custom return-path subdomain | |
| open_tracking | No | Enable open tracking | |
| click_tracking | No | Enable click tracking | |
| tls_mode | No | TLS enforcement mode |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it creates a new domain, returns DNS records that require user configuration, and results in a 'pending status' until verification. However, it doesn't mention potential errors, rate limits, or authentication 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 efficiently structured with three sentences: purpose, usage context, and return value. Each sentence adds essential information without redundancy, and it's appropriately front-loaded with the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 creation tool with 6 parameters, 100% schema coverage, and no output schema, the description provides good context about the tool's purpose, usage, and return behavior. However, it could be more complete by mentioning authentication needs or potential side effects, though the lack of annotations makes this less critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description provides an example with 'name' and 'region' but doesn't add meaningful semantic context beyond what the schema provides for any parameters, meeting the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Add a new sending domain') and resource ('PostStack'), distinguishing it from sibling tools like 'get_domain', 'update_domain', 'delete_domain', and 'verify_domain'. It explicitly defines the tool's purpose beyond just the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('a customer is onboarding a new sending domain') and mentions the prerequisite DNS configuration needed before 'verify_domain' can succeed, clearly differentiating it from the sibling 'verify_domain' tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_mailboxA
Provision a mailbox (IMAP/SMTP inbox) on a verified domain. When to use: agent is setting up a real human-readable inbox (e.g. support@acme.io). The password is required for IMAP/SMTP login. The domain must already be verified. Returns: shaped mailbox with emailAddress and quotaBytes. Example: { domainId: 42, localPart: "support", password: "", displayName: "Acme Support" }
| Name | Required | Description | Default |
|---|---|---|---|
| domainId | Yes | Domain ID the mailbox belongs to | |
| localPart | Yes | Local part of the email address (before @) | |
| password | Yes | Mailbox password for IMAP/SMTP access | |
| displayName | No | Display name for the mailbox | |
| quotaBytes | No | Storage quota in bytes | |
| webhookEnabled | No | Enable webhook notifications for new mail |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it's a creation/mutation operation (implied by 'provision'), requires domain verification as a prerequisite, and mentions the password is for IMAP/SMTP login. It could improve by mentioning rate limits or error conditions.
Agents need to know what a tool does to the 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 core purpose, followed by usage guidelines, return information, and an example - all in 4 concise sentences. Every sentence adds value with no redundancy or unnecessary 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 creation tool with no annotations and no output schema, the description does well by explaining what it returns ('shaped mailbox with emailAddress and quotaBytes') and providing an example. It could be more complete by mentioning error cases or what happens if the domain isn't verified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal parameter semantics beyond the schema - it mentions password is 'required for IMAP/SMTP login' and provides an example with specific parameter values, but doesn't explain parameter interactions or constraints beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Provision a mailbox'), resource ('IMAP/SMTP inbox on a verified domain'), and distinguishes it from siblings like 'create_domain' or 'update_mailbox' by focusing on initial mailbox creation. It provides concrete examples of use cases like 'support@acme.io'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('agent is setting up a real human-readable inbox') and includes prerequisites ('The domain must already be verified'). It distinguishes from alternatives by specifying this is for provisioning new mailboxes, not updating existing ones (which would use 'update_mailbox').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_segmentA
Create a static contact segment (manually-managed list). When to use: agent needs a named bucket of contacts to send a broadcast to. Add members via add_contacts_to_segment. Returns: shaped segment with id and contactCount=0. Example: { name: "Spring 2026 launch" }
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Segment name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well: it discloses this creates a 'static' segment (behavioral trait), specifies it's 'manually-managed' (management style), and describes the return value ('shaped segment with id and contactCount=0'). It doesn't mention permissions, rate limits, or idempotency, but covers key behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Perfectly structured with four concise sentences: purpose statement, usage guidelines, return value, and example. Each sentence earns its place with zero waste, and key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no annotations and no output schema, the description is quite complete: it explains purpose, usage, behavior, and return format. It could mention error conditions or prerequisites (e.g., authentication), but covers the essentials well given the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single 'name' parameter. The description adds minimal value beyond the schema with the example '{ name: "Spring 2026 launch" }', which illustrates usage but doesn't provide additional semantic context like naming constraints or character 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?
The description clearly states the tool's purpose with specific verb ('Create') and resource ('static contact segment'), and distinguishes it from siblings by specifying it's 'manually-managed' (unlike dynamic segments) and noting that members are added via a different tool ('add_contacts_to_segment').
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides 'When to use' guidance ('agent needs a named bucket of contacts to send a broadcast to') and names an alternative tool for adding members ('Add members via add_contacts_to_segment'), giving clear context for when to use this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_subscription_topicA
Create a subscription topic (named opt-in/opt-out preference like "Product Updates"). When to use: agent is setting up granular preferences so contacts can subscribe per topic instead of all-or-nothing. Returns: shaped topic. Example: { name: "Product Updates", description: "Monthly product news" }
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Topic name (e.g. "Product Updates") | |
| description | No | Topic description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states this is a creation operation and mentions what it returns ('shaped topic'), but doesn't disclose important behavioral aspects like required permissions, whether this is idempotent, error conditions, or rate limits. The example helps but doesn't cover behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Perfectly structured with three distinct, purposeful sentences: purpose statement, usage guidelines, and return example. Every sentence adds value with zero waste. The description is appropriately sized and front-loaded with the most important 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 creation tool with no annotations and no output schema, the description does well by explaining purpose, usage context, and providing a return example. However, it lacks details about error conditions, permissions needed, or what 'shaped topic' means structurally. Given the complexity level, it's mostly complete but has minor 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 100%, so the schema already documents both parameters well. The description adds minimal param semantics beyond the schema - just an example showing typical values. With high schema coverage, baseline is 3, but the example provides some additional context, warranting a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and resource 'subscription topic', with specific clarification that it's a 'named opt-in/opt-out preference like "Product Updates"'. It distinguishes from siblings like 'create_contact', 'create_segment', and 'create_template' by focusing specifically on subscription topics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides 'When to use' guidance: 'agent is setting up granular preferences so contacts can subscribe per topic instead of all-or-nothing'. This gives clear context about when this tool should be selected over other preference-related tools, though it doesn't name specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_templateA
Create a new email template with {{variable}} placeholders. When to use: store a re-usable email body the agent (or app) will send repeatedly. Newly created templates are unpublished — call publish_template before sending. Returns: shaped template with id, version, published=false. Example: { name: "welcome-v3", subject: "Welcome {{first_name}}", html: "Hi {{first_name}}" }
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Template name | |
| subject | Yes | Email subject line (supports {{variables}}) | |
| html | Yes | HTML body content (supports {{variables}}) | |
| text | No | Plain text body content | |
| variables | No | Variable names used in the template |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well: it discloses that templates are created unpublished, mentions the need for a separate publish step, and describes the return shape. It doesn't mention permissions, rate limits, or error conditions, but covers the essential behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Perfectly structured: purpose statement first, usage guidelines second, return information third, and example last. Every sentence earns its place with zero waste. The example is appropriately brief and illustrative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 creation tool with no annotations and no output schema, the description provides excellent context: purpose, usage guidelines, behavioral details (unpublished state), return shape, and an example. It doesn't cover all possible edge cases or error scenarios, but gives the agent enough to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal parameter semantics beyond the schema: it mentions '{{variable}} placeholders' generally and provides an example showing name, subject, and html usage. This adds some context but doesn't significantly enhance the already well-documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create') and resource ('new email template'), specifies it includes variable placeholders, and distinguishes from siblings like 'duplicate_template' and 'update_template' by focusing on initial creation. It's specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'When to use: store a re-usable email body the agent (or app) will send repeatedly' and provides clear prerequisites: 'Newly created templates are unpublished — call publish_template before sending.' This gives perfect guidance on when and how to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhookA
Subscribe a URL to receive event notifications via signed POST requests. When to use: agent is configuring an integration that needs to react to email/contact/domain events in real time. Returns: shaped webhook with id, url, events[], active=true. Example: { url: "https://hooks.acme.io/poststack", events: ["email.bounced", "email.complained"] }
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Webhook endpoint URL | |
| events | Yes | Events to subscribe to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: the webhook receives 'signed POST requests' (security detail), returns a 'shaped webhook with id, url, events[], active=true' (output structure), and implies persistence (since it's a subscription). However, it doesn't mention rate limits, error handling, or authentication requirements beyond signing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Highly efficient and front-loaded: first sentence states core purpose, second provides usage context, third describes returns, and fourth gives an example. Every sentence earns its place with no redundancy or fluff. The structure logically flows from what it does to when to use it to what it returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 creation tool with no annotations and no output schema, the description does well: it explains purpose, usage, behavior, and provides an example. However, it lacks details on error conditions, idempotency, or how the webhook integrates with the system (e.g., confirmation process). Given the complexity, it's mostly complete but has minor 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 100%, with both parameters (url, events) well-documented in the schema. The description adds minimal value beyond the schema: it implies 'url' is an endpoint URL (already in schema) and 'events' are for subscription (already in schema). The example provides concrete values but no additional semantic context. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('Subscribe') and resource ('URL to receive event notifications'), and distinguishes it from siblings like 'delete_webhook' and 'update_webhook' by focusing on creation. It goes beyond the name 'create_webhook' by explaining what the webhook does (receives signed POST requests).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides a 'When to use' section that specifies the context: 'agent is configuring an integration that needs to react to email/contact/domain events in real time.' This gives clear guidance on when this tool is appropriate versus alternatives like polling or other event-handling methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_contactA
Permanently delete a contact (irreversible — use unsubscribe_contact for opt-outs). When to use: GDPR erasure or removing a test contact. For unsubscribes, prefer unsubscribe_contact which preserves history. Returns: { success: boolean }. Example: { id: "con_abc123" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates critical traits: the operation is 'permanent' and 'irreversible,' and it returns a success boolean. However, it doesn't mention potential side effects (e.g., impact on related data), error conditions, or permissions required, leaving some gaps in behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and key warning, followed by usage guidelines, return value, and an example—all in four concise sentences. Each sentence adds essential information without redundancy, making it highly efficient and well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive operation with no annotations and no output schema), the description does a good job covering purpose, usage, and behavioral traits. It includes return value information, which compensates for the lack of output schema. However, it could be more complete by addressing permissions or error handling, slightly reducing the score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'id' parameter fully documented in the schema. The description adds minimal value beyond the schema by providing an example ('{ id: "con_abc123" }'), but doesn't explain parameter semantics further. This meets the baseline of 3 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?
The description clearly states the specific action ('Permanently delete') and resource ('a contact'), distinguishing it from the sibling 'unsubscribe_contact' by emphasizing the irreversible nature. It explicitly contrasts with the alternative tool for opt-outs, making the purpose unambiguous and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('GDPR erasure or removing a test contact') and when not to ('For unsubscribes, prefer unsubscribe_contact which preserves history'). It names the alternative tool and explains the key difference (irreversible deletion vs. preserving history), offering clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_contact_propertyA
Remove a custom contact property definition. Existing contact values for this property are dropped. When to use: a property is unused and being retired. Confirm with the user — values are not recoverable. Returns: { success: boolean }. Example: { id: 5 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Property ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing destructive behavior ('Existing contact values for this property are dropped'), irreversibility ('values are not recoverable'), and return format ('Returns: { success: boolean }'). It doesn't mention permissions or rate limits, but covers key behavioral aspects.
Agents need to know what a tool does to the 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 core purpose, followed by critical warnings, return format, and an example—all in four efficient sentences with zero wasted words. Every sentence adds value to the agent's understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 tool with no annotations and no output schema, the description provides strong context: purpose, usage guidelines, behavioral warnings, and return format. It could mention authentication needs or error cases, but covers the essentials well given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with the parameter 'id' well-documented as 'Property ID to delete'. The description doesn't add additional parameter semantics beyond what the schema provides, but the schema already does the heavy lifting, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Remove a custom contact property definition') and resource ('custom contact property'), distinguishing it from siblings like 'delete_contact' or 'delete_domain'. It precisely defines what the tool does beyond just the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use guidance ('a property is unused and being retired') and includes a critical warning to 'Confirm with the user — values are not recoverable.' This offers clear context for appropriate usage versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_domainA
Permanently delete a sending domain (irreversible — historical email records remain). When to use: a domain is being decommissioned. Confirm with the user first since future sends from any matching from-address will fail. Returns: { success: boolean }. Example: { id: 42 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates critical behavioral traits: the operation is 'permanent' and 'irreversible,' clarifies that 'historical email records remain,' and warns about consequences ('future sends from any matching from-address will fail'). It also specifies the return format. The only minor gap is lack of explicit mention about permissions 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?
The description is efficiently structured with four distinct, purposeful sentences: 1) states the action and its permanence, 2) provides usage context, 3) specifies return format, and 4) gives an example. Every sentence adds value with zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no annotations and no output schema, the description provides excellent context: it clearly explains the irreversible nature, when to use it, consequences, and return format. The only minor gap is that it doesn't explicitly mention authentication requirements or error conditions, but given the comprehensive coverage of the most critical aspects, this is still strong.
Complex tools with many parameters or behaviors need more documentation. 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 description coverage is 100% with the single parameter 'id' well-documented as 'Domain ID to delete.' The description doesn't add any additional parameter semantics beyond what the schema provides, but with complete schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('permanently delete') and resource ('a sending domain'), distinguishing it from sibling tools like 'delete_contact' or 'delete_template'. It also specifies the irreversible nature, which helps differentiate it from other deletion tools that might be reversible.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'When to use: a domain is being decommissioned' and provides important guidance to 'Confirm with the user first since future sends from any matching from-address will fail.' This gives clear context for when to use this tool versus alternatives like 'update_domain' or 'verify_domain'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_mailboxA
Permanently delete a mailbox and all its stored mail. When to use: decommissioning a mailbox. IRREVERSIBLE — confirm with the user, mail is gone. Returns: { success: boolean }. Example: { id: 17 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Mailbox ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and delivers excellent behavioral disclosure. It explicitly states the destructive nature ('IRREVERSIBLE — confirm with the user, mail is gone'), describes the return format ('Returns: { success: boolean }'), and provides an example parameter usage.
Agents need to know what a tool does to the 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 perfectly structured with four concise sentences: purpose statement, usage context, warning, and return format. Each sentence earns its place with zero waste, and critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no annotations and no output schema, the description provides complete context: clear purpose, usage guidelines, explicit behavioral warnings, return format, and parameter example. This fully compensates for the lack of structured metadata.
Complex tools with many parameters or behaviors need more documentation. 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 description coverage is 100% with the single parameter 'id' well-documented. The description adds minimal parameter semantics beyond the schema through the example '{ id: 17 }', but doesn't provide additional context about valid ID ranges or constraints. Baseline 3 is appropriate given the comprehensive schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('permanently delete') and resource ('a mailbox and all its stored mail'), making the purpose specific and clear. It distinguishes from siblings like 'delete_contact' or 'delete_domain' by specifying the mailbox resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use ('decommissioning a mailbox') and includes a strong warning about irreversibility with a directive to 'confirm with the user'. This clearly establishes usage context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_segmentA
Delete a segment definition. Contacts in it are NOT deleted. When to use: remove an obsolete segment. Confirm with the user. Returns: { success: boolean }. Example: { id: "seg_abc" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Segment ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key traits: it's a destructive operation ('Delete'), clarifies side effects ('Contacts in it are NOT deleted'), specifies the return format ('Returns: { success: boolean }'), and includes an example. However, it doesn't mention potential errors, permissions required, or irreversible consequences beyond the basic scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured: four short sentences that each serve a distinct purpose (action definition, side effect clarification, usage guidance, return format, and example). There is no wasted text, and critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description does well by covering purpose, usage, side effects, and return format. However, it lacks details on error conditions, authentication requirements, or rate limits, which would be helpful given the tool's complexity and risk profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage (the 'id' parameter is fully documented in the schema). The description adds minimal parameter semantics beyond the schema—it only provides an example ('Example: { id: "seg_abc" }') which reinforces but doesn't significantly expand on the schema's documentation. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Delete a segment definition') and resource ('segment'), distinguishing it from siblings like 'delete_contact' or 'delete_template'. It explicitly clarifies what is not affected ('Contacts in it are NOT deleted'), which helps differentiate its scope from other deletion tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'When to use: remove an obsolete segment. Confirm with the user.' This directly states the intended context (removing obsolete segments) and includes a critical behavioral instruction (user confirmation), which is essential 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_subscription_topicA
Permanently delete a subscription topic. Subscriptions are removed. When to use: a topic is being retired. Confirm with the user. Returns: { success: boolean }. Example: { id: 3 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Topic ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses key behavioral traits: the operation is permanent ('Permanently delete'), has side effects ('Subscriptions are removed'), and returns a simple success indicator. However, it doesn't mention error conditions, permissions needed, 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?
Extremely efficient and well-structured: purpose statement first, followed by usage guidance, return value, and example. Every sentence earns its place with zero wasted words. The information is front-loaded appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 mutation tool with no annotations and no output schema, the description does well by covering purpose, usage context, side effects, and return format. It could be more complete by mentioning error cases or authentication requirements, but it provides sufficient context for safe agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the 'id' parameter is fully documented in the schema). The description doesn't add any parameter-specific information beyond what the schema provides, so it meets the baseline of 3 when 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 clearly states the specific action ('Permanently delete') and resource ('a subscription topic'), and distinguishes it from siblings like 'create_subscription_topic' and 'list_subscription_topics'. The verb 'delete' is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use guidance ('a topic is being retired') and a critical prerequisite ('Confirm with the user'). This directly addresses agent decision-making for a destructive operation, distinguishing it from alternatives like 'unsubscribe_contact_from_topic'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_templateA
Permanently delete a template (irreversible). When to use: an unused template should be removed. Confirm with the user — emails referencing this template_id will fail. Returns: { success: boolean }. Example: { id: "tpl_abc" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key traits: the operation is 'permanent' and 'irreversible,' and it warns that emails referencing the template will fail. However, it doesn't mention potential side effects like audit logs, permissions required, or error handling, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded, starting with the core action and critical warning. Each sentence adds value: the first states the irreversible nature, the second provides usage guidelines, the third specifies the return value, and the fourth gives an example. There is no wasted text, making it highly 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?
Given the tool's complexity (destructive operation with no annotations and no output schema), the description is complete. It covers the purpose, usage guidelines, behavioral traits (irreversibility and impact on emails), and includes an example. While an output schema is absent, the description specifies the return format, ensuring adequate context for 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?
The input schema has 100% description coverage, with the 'id' parameter clearly documented as 'Template ID to delete.' The description adds minimal value beyond this, only implying the parameter in the example. Since schema coverage is high, the baseline score of 3 is appropriate, as the description doesn't significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('permanently delete') and resource ('a template'), making the purpose clear. It distinguishes from siblings like 'delete_template' vs 'unpublish_template' or 'duplicate_template' by emphasizing irreversible deletion, which is specific and helpful for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'When to use: an unused template should be removed. Confirm with the user — emails referencing this template_id will fail.' This clearly states the appropriate context (unused templates), a prerequisite (user confirmation), and a consequence (email failures), offering comprehensive usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_webhookA
Permanently delete a webhook endpoint. When to use: the integration is being removed. Confirm with the user — events will no longer be delivered. Returns: { success: boolean }. Example: { id: 17 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It effectively discloses key behavioral traits: the action is permanent ('Permanently delete'), has significant side effects ('events will no longer be delivered'), and requires user confirmation. However, it doesn't mention authentication needs, rate limits, or error conditions, leaving some gaps.
Agents need to know what a tool does to the 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 core purpose, followed by usage guidance, return value, and an example—all in four concise sentences with zero waste. Each sentence earns its place by adding distinct value (action, context, output, illustration).
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 tool with no annotations and no output schema, the description does well by explaining the permanent nature, when to use, and return format. It covers critical aspects like side effects and confirmation needs. However, it lacks details on authentication, error handling, or system constraints, which could be important for full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'id' fully documented in the schema as 'Webhook ID to delete'. The description adds minimal value beyond this, only providing an example '{ id: 17 }' which reinforces but doesn't significantly expand on schema information. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Permanently delete') and resource ('a webhook endpoint'), distinguishing it from sibling tools like 'delete_webhook' vs 'create_webhook', 'update_webhook', 'get_webhook', and 'list_webhooks'. The verb 'delete' is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use ('the integration is being removed') and includes a critical caution ('Confirm with the user — events will no longer be delivered'). This gives clear context for application and highlights irreversible consequences, guiding proper tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_from_threadA
Build a reply-draft skeleton for an inbound email — proper threading, quoted original, salutation/sign-off, suggested from + subject. Heuristic only; the agent fills in the body text. When to use: agent received an inbound email and wants to reply. Call this to get the draft scaffold, fill in body_placeholder with the actual reply, then call reply_to_inbound_email. Returns: { inbound, suggested_from, suggested_subject, salutation, body_placeholder, quoted_html, quoted_text, threading: { in_reply_to, references }, suggested_html, suggested_text }. Example: { inbound_id: 7, tone: "friendly" }
| Name | Required | Description | Default |
|---|---|---|---|
| inbound_id | Yes | Inbound email ID to reply to | |
| tone | No | Tone for salutation + sign-off (default: friendly) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it's a heuristic that builds a skeleton with proper threading, quoted original, salutation/sign-off, and suggested fields, and returns a structured object. However, it doesn't mention potential limitations like error conditions or performance aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by usage guidelines, return details, and an example. Every sentence earns its place with no wasted words, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is mostly complete. It explains purpose, usage, returns, and provides an example. However, without an output schema, it could benefit from more detail on the return object structure, though the listed fields are helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by providing an example parameter object '{ inbound_id: 7, tone: "friendly" }' that clarifies usage, and it mentions the tool's heuristic nature which contextualizes the parameters. This goes beyond the schema's technical descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Build a reply-draft skeleton') and resources ('for an inbound email'), distinguishing it from sibling tools like 'reply_to_inbound_email' by focusing on scaffolding rather than sending. It explicitly notes the heuristic nature and that the agent fills in body 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?
The description provides explicit usage guidance: 'When to use: agent received an inbound email and wants to reply' and specifies the workflow: 'Call this to get the draft scaffold, fill in body_placeholder with the actual reply, then call reply_to_inbound_email.' This clearly distinguishes when to use this tool versus its sibling 'reply_to_inbound_email'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_templateA
Create a copy of an existing template (new id, same body, name suffixed " (copy)"). When to use: agent wants to fork a template before editing so the original remains intact. Returns: shaped new template (unpublished draft). Example: { id: 17 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID to duplicate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the mutation behavior (creates a copy with new ID), the naming convention (suffix ' (copy)'), and the output state (unpublished draft). However, it doesn't mention potential constraints like permissions needed 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?
The description is efficiently structured with three distinct sentences: the core functionality, usage guidance, and return value example. Each sentence adds essential information with zero wasted words, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description provides good coverage of purpose, usage, and behavioral details. It explains what gets created and its state (unpublished draft). The main gap is lack of explicit error conditions or permission requirements, but overall it's quite complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with the single parameter 'id' well-documented. The description doesn't add additional parameter semantics beyond what the schema provides, but the schema already fully describes the parameter. This meets the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Create a copy'), the resource ('existing template'), and key behavioral details (new ID, same body, name suffix). It explicitly distinguishes from sibling tools like 'create_template' by focusing on duplication rather than creation from scratch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('agent wants to fork a template before editing so the original remains intact'), which clearly differentiates it from alternatives like 'update_template' or 'create_template'. This gives the agent clear context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_non_clickersA
List contacts who received a broadcast but did NOT click any tracked link in it. When to use: build a follow-up campaign to "people who saw it but didn't act". Pair with create_segment + send_broadcast (or send_email) to re-engage them. Returns: { broadcast: { id, subject }, count, contacts: [{ id, email, first_name, last_name }] }. Example: { broadcast_id: "br_abc", limit: 500 }
| Name | Required | Description | Default |
|---|---|---|---|
| broadcast_id | Yes | Broadcast publicId | |
| limit | No | Max contacts to return (default 500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by describing the return format and providing an example. It clearly indicates this is a read operation (listing contacts) and specifies the data structure returned. However, it doesn't mention potential limitations like pagination, rate limits, or authentication requirements, which would be helpful for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with purpose first, usage guidelines second, return format third, and an example last. Each sentence adds clear value without redundancy. The entire description is front-loaded with the most important information (what the tool does and when to use it).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description does an excellent job covering purpose, usage, and return format. The example provides concrete usage context. The main gap is lack of information about behavioral constraints (rate limits, permissions needed, etc.) that would be important for a production tool, but given the rich description of what it returns and how to use it, this is quite 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 already fully documents both parameters. The description doesn't add any additional parameter information beyond what's in the schema. The example shows parameter usage but doesn't provide semantic context beyond the schema descriptions. This meets the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List contacts who received a broadcast but did NOT click any tracked link in it') with precise resource targeting. It distinguishes itself from sibling tools like 'list_contacts' or 'get_contact_activity' by focusing specifically on non-clickers from broadcasts, making its purpose unambiguous and 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?
The description explicitly states 'When to use: build a follow-up campaign to "people who saw it but didn't act"' and provides specific pairing recommendations with 'create_segment + send_broadcast (or send_email) to re-engage them.' This gives clear context for when to use this tool versus alternatives and suggests practical workflow integration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forward_inbound_emailA
Forward an inbound email to other recipients with an optional cover note. When to use: route a message to a teammate or another address. Returns: { id } of the forwarded outbound email. Example: { id: 7, from: "support@acme.io", to: ["dev@acme.io"], message: "FYI" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Inbound email ID to forward | |
| from | Yes | Sender email address | |
| to | Yes | Recipient email addresses | |
| message | No | Additional message to include |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the core behavior (forwarding with cover note) and mentions the return value, but doesn't disclose important behavioral traits like whether this requires specific permissions, if it's idempotent, rate limits, or error conditions. The description adds some value but leaves gaps in behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with three sentences that each serve distinct purposes: stating the action, providing usage guidance, and showing return format. It's front-loaded with the core functionality. The example could be slightly more concise, but overall there's minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 no annotations and no output schema, the description provides good purpose and usage context but lacks complete behavioral transparency. It shows the return format through an example, which partially compensates for the missing output schema, but doesn't fully address all aspects a mutation tool should disclose (permissions, side effects, error handling).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description doesn't add any additional parameter semantics beyond what's in the schema - it mentions 'optional cover note' which corresponds to the 'message' parameter, but this is already covered in the schema. Baseline 3 is appropriate 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?
The description clearly states the specific action ('forward an inbound email') and resource ('inbound email'), distinguishing it from sibling tools like 'reply_to_inbound_email' or 'send_email'. It specifies the purpose is to forward with an optional cover note, making the verb+resource combination precise and 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?
The description explicitly provides usage guidance with 'When to use: route a message to a teammate or another address.' This gives clear context for when to select this tool over alternatives like 'reply_to_inbound_email' or general email sending tools, making it easy for an agent to decide when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_api_keyA
Get an API key's metadata (the secret is never returned after creation). When to use: confirm a key's permission, mode or last-used timestamp before revoking. Returns: shaped key without secret. Example: { id: 17 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | API key ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that the tool returns metadata without the secret, which is crucial behavioral information. It also implies this is a read-only operation (getting metadata) and provides context about what gets returned. However, it doesn't mention potential errors, rate limits, or authentication 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 extremely well-structured and concise. It uses three distinct sections: purpose statement, usage guidelines, and return format example. Each sentence earns its place by providing essential information without redundancy. The information is front-loaded with the core purpose stated first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read operation with no output schema, the description provides excellent context. It explains what the tool does, when to use it, and what it returns. The example helps clarify the return format. However, without annotations or output schema, it could benefit from more detail about error conditions or response structure beyond the brief example.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single 'id' parameter as 'API key ID'. The description doesn't add any additional parameter semantics beyond what's in the schema. The example '{ id: 17 }' illustrates usage but doesn't provide new semantic information about the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get an API key's metadata' with the specific verb 'Get' and resource 'API key's metadata'. It distinguishes from sibling tools like 'create_api_key' and 'revoke_api_key' by focusing on retrieval rather than creation or deletion. The mention that 'the secret is never returned after creation' further clarifies its read-only nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance: 'When to use: confirm a key's permission, mode or last-used timestamp before revoking.' This gives a clear scenario for when to use this tool (before revoking) and implies an alternative action (revoking via 'revoke_api_key'). It effectively distinguishes this tool from other API key-related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_broadcastA
Get a broadcast's details and aggregate delivery stats. When to use: report on send results (delivered/opened/clicked/bounced) for a specific broadcast. Returns: shaped broadcast (subject, status, recipient counts). Example: { id: "br_abc" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Broadcast ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool retrieves details and stats (implying read-only behavior) and describes the return format ('shaped broadcast'), but lacks information on permissions, rate limits, error handling, or whether it's idempotent. It adds some behavioral context but not comprehensively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose, followed by usage guidelines, return details, and an example—all in four concise sentences with no wasted words. Each sentence adds specific value, making it highly 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?
Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is mostly complete: it covers purpose, usage, returns, and includes an example. However, it could be more thorough by mentioning potential errors or linking to sibling tools for broader context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the baseline is 3. The description adds value by providing an example ('Example: { id: "br_abc" }'), which clarifies the parameter's usage and format beyond the schema's basic description ('Broadcast ID'), elevating the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Get', 'report on') and resources ('broadcast's details and aggregate delivery stats', 'send results'), distinguishing it from siblings like 'list_broadcasts' (which lists multiple broadcasts) and 'broadcast_performance' (which might focus on analytics rather than details).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'When to use: report on send results... for a specific broadcast', providing clear context for usage. However, it does not specify when not to use it or name alternatives (e.g., 'list_broadcasts' for multiple broadcasts), missing full sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactA
Get full details of a contact by id. When to use: inspect a specific contact's properties, subscription state, or last activity. Returns: shaped contact with email, names, properties, unsubscribed flag, createdAt. Example: { id: "con_abc123" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns 'full details' and specifies the return shape ('email, names, properties, unsubscribed flag, createdAt'), which adds useful behavioral context. However, it lacks information about error conditions, permissions required, or rate limits, leaving some behavioral aspects unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four concise sentences that each serve a distinct purpose: stating the action, providing usage guidelines, detailing returns, and giving an example. There is no wasted language, and key information is front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is largely complete. It covers purpose, usage, and return values adequately. However, without annotations or an output schema, it could benefit from more detail on error handling or permissions, slightly reducing completeness for a read 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?
The input schema has 100% description coverage, with the single parameter 'id' documented as 'Contact ID'. The description adds minimal value beyond this by mentioning 'by id' in the first sentence and providing an example. Since schema coverage is high, the baseline score of 3 is appropriate, as the description does not significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get full details') and resource ('a contact by id'), distinguishing it from sibling tools like 'get_contact_by_email' or 'list_contacts'. It uses precise language that directly communicates the tool's function without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit 'When to use' guidance ('inspect a specific contact's properties, subscription state, or last activity'), providing clear context for application. However, it does not mention when NOT to use this tool or explicitly name alternatives like 'get_contact_by_email' or 'list_contacts', which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contact_activityA
Get a contact's recent email-event timeline grouped by event type (sent / delivered / opened / clicked / bounced / complained / failed). When to use: investigate a specific contact's engagement history before sending — e.g. did they bounce on the last campaign, are they frequently opening, when did they last click. Pass email OR id; email triggers a lookup, id is direct. Returns: { contact_id, email, total, events: { sent, delivered, opened, clicked, bounced, complained, failed, other } } where each is an array of { event_id, event_type, created_at, email_id, subject, from, geo_country, ua_client, is_prefetch, metadata }. Example: { email: "ada@lovelace.io", limit: 20 }
| Name | Required | Description | Default |
|---|---|---|---|
| No | Contact email (alternative to id) | ||
| id | No | Numeric contact id (alternative to email) | |
| limit | No | Max events to return (default 50) | |
| since | No | ISO 8601 cutoff — only events after this timestamp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behaviors: it describes the return structure in detail, explains the email vs. id lookup mechanism, and implies read-only operation through 'Get' and investigation context. However, it doesn't mention rate limits, authentication needs, or error handling, leaving some gaps for a tool with no 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?
The description is efficiently structured: first sentence states purpose, second provides usage guidelines, third explains parameter semantics, fourth details return values, and fifth gives an example. Each sentence earns its place with no redundant information, making it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description compensates well by fully explaining the tool's behavior, usage, parameters, and return structure. It covers the complexity of a 4-parameter tool with event grouping and lookup mechanisms, making it complete enough for an agent to use effectively without relying on external documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the semantic difference between 'email' and 'id' parameters ('email triggers a lookup, id is direct'), which isn't in the schema. It also provides an example with 'limit: 20' to illustrate usage, though it doesn't detail 'since' or default behaviors beyond what the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a contact's recent email-event timeline grouped by event type' with specific event types listed (sent, delivered, opened, etc.). It distinguishes itself from siblings like 'get_contact' or 'get_engagement_summary' by focusing on detailed event-level activity rather than basic contact info or aggregated summaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance: 'When to use: investigate a specific contact's engagement history before sending — e.g. did they bounce on the last campaign, are they frequently opening, when did they last click.' It also clarifies parameter usage: 'Pass email OR id; email triggers a lookup, id is direct,' which helps differentiate from tools requiring both or other identifiers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contact_by_emailA
Look up a contact by their email address. When to use: agent has an email address (e.g. from a webhook, signup, or user message) and wants the full contact record without paginating list_contacts. Returns 404 if no contact exists with that email — use create_contact to add one. Returns: shaped contact (id, email, names, properties, unsubscribed, createdAt). Example: { email: "ada@lovelace.io" }
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address to look up (case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: the tool returns a 404 error if no contact exists (error handling), specifies the return data shape (id, email, names, etc.), and mentions case-insensitive email matching (implied from schema but reinforced). It doesn't cover rate limits or authentication needs, but provides substantial operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with three focused sentences and an example. The first sentence states the purpose, the second provides usage guidelines and error handling, and the third specifies the return shape. Every sentence adds essential information with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read operation with no output schema, the description provides complete context: purpose, usage guidelines, error behavior (404), return data structure, and an example. It compensates well for the lack of annotations and output schema, making the tool's operation fully understandable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents the single 'email' parameter with its type, format, and case-insensitivity. The description adds minimal value beyond the schema (just restating 'email address to look up'), meeting the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Look up a contact by their email address') and resource ('contact'), distinguishing it from siblings like 'get_contact' (likely by ID) and 'list_contacts' (pagination-based). It explicitly names the key differentiator: email-based lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('agent has an email address... and wants the full contact record without paginating list_contacts'), when not to use it (returns 404 if no contact exists), and alternatives ('use create_contact to add one'). It also contrasts with 'list_contacts' for pagination scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contact_subscriptionsA
List the subscription topics a contact is currently opted in to. When to use: check whether a contact is subscribed to a specific topic before sending. Returns: { items: [{ topicId, subscribedAt }] }. Example: { contact_id: "con_abc" }
| Name | Required | Description | Default |
|---|---|---|---|
| contact_id | Yes | Contact ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior by specifying the return format ('Returns: { items: [{ topicId, subscribedAt }] }') and providing an example, which clarifies output structure. However, it doesn't mention potential errors, rate limits, or authentication requirements, leaving some behavioral aspects uncovered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by usage guidelines, return format, and an example—all in four concise sentences. Each sentence adds distinct value without redundancy, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one parameter, no output schema, no annotations), the description is largely complete. It covers purpose, usage, return values, and an example. However, it lacks details on error handling or edge cases (e.g., invalid contact IDs), which could enhance completeness for a read 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?
The input schema has 100% description coverage (the 'contact_id' parameter is documented as 'Contact ID'), so the baseline score is 3. The description adds minimal value beyond the schema by including an example ('Example: { contact_id: "con_abc" }'), which provides a usage pattern but doesn't significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List the subscription topics') and resource ('a contact is currently opted in to'), making the purpose immediately understandable. It distinguishes itself from sibling tools like 'subscribe_contact_to_topic' or 'unsubscribe_contact_from_topic' by focusing on retrieval rather than modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance with 'When to use: check whether a contact is subscribed to a specific topic before sending.' This gives a concrete scenario for application and implicitly distinguishes it from tools that modify subscriptions, offering clear context for when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_domainA
Get domain details including DNS records and verification status. When to use: read DNS records to display, or check whether the domain is verified before sending. Returns: shaped domain (status, dnsRecords[], tracking flags, verifiedAt). Example: { id: 42 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool as a read operation ('Get'), specifies the return structure ('shaped domain'), and includes an example. However, it lacks details on error handling, permissions, or rate limits, which would be valuable for a complete behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four concise sentences: purpose, usage guidelines, return details, and an example. Each sentence adds clear value without redundancy, and the information is front-loaded with the core purpose, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (single parameter, read operation) and lack of output schema, the description provides good context: it explains what the tool does, when to use it, and the return structure. However, it could be more complete by addressing potential errors or edge cases, slightly reducing the score from a perfect 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'id' parameter fully documented. The description does not add any additional parameter semantics beyond what the schema provides (e.g., it doesn't explain format constraints or provide examples beyond the basic example). This meets the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get domain details') and resource ('domain'), listing key components like DNS records and verification status. It distinguishes from siblings like 'list_domains' (which lists multiple) and 'verify_domain' (which performs verification), making the purpose explicit and 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?
The description explicitly provides usage guidance with 'When to use:' clauses, specifying two concrete scenarios: reading DNS records for display and checking verification before sending. This gives clear context for when to invoke this tool versus alternatives like 'list_domains' for listing or 'verify_domain' for verification actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emailA
Get full details and event timeline for a specific email by id. When to use: investigate why one email failed/bounced, or confirm delivery for a single send. Returns: shaped email record + events (queued, sent, delivered, opened, clicked, bounced). Example: { id: "em_7kf2x9" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It effectively describes the return format ('shaped email record + events') and lists specific event types (queued, sent, delivered, opened, clicked, bounced), which helps the agent understand what to expect. However, it doesn't mention potential errors (e.g., invalid ID handling) or performance aspects like rate limits, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by usage guidelines, return details, and an example—all in four concise sentences with zero wasted words. Each sentence adds clear value, making it efficient and well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is largely complete: it covers purpose, usage, returns, and provides an example. However, without an output schema, it could benefit from more detail on the return structure (e.g., field descriptions), though the listed event types partially compensate. For a simple read operation, this is strong but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage (the 'id' parameter is documented as 'Email ID'), so the baseline is 3. The description adds minimal value beyond the schema by reinforcing the parameter's purpose ('for a specific email by id') and providing an example ('{ id: "em_7kf2x9" }'), but it doesn't explain format constraints or semantics not covered in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get full details and event timeline') and resource ('for a specific email by id'), distinguishing it from siblings like 'list_emails' (which lists multiple emails) or 'get_engagement_summary' (which provides aggregated metrics). It precisely defines what the tool does without being vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'investigate why one email failed/bounced, or confirm delivery for a single send.' This provides clear context for usage and implicitly distinguishes it from tools like 'list_emails' (for bulk overview) or 'get_engagement_summary' (for aggregated analytics).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_engagement_summaryA
Get a single contact's engagement summary: segment + lifetime counts + open / click rates + last open / click + top tags. When to use: agent wants to qualify a contact before sending — e.g. "is Ada a frequent opener?", "should we exclude her from a re-engagement push?". Distinct from get_contact_activity which returns the raw timeline. Returns: { segment, last_engaged_at, engagement_calculated_at, lifetime_sent, lifetime_delivered, lifetime_opened, lifetime_clicked, open_rate, click_rate, last_open, last_click, top_tags: [{ tag, count }] }. Example: { email: "ada@lovelace.io" }
| Name | Required | Description | Default |
|---|---|---|---|
| No | Contact email (alternative to id) | ||
| id | No | Numeric contact id (alternative to email) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It effectively describes the tool's behavior by specifying what data is returned (e.g., segment, lifetime metrics, rates, timestamps, tags) and implies it's a read-only operation through context. However, it doesn't mention potential limitations like rate limits, authentication needs, or error conditions, leaving some behavioral aspects uncovered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by usage guidelines, return format, and an example. Each sentence serves a distinct purpose without redundancy, making it efficient and easy to parse for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description compensates well by detailing the return structure and providing usage context. It covers the tool's purpose, when to use it, and what to expect, making it largely complete for a read-only tool. A slight deduction as it doesn't address potential edge cases or system behaviors like error responses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (email and id as alternatives). The description adds minimal value beyond the schema by providing an example with email usage, but doesn't explain parameter semantics like format requirements or mutual exclusivity beyond what's in the schema. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'a single contact's engagement summary', with specific components listed (segment, lifetime counts, open/click rates, etc.). It explicitly distinguishes from sibling 'get_contact_activity' by noting this returns a summary versus raw timeline, providing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a dedicated 'When to use' section with explicit scenarios (e.g., qualifying a contact before sending, checking if someone is a frequent opener, excluding from re-engagement). It names the alternative tool 'get_contact_activity' and explains when to choose this summary tool over that one, offering clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inbound_emailA
Get a received inbound email's full headers and body. When to use: read a specific message before drafting a reply (use draft_from_thread or reply_to_inbound_email next). Returns: shaped inbound email with html/text body and headers. Example: { id: 7 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Inbound email ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it's a read operation (implied by 'Get'), returns specific data ('shaped inbound email with html/text body and headers'), and provides an example. However, it doesn't mention potential limitations like authentication requirements, rate limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four sentences that each serve a distinct purpose: stating the tool's function, providing usage context, describing returns, and giving an example. There's no wasted text, and the most critical information (what the tool does) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (single parameter read operation), no annotations, and no output schema, the description does well by explaining purpose, usage, returns, and providing an example. However, it could be more complete by mentioning where to get the email ID from (e.g., from list_inbound_emails) or clarifying the return structure further.
Complex tools with many parameters or behaviors need more documentation. 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 description coverage is 100% (the 'id' parameter is fully described in the schema as 'Inbound email ID'), so the baseline is 3. The description adds minimal value beyond the schema by providing an example ('Example: { id: 7 }'), but doesn't explain parameter semantics like format constraints or where to obtain the ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Get a received inbound email's full headers and body') and distinguishes it from siblings like 'list_inbound_emails' (which lists emails) and 'get_email' (which might retrieve sent emails). It precisely identifies the resource (inbound email) and scope (full headers and body).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('read a specific message before drafting a reply') and names specific alternatives for follow-up actions ('use draft_from_thread or reply_to_inbound_email next'). This provides clear guidance on the tool's role in a workflow context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mailboxA
Get a mailbox's metadata (status, quota, last login). When to use: inspect a specific mailbox before updating or deleting. Returns: shaped mailbox. Example: { id: 17 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Mailbox ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates this is a read operation ('Get') that returns data, which is adequate for basic transparency. However, it doesn't mention potential authentication requirements, rate limits, error conditions, or whether the operation has side effects, leaving some behavioral aspects unspecified.
Agents need to know what a tool does to the 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 perfectly structured and economical: first sentence states purpose, second provides usage guidelines, third describes return value, fourth gives a concrete example. Every sentence earns its place with zero wasted words, and the most critical information (what the tool does) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with one parameter and no output schema, the description provides good contextual coverage: purpose, usage guidelines, return value description, and an example. The main gap is the lack of output format details (what 'shaped mailbox' means structurally), but given the tool's simplicity and clear sibling differentiation, this is a minor omission.
Complex tools with many parameters or behaviors need more documentation. 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 description coverage is 100% (the single 'id' parameter is fully documented in the schema), so the baseline score is 3. The description adds minimal value beyond the schema by providing an example format '{ id: 17 }', which reinforces the parameter usage but doesn't provide additional semantic context about valid ID ranges or sources.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb ('Get') and resource ('mailbox's metadata'), explicitly listing the metadata fields returned (status, quota, last login). It distinguishes this read operation from sibling tools like 'update_mailbox' and 'delete_mailbox' by focusing on inspection rather than modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('inspect a specific mailbox before updating or deleting'), directly naming the alternative actions (updating/deleting) and establishing a clear prerequisite relationship. This helps the agent understand the tool's role in a workflow context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_segmentA
Get a segment's details and member count. When to use: confirm a segment's contactCount before broadcasting (to estimate volume). Returns: shaped segment (name, contactCount, createdAt). Example: { id: "seg_abc" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Segment ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return format ('shaped segment (name, contactCount, createdAt)') and includes an example, which adds useful context. However, it doesn't mention potential errors (e.g., invalid segment ID), rate limits, or authentication requirements, leaving some behavioral aspects unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by usage guidelines, return values, and an example—all in four concise sentences. Each sentence adds value without redundancy, making it efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (single parameter, no output schema, no annotations), the description is mostly complete: it covers purpose, usage, returns, and an example. However, it lacks details on error handling or system constraints, which would be beneficial for full transparency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'id' parameter clearly documented as 'Segment ID.' The description doesn't add parameter details beyond the schema, but it provides an example ('{ id: "seg_abc" }') that reinforces usage. With high schema coverage, the baseline is 3, and the example justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Get a segment's details and member count') and distinguishes it from siblings like 'list_segments' (which lists segments) and 'create_segment' (which creates segments). It specifies the exact resource being retrieved (segment details and contactCount).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'confirm a segment's contactCount before broadcasting (to estimate volume).' This provides clear context for usage and distinguishes it from alternatives like 'list_segments' for browsing or 'get_contact' for individual contact details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_templateA
Get a template's full body, subject and variables. When to use: read the source HTML/text before editing, or extract the variable list to know what to pass in. Returns: shaped template with htmlBody, textBody, variables[], version. Example: { id: "tpl_abc" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes what the tool returns ('shaped template with htmlBody, textBody, variables[], version') and provides an example, which adds useful context. However, it doesn't mention potential errors (e.g., if template doesn't exist), permissions needed, or rate limits, leaving some behavioral aspects unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with three sentences: purpose, usage guidelines, and return format with example. Each sentence adds distinct value without redundancy, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is quite complete. It covers purpose, usage, and return format with an example. However, without annotations or output schema, it could benefit from more detail on error conditions or behavioral constraints to be fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple 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' parameter is fully described in the schema as 'Template ID'), so the baseline is 3. The description doesn't add any additional parameter information beyond what's in the schema, but it does provide an example usage with the parameter, which offers minimal extra context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get a template's full body, subject and variables') and resource ('template'), distinguishing it from siblings like 'list_templates' (which lists templates) and 'create_template' (which creates templates). It provides precise information about what data is retrieved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'read the source HTML/text before editing, or extract the variable list to know what to pass in.' This provides clear guidance on appropriate contexts for use, though it doesn't explicitly mention when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_webhookA
Get a webhook's details. When to use: inspect the URL, event list, or active state for a specific webhook. Returns: shaped webhook. Example: { id: 17 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool retrieves details (implying read-only) and mentions the return shape ('shaped webhook'), but lacks details on error conditions, authentication needs, or rate limits. The example clarifies the parameter format, adding some value beyond the basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four concise sentences: purpose statement, usage guidelines, return information, and an example. Each sentence adds distinct value without redundancy, and the information is front-loaded with 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 operation with one parameter and no output schema, the description is reasonably complete. It covers purpose, usage, return shape, and provides an example. However, it lacks details on the 'shaped webhook' output structure, which could be helpful given no output schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage (the 'id' parameter is documented as 'Webhook ID'), so the baseline is 3. The description adds value by providing an example ('{ id: 17 }') that illustrates the parameter format and expected input structure, enhancing understanding beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb ('Get') and resource ('a webhook's details'), making the purpose specific and clear. It distinguishes from sibling tools like 'list_webhooks' (which lists multiple) and 'create_webhook'/'update_webhook'/'delete_webhook' (which modify rather than retrieve).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 includes an explicit 'When to use' section that specifies the context ('inspect the URL, event list, or active state for a specific webhook'), clearly indicating this is for detailed inspection of a single webhook rather than listing all webhooks or performing other operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lint_emailA
Run a Rspamd-backed spam pre-flight on a draft email and return the score, action, and per-rule symbols. When to use: BEFORE sending agent-generated content. The score (0–15+) and action (no_action / greylist / add_header / soft_reject / reject) tell you whether the message is likely to be filtered. Symbols list the specific rules that fired. Returns: { score, action, symbols[], skipped, suggestions[] } — suggestions[] is derived from symbols whose score > 1. Example: { from: "Acme hi@acme.io", to: ["a@b.io"], subject: "Welcome", html: "hi" }
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | Sender email address | |
| to | Yes | Recipient email address(es) — capped at 5 for preview | |
| subject | Yes | Subject line | |
| html | No | HTML body | |
| text | No | Plain text body |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior by explaining what it does (spam pre-flight), what it returns (score, action, symbols, suggestions), and the meaning of outputs (e.g., score range 0–15+, action types). However, it lacks details on potential side effects, rate limits, or authentication needs, which would be beneficial for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise, with every sentence adding value. It starts with the core purpose, follows with usage guidelines, explains the return structure, and ends with a practical example. There is no redundant or unnecessary information, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no output schema, no annotations), the description is mostly complete. It covers purpose, usage, and output details effectively. However, it could improve by mentioning any limitations (e.g., rate limits, error handling) or dependencies, which would enhance completeness for a tool with no structured behavioral 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?
The input schema has 100% description coverage, providing clear documentation for all 5 parameters (from, to, subject, html, text). The description does not add any parameter-specific semantics beyond what the schema already states, such as explaining format requirements or constraints. This meets the baseline score of 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Run a Rspamd-backed spam pre-flight') and resources ('on a draft email'), distinguishing it from all sibling tools which focus on contact management, broadcasting, templates, and other email-related operations rather than spam analysis. It explicitly mentions what it returns (score, action, symbols), making its function 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 provides explicit guidance on when to use this tool ('BEFORE sending agent-generated content') and includes an example that illustrates its application. It distinguishes itself from siblings like 'send_email' or 'preview_email' by focusing on spam detection rather than delivery or rendering, offering clear context for its use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_api_keysA
List API keys (only the prefix is returned, never the full secret). When to use: audit which keys exist, find a key id to revoke. Returns: { keys: [{ id, name, keyPrefix, permission, mode, ... }] }. Example: { per_page: 50 }
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and adds valuable behavioral context: it discloses that 'only the prefix is returned, never the full secret' (security constraint) and describes the return format. However, it doesn't mention pagination behavior 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?
The description is efficiently structured with four concise sentences: purpose statement, security disclosure, usage guidelines, return format, and example. Each sentence adds value without redundancy, and key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no annotations and no output schema, the description provides good coverage: purpose, security constraint, usage context, return format, and parameter example. It could be more complete by explicitly mentioning pagination behavior or linking to sibling tools like 'revoke_api_key'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('page' and 'per_page'). The description adds minimal value with 'Example: { per_page: 50 }' which provides a usage hint but no additional semantic meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List API keys' with the specific verb 'List' and resource 'API keys', clearly indicating a read operation. It distinguishes from sibling tools like 'create_api_key' and 'revoke_api_key' by focusing on listing rather than creation or deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance with 'When to use: audit which keys exist, find a key id to revoke.' This clearly states the intended contexts and distinguishes it from alternatives like 'get_api_key' for retrieving specific key details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_broadcastsA
List broadcasts. When to use: find recent campaigns, audit which broadcasts were sent, or pick one to inspect with get_broadcast. Returns: { items[], meta } — paginated shaped broadcasts with status and counts. Example: { per_page: 20 }
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully describes key behavioral traits: it reveals the return format ('{ items[], meta } — paginated shaped broadcasts with status and counts'), indicates pagination behavior, and provides an example parameter usage. However, it doesn't mention potential rate limits, authentication requirements, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four sentences that each serve distinct purposes: stating the core function, providing usage guidelines, describing returns, and giving an example. There's no wasted text, and the most critical information (what the tool does) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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/read tool with no annotations and no output schema, the description provides substantial context: purpose, usage scenarios, return format with pagination details, and an example. It covers the essential information an agent would need to use this tool effectively. The main gap is the lack of output schema, but the description compensates well by describing the return 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?
The input schema has 100% description coverage, so the schema already documents both parameters ('page' and 'per_page'). The description provides an example ('Example: { per_page: 20 }') which adds minimal practical context but doesn't significantly enhance understanding beyond what the schema provides. The baseline of 3 is appropriate when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'List broadcasts' which is a specific verb+resource combination. It distinguishes from sibling tools like 'get_broadcast' by indicating this lists multiple items rather than retrieving a single one. However, it doesn't explicitly differentiate from other list tools like 'list_contacts' or 'list_templates' beyond the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance with 'When to use: find recent campaigns, audit which broadcasts were sent, or pick one to inspect with get_broadcast.' This gives clear scenarios for when to use this tool and explicitly names an alternative tool ('get_broadcast') for different use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contact_propertiesA
List all custom contact properties defined for this account. When to use: discover which custom fields are available before creating/updating contacts. Returns: { items: [property, ...] }. Example: {}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return format ('Returns: { items: [property, ...] }') and implies a read-only operation through 'List all', though it doesn't explicitly mention permissions, rate limits, or pagination. It adds useful context beyond basic function but could be more comprehensive for a tool with zero 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?
The description is efficiently structured with three sentences: purpose, usage guidelines, and return format. Each sentence adds distinct value without redundancy, and the information is front-loaded with the core function. The example '{}' is minimal but serves its 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?
Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is largely complete. It covers purpose, usage, and return format. However, it could enhance completeness by explicitly stating it's a read-only operation or addressing potential edge cases, which would elevate it to 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?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on purpose and usage. It earns a high score for not adding unnecessary information, though a perfect 5 would require explicit acknowledgment of the parameterless nature.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List all custom contact properties') and resource ('defined for this account'), distinguishing it from siblings like 'get_contact_property' or 'create_contact_property'. It precisely communicates the tool's function without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance with 'When to use: discover which custom fields are available before creating/updating contacts.' This tells the agent exactly when this tool should be employed versus alternatives like 'create_contact_property' or 'update_contact', making it highly actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsA
List contacts with optional search and segment filtering. When to use: browse the contact book, find candidates by email/name fragment, or list members of a segment. Returns: { items[], meta } — paginated shaped contacts. Example: { search: "@acme.io", segment_id: "seg_xyz" }
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page | |
| search | No | Search by email or name | |
| segment_id | No | Filter by segment ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it describes the return format ('{ items[], meta } — paginated shaped contacts'), indicates pagination behavior, and provides an example of parameter usage. It doesn't mention rate limits or authentication requirements, but covers the essential operational 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?
Perfectly structured with four distinct, front-loaded sections: purpose statement, usage guidelines, return format, and example. Each sentence earns its place with zero wasted words. The example is concise yet illustrative of common use cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 100% schema coverage but no output schema, the description provides excellent context: clear purpose, usage guidelines, return format disclosure, and an example. It doesn't explain the structure of items in the return array, but given the schema coverage and the tool's relative simplicity, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal value beyond the schema: it mentions 'optional search and segment filtering' which the schema already documents, and provides an example showing search and segment_id usage. No additional syntax or format details are provided beyond what's in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('contacts') with specific optional filtering capabilities ('search and segment filtering'). It distinguishes from sibling tools like 'search_contacts' by focusing on browsing/filtering rather than comprehensive searching, and from 'get_contact' by handling multiple contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to use' section provides three concrete scenarios: 'browse the contact book, find candidates by email/name fragment, or list members of a segment.' This gives clear context for when this tool is appropriate versus alternatives like 'search_contacts' for more complex searches or 'get_contact' for single-contact retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_domainsA
List sending domains. When to use: choose which domain to send from, or audit which domains are verified. Returns: { domains: [...] } — array of shaped domains with status and tracking flags. Example: { per_page: 50 }
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it's a read operation (implied by 'List'), returns structured data with status and tracking flags, and supports pagination via the example. However, it doesn't mention potential limitations like rate limits, authentication needs, or error conditions.
Agents need to know what a tool does to the 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 highly concise and well-structured: purpose, usage guidelines, return format, and example in four brief lines. Every sentence adds value without redundancy, making it easy to parse and front-loaded with essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (list operation with 2 optional parameters) and no output schema, the description is reasonably complete: it covers purpose, usage, return structure, and an example. However, without annotations, it could benefit from mentioning safety (read-only) or pagination defaults for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('page' and 'per_page'). The description adds minimal value with an example ('Example: { per_page: 50 }'), which hints at usage but doesn't explain semantics beyond what the schema provides. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List sending domains.' This is a specific verb ('List') and resource ('sending domains'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_domain' or 'create_domain', which would be needed for a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage scenarios: 'choose which domain to send from, or audit which domains are verified.' This gives clear context for when to use the tool. It doesn't specify when NOT to use it or name alternatives (e.g., 'get_domain' for a single domain), preventing a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_emailsA
List previously-sent emails with optional filters and pagination. When to use: triage delivery, look up a specific recipient's history, or filter by status/tag/date. Returns: { items[], meta } — paginated emails with status, recipient, subject, timestamps. Example: { status: "bounced", date_from: "2026-04-10" }
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| per_page | No | Results per page (default 20) | |
| status | No | Filter by status | |
| domain_id | No | Filter by domain ID | |
| to | No | Filter by recipient address | |
| tag | No | Filter by tag | |
| date_from | No | Filter from date (ISO 8601) | |
| date_to | No | Filter to date (ISO 8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing pagination behavior, return format structure, and example usage. It doesn't mention rate limits, authentication requirements, or error conditions, but provides substantial behavioral context beyond basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Perfectly structured with four focused sentences: purpose statement, usage guidelines, return format, and example. Every sentence adds value with zero wasted words, and the most critical information (what it does) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 listing tool with 8 parameters and no output schema, the description provides excellent context: clear purpose, usage scenarios, return format, and example. It could mention default pagination values or error cases, but covers the essential information an agent needs to use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal parameter semantics beyond the schema - it mentions 'optional filters' generally and provides one example with 'status' and 'date_from', but doesn't explain parameter interactions or provide additional context not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('List') and resource ('previously-sent emails'), plus scope ('with optional filters and pagination'). It distinguishes from siblings like 'get_email' (single email) and 'list_contacts' (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides 'When to use' guidance with three concrete scenarios: triage delivery, look up recipient history, and filter by status/tag/date. This clearly indicates appropriate contexts without needing to mention alternatives since this is the primary email listing tool among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_inbound_email_attachmentsA
List attachments on an inbound email (filename, size, contentType). When to use: decide whether to download attachments before forwarding or processing. Returns: { items: [{ filename, contentType, size }] }. Example: { id: 7 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Inbound email ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return format ('Returns: { items: [{ filename, contentType, size }] }'), which is crucial behavioral information. However, it doesn't mention potential limitations like pagination, error conditions, or authentication requirements, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four sentences: purpose, usage guidelines, return format, and example. Each sentence serves a distinct purpose with zero wasted words, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no annotations and no output schema, the description does well by specifying the return format and usage context. However, it lacks details on error handling, rate limits, or dependencies (e.g., needing 'get_inbound_email' first to obtain the ID), which would make it more complete for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'id' parameter as 'Inbound email ID.' The description adds an 'Example: { id: 7 }' which provides concrete syntax, but doesn't explain where to obtain this ID or its valid range. This adds some value beyond the schema but not comprehensive 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 clearly states the specific action ('List attachments'), resource ('on an inbound email'), and output format ('filename, size, contentType'). It distinguishes from siblings like 'get_inbound_email' (which retrieves email content) and 'forward_inbound_email' (which forwards emails), making the purpose 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 explicitly states 'When to use: decide whether to download attachments before forwarding or processing,' providing clear context for when this tool should be invoked versus alternatives like 'forward_inbound_email' or 'reply_to_inbound_email' that might involve attachments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_inbound_emailsA
List inbound emails received by mailboxes on this account. When to use: triage support inbox, find a recent message to inspect, or filter for messages needing reply. Returns: { data: [...], meta } shaped — id, from, subject, receivedAt per message. Example: { per_page: 20 }
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing the return format ('{ data: [...], meta } shaped — id, from, subject, receivedAt per message') and providing an example parameter usage. However, it doesn't mention pagination behavior (implied by parameters but not explicitly stated), rate limits, or authentication 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 efficiently structured with purpose statement, usage guidelines, return format, and example in just four sentences. Each sentence adds distinct value with zero wasted words, and the most critical information (purpose) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 2 parameters and 100% schema coverage, the description provides good context including usage scenarios and return format. The main gap is the lack of output schema, but the description compensates by describing the return structure. It could be more complete by mentioning pagination behavior or default values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (page, per_page). The description adds marginal value by providing an example ('Example: { per_page: 20 }') but doesn't explain parameter interactions or provide additional semantic context beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List inbound emails') and resource ('received by mailboxes on this account'), providing a complete purpose statement. It distinguishes this tool from other list_* tools by specifying 'inbound emails' and from get_inbound_email (singular) by indicating it returns multiple messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides 'When to use' guidance with three concrete scenarios (triage support inbox, find recent message, filter for messages needing reply). This gives clear context for when this tool is appropriate versus alternatives like get_inbound_email for single messages or other list_* tools for different resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mailboxesA
List mailboxes across all domains. When to use: see which inboxes exist, find a mailbox id by email address. Returns: { items[], meta } — paginated shaped mailboxes. Example: { per_page: 50 }
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it specifies the return format ('{ items[], meta }'), indicates pagination ('paginated shaped mailboxes'), and provides an example parameter usage. However, it doesn't mention potential rate limits, authentication requirements, or error conditions.
Agents need to know what a tool does to the 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 perfectly structured and front-loaded: purpose statement first, usage guidelines second, return format third, and example last. Every sentence earns its place with zero wasted words, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 2 parameters and 100% schema coverage, the description provides excellent context: clear purpose, usage guidelines, return format, and pagination behavior. The only minor gap is the lack of output schema, but the description adequately describes the return structure. It's nearly complete for this tool type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters completely. The description provides an example parameter usage ('Example: { per_page: 50 }') which adds minimal value beyond what the schema provides. This meets the baseline expectation 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 clearly states the specific action ('List mailboxes') and scope ('across all domains'), distinguishing it from sibling tools like 'get_mailbox' (singular) and 'list_domains'. It provides a precise verb+resource combination that immediately communicates the tool's function without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly includes 'When to use' guidance with two concrete use cases: 'see which inboxes exist' and 'find a mailbox id by email address'. This provides clear context for when an agent should select this tool over alternatives like 'search_contacts' or 'get_mailbox'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_segmentsA
List contact segments. When to use: pick a segment id for create_broadcast or list_contacts(segment_id=…). Returns: { segments: [...] } — array of shaped segments with contactCount. Example: { per_page: 50 }
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return format ('Returns: { segments: [...] } — array of shaped segments with contactCount') and includes an example with pagination, which adds useful behavioral context. However, it doesn't mention potential limitations like rate limits, authentication needs, or error conditions, leaving some gaps for a mutation-free tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise, with four sentences that each serve a distinct purpose: stating the tool's function, providing usage guidelines, specifying the return format, and giving an example. There is no wasted text, and information is front-loaded effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema, no annotations), the description is largely complete. It covers purpose, usage, return format, and an example. However, without annotations or an output schema, it could benefit from more detail on error handling or pagination behavior, though not strictly required for a list 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?
The input schema has 100% description coverage, with clear documentation for 'page' and 'per_page' parameters. The description adds an example ('Example: { per_page: 50 }') that illustrates usage but doesn't provide additional semantic meaning beyond what the schema already states. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List contact segments.' This is a specific verb ('List') and resource ('contact segments'), making the function immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'list_contacts' or 'get_segment' beyond the resource name, which keeps it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidelines: 'When to use: pick a segment id for create_broadcast or list_contacts(segment_id=…).' This clearly states the intended context and alternatives, helping an agent understand when to invoke this tool versus others for related tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_subscription_topicsA
List all subscription topics defined for this account. When to use: pick a topic_id for a broadcast, or audit which preferences exist. Returns: { items: [topic, ...] } shaped. Example: {}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the return structure ('Returns: { items: [topic, ...] } shaped') which is valuable behavioral information not available elsewhere. However, it doesn't mention potential limitations like pagination, rate limits, or authentication requirements, leaving some behavioral aspects uncovered.
Agents need to know what a tool does to the 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 perfectly structured and front-loaded: purpose statement first, usage guidelines second, return format third, and example last. Every sentence earns its place with zero wasted words, making it highly efficient for an AI agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read operation with no output schema, the description provides excellent context: clear purpose, usage guidelines, and return format. The only minor gap is the lack of output schema, but the description compensates well by specifying the return structure. It's nearly complete for this tool's complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the baseline would be 3. However, the description adds value by clarifying that this lists 'all subscription topics defined for this account,' providing context about scope that isn't captured in the empty parameter schema. This elevates the score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List all subscription topics') and resource ('defined for this account'), distinguishing it from sibling tools like 'create_subscription_topic' and 'delete_subscription_topic'. It provides a precise verb+resource combination that leaves no ambiguity about its function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance with 'When to use: pick a topic_id for a broadcast, or audit which preferences exist.' This gives clear scenarios for when to invoke this tool versus alternatives, directly addressing the agent's decision-making needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_suppressionsA
List suppressed email addresses (will not receive any emails). When to use: audit which addresses are blocked, or paginate to find a specific entry. Returns: { items[], meta } — paginated suppressions with reason and createdAt. Example: { per_page: 100 }
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it's a read-only list operation (implied by 'List'), returns paginated data with specific structure ('{ items[], meta }'), and includes metadata fields ('reason and createdAt'). It also provides a concrete example of parameter usage. However, it doesn't mention rate limits, authentication requirements, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four sentences that each serve distinct purposes: purpose statement, usage guidelines, return format, and parameter example. No wasted words, and the most critical information (what the tool does) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 2 parameters and no output schema, the description provides good coverage: purpose, usage scenarios, return format with field details, and a parameter example. The main gap is lack of output schema, but the description compensates reasonably well by describing the return structure. It could benefit from mentioning pagination behavior more explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters (page, per_page). The description adds minimal value beyond the schema by providing an example ('Example: { per_page: 100 }'), but doesn't explain parameter interactions, default values, or constraints beyond what's in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List suppressed email addresses') and resource ('email addresses'), with explicit scope ('will not receive any emails'). It distinguishes from sibling tools like 'add_suppression' and 'remove_suppression' by focusing on listing rather than modifying.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context ('audit which addresses are blocked, or paginate to find a specific entry'), giving practical scenarios for when to use this tool. However, it doesn't explicitly mention when NOT to use it or name specific alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesA
List email templates. When to use: pick a template id for send_email or render_template, or audit which templates exist. Returns: { items[], meta } — paginated shaped templates with name, version, published flag. Example: { per_page: 50 }
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns paginated results ('Returns: { items[], meta } — paginated shaped templates'), which is valuable behavioral context not inferable from the input schema alone. It doesn't mention rate limits or authentication needs, but for a read-only list operation, the pagination disclosure is sufficient for a high score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by usage guidelines, return format, and an example—all in four concise sentences. Each sentence adds value without redundancy, making it efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (a simple list operation with two optional parameters) and no output schema, the description is complete: it explains the purpose, usage, return format (including pagination), and provides an example. This covers all necessary aspects for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('page' and 'per_page'). The description adds an example ('Example: { per_page: 50 }'), which provides a usage hint but doesn't add significant semantic meaning beyond what the schema provides. This meets the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('email templates'), making the purpose specific. It distinguishes from siblings like 'get_template' (which retrieves a single template) and 'create_template' (which creates new templates), establishing its role as a listing operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage scenarios: 'pick a template id for send_email or render_template, or audit which templates exist.' This gives clear context for when to use this tool versus alternatives like 'get_template' for detailed info on a specific template.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksA
List configured webhook endpoints. When to use: audit which integrations are receiving events. Returns: { webhooks: [...] } — array of shaped webhooks. Example: { per_page: 50 }
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return format ('{ webhooks: [...] } — array of shaped webhooks'), which is valuable behavioral information not in the input schema. However, it lacks details on pagination behavior (e.g., default values, error handling) and whether the operation is read-only or has side effects, leaving some gaps for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by usage guidelines, return format, and an example—all in four concise sentences with zero waste. Each sentence earns its place by adding distinct value (purpose, context, output, usage hint), making it highly efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (list operation with 2 optional parameters), 100% schema coverage, and no output schema, the description is mostly complete. It covers purpose, usage, and return format, but lacks full behavioral transparency (e.g., pagination defaults, error cases). With no annotations, it could benefit from more detail on safety and operational limits, but it's adequate for a simple 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?
The input schema has 100% description coverage (both parameters are documented), so the baseline is 3. The description adds minimal value beyond the schema by providing an example ('Example: { per_page: 50 }'), which hints at usage but does not elaborate on parameter interactions or constraints. It does not compensate for any schema gaps, as there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('configured webhook endpoints'), making the purpose specific and unambiguous. It distinguishes itself from sibling tools like 'get_webhook' (singular) and 'create_webhook'/'delete_webhook'/'update_webhook' (mutations), establishing a clear scope for listing multiple endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides a 'When to use' clause ('audit which integrations are receiving events'), giving clear context for when this tool is appropriate. It implicitly distinguishes from sibling tools by focusing on listing rather than creating, getting, updating, or deleting webhooks, though it does not explicitly name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_emailA
Render + lint + measure an email in one shot WITHOUT sending it. When to use: BEFORE send_email when the body was generated by the agent. Combines render_template (if template_id given), spam check, deliverability warnings, and size measurement so you only need one round-trip to know if it's safe to send. Returns: { rendered_subject, rendered_html, rendered_text, size: { html_bytes, text_bytes }, spam: { score, action, symbols[], skipped }, warnings: [{ severity, code, message }] }. Example: { from: "Acme hi@acme.io", to: ["a@b.io"], template_id: "tpl_welcome", variables: { first_name: "Ada" } }
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | Sender email address | |
| to | Yes | Recipients (capped at 5 for preview) | |
| subject | No | Subject (overridden by template if template_id given) | |
| html | No | HTML body (used when no template_id) | |
| text | No | Plain text body (used when no template_id) | |
| template_id | No | Template publicId — renders the template instead of using html/text | |
| variables | No | Template variables |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates this is a non-destructive preview operation ('WITHOUT sending it'), describes the multi-function nature (render, lint, measure), and specifies the return structure. However, it doesn't mention rate limits, authentication requirements, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with zero waste. The first sentence states the core functionality, the second provides usage context, the third explains the combined operations, and the final sections detail returns and provide an example. 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 7-parameter tool with no annotations and no output schema, the description does well by explaining the multi-function nature, providing usage context, and detailing the return structure. However, it doesn't cover error cases, rate limits, or authentication requirements that would be helpful for a mutation-like tool (even though it doesn't send).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 7 parameters thoroughly. The description adds minimal parameter semantics beyond the schema - it mentions template_id triggers template rendering and provides an example with variables, but doesn't significantly enhance understanding of parameter interactions or constraints beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Render + lint + measure an email') and distinguishes it from siblings by explicitly mentioning it's for previewing 'BEFORE send_email'. It also differentiates from render_template by noting it combines multiple functions in one round-trip.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('BEFORE send_email when the body was generated by the agent') and mentions an alternative (send_email). It also clarifies the relationship with render_template, indicating this tool can handle template rendering as part of its functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_templateA
Mark a template as published so it can be referenced by send_email. When to use: after creating or editing a template you have validated and want available for sending. Returns: shaped template with published=true. Example: { id: "tpl_abc" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID to publish |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the action (publishing) and return value ('shaped template with published=true'), which implies a mutation. However, it doesn't mention permissions needed, whether the operation is reversible (though 'unpublish_template' exists), or any side effects like notifications. The description adds basic behavioral context but lacks depth for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, followed by usage guidelines, return value, and an example. Every sentence adds value with zero waste, and the structure is logical and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 1 parameter with 100% schema coverage and no output schema, the description is reasonably complete: it explains purpose, usage, and return value. However, as a mutation tool with no annotations, it could better address permissions or reversibility. The sibling 'unpublish_template' hints at reversibility, but this isn't explicitly stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single 'id' parameter. The description adds minimal param semantics through the example '{ id: "tpl_abc" }', which clarifies the expected format. With 0 parameters, baseline would be 4, but here the example provides slight extra value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Mark a template as published'), the resource ('template'), and the purpose ('so it can be referenced by send_email'). It distinguishes from siblings like 'create_template' (creation), 'update_template' (editing), and 'unpublish_template' (opposite action).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides when-to-use guidance: 'after creating or editing a template you have validated and want available for sending.' This clearly indicates the prerequisite state and intent, differentiating from alternatives like 'create_template' (initial creation) or 'update_template' (editing without publishing).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_contact_from_segmentA
Remove a single contact from a segment. When to use: targeted removal (e.g. opt-out, manual exclusion). Does not delete the contact. Returns: { success: boolean }. Example: { id: "seg_abc", contact_id: "con_1" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Segment ID | |
| contact_id | Yes | Contact ID to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully clarifies that this operation 'Does not delete the contact' (important safety context) and specifies the return format '{ success: boolean }'. It also provides an example parameter structure. The main gap is lack of information about permissions needed, rate limits, or error conditions.
Agents need to know what a tool does to the 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 perfectly structured and concise: purpose statement, usage guidance, return value, and example - all in four brief sentences with zero wasted words. Each sentence adds distinct value, and the most critical information (what the tool does) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 2-parameter mutation tool with no annotations and no output schema, the description does an excellent job covering the essentials: purpose, usage context, safety clarification, return format, and example. The main gap is lack of information about what happens if the contact isn't in the segment or if IDs are invalid, but given the tool's relative simplicity, this is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters (id and contact_id). The description provides an example parameter structure but doesn't add meaningful semantic context beyond what the schema provides (like format requirements or relationship between parameters). This meets the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Remove a single contact from a segment') with the exact resource involved. It distinguishes from sibling tools like 'delete_contact' (which would delete the contact entirely) and 'delete_segment' (which would delete the whole segment). The phrase 'Does not delete the contact' provides explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('targeted removal (e.g. opt-out, manual exclusion)'), giving practical examples. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the many sibling tools (like 'unsubscribe_contact' or 'remove_suppression'), which would be needed for a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_suppressionA
Remove an address from the suppression list (sends will resume). When to use: a previously-suppressed user has explicitly opted back in, or a bounce was a misconfiguration. Returns: { success: boolean }. Example: { email: "fixed@aol.com" }
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address to unsuppress |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly indicates this is a mutation operation (removing from a list), discloses the return format ('Returns: { success: boolean }'), and provides an example. It doesn't mention permissions, rate limits, or error conditions, but covers the core behavioral aspects adequately given the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four distinct, purposeful sentences: purpose statement, usage guidelines, return format, and example. Each sentence adds unique value with zero redundancy. The information is front-loaded with the core purpose first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 tool with no annotations and no output schema, the description provides excellent coverage. It explains what the tool does, when to use it, what it returns, and includes an example. The only minor gap is the lack of explicit error handling information, but this is reasonable given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single 'email' parameter. The description adds value by providing a concrete example ('Example: { email: "fixed@aol.com" }'), which helps illustrate the expected format beyond the schema's basic type information. This justifies a score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove an address from the suppression list') and the outcome ('sends will resume'), which is specific and distinguishes it from sibling tools like 'add_suppression' and 'list_suppressions'. It uses precise verbs and identifies the exact resource being modified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides 'When to use' guidance with two concrete scenarios: 'a previously-suppressed user has explicitly opted back in' and 'a bounce was a misconfiguration'. This gives clear context for when this tool should be selected over alternatives, though it doesn't name specific sibling tools as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_templateA
Server-side render a template with the provided variables. When to use: agent wants to preview the final subject/html/text before sending, or needs to inspect what variables a template requires. Returns missing_variables[] so the agent can prompt the user / fill in defaults. Returns: { subject, html, text, missing_variables[], template_variables[] }. Example: { template_id: "tpl_welcome", variables: { first_name: "Ada" } }
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | Yes | Template publicId | |
| variables | No | Variable substitutions (string values only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a server-side operation (not client-side), returns structured output including missing variables for user prompting, and handles variable substitutions. However, it doesn't mention potential side effects (e.g., if rendering triggers logging or caching) or error conditions (e.g., invalid template IDs).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by usage guidelines, return values, and an example—all in four concise sentences. Each sentence adds essential information without redundancy, making it highly efficient and well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is complete. It covers purpose, usage, behavior, return structure, and includes an example. The lack of output schema is compensated by detailing the return values, ensuring the agent understands what to expect without needing structured output documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the baseline is 3. The description adds value by clarifying that variables are for 'substitutions (string values only)' and providing an example with specific fields (template_id, variables with first_name). This enhances understanding beyond the schema's generic descriptions, though it doesn't detail all possible variable types or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Server-side render') and resource ('a template'), making the purpose specific and unambiguous. It distinguishes this tool from siblings like 'preview_email' or 'get_template' by focusing on template rendering with variable substitution rather than email previews or template retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidelines with 'When to use: agent wants to preview the final subject/html/text before sending, or needs to inspect what variables a template requires.' This gives clear scenarios for when to invoke this tool versus alternatives, such as using 'send_email' for actual sending or 'get_template' for template metadata.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_inbound_emailA
Send a reply to an inbound email (subject and threading headers are set automatically). When to use: the agent has drafted a reply body and wants to dispatch it. Quote the original message in the body if needed. Returns: { id } of the new outbound email. Example: { id: 7, from: "support@acme.io", html: "Thanks for reaching out…" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Inbound email ID to reply to | |
| from | Yes | Sender email address for the reply | |
| html | No | HTML body of the reply | |
| text | No | Plain text body of the reply | |
| cc | No | CC recipients | |
| bcc | No | BCC recipients |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a write operation (sending a reply), automatically sets subject and threading headers, and returns an ID. However, it doesn't mention authentication requirements, rate limits, or error conditions, which would be helpful for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with three distinct parts: purpose statement, usage guidelines, and return information. Each sentence adds value with no wasted words. The example is brief but illustrative. It's appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description does well by explaining the purpose, usage, and return value. However, it could be more complete by mentioning authentication needs or potential side effects. The example helps but doesn't fully compensate for the lack of structured output documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 6 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, but it does provide context about how parameters relate to the tool's purpose (e.g., 'html' and 'text' are for the reply body). This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Send a reply') and resource ('to an inbound email'), and distinguishes it from siblings like 'forward_inbound_email' or 'send_email' by specifying it's for replying to existing inbound emails with automatic threading. It goes beyond just restating the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'When to use: the agent has drafted a reply body and wants to dispatch it.' It also mentions quoting the original message if needed, giving clear context for when this tool is appropriate versus alternatives like creating a new email from scratch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reschedule_emailA
Reschedule a scheduled email to a new send time. When to use: a queued email needs its delivery time adjusted (e.g. send earlier/later in business hours). Returns: { success: boolean }. Example: { id: "em_7kf2x9", scheduled_at: "2026-04-18T09:00:00Z" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID to reschedule | |
| scheduled_at | Yes | New scheduled time (ISO 8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It correctly identifies this as a mutation operation ('reschedule') and specifies the return format. However, it doesn't mention important behavioral aspects like permission requirements, whether the operation is idempotent, rate limits, or what happens if the email has already been 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?
The description is appropriately sized with three sentences that each serve distinct purposes: stating the action, providing usage context, and showing return format with an example. It's front-loaded with the core purpose. Minor improvement could be made by integrating the example more seamlessly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 2-parameter mutation tool with no annotations and no output schema, the description does well by explaining the purpose, usage context, and return format. It provides an example parameter structure. The main gap is lack of behavioral details about permissions, idempotency, and error conditions that would be important for a mutation 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 schema already fully documents both parameters. The description provides an example parameter structure but doesn't add meaningful semantic context beyond what the schema provides. The baseline is 3 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?
The description clearly states the specific action ('reschedule'), target resource ('a scheduled email'), and purpose ('to a new send time'). It distinguishes from siblings like cancel_email or send_email by focusing on time adjustment of already-scheduled emails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'When to use' section explicitly states the context ('a queued email needs its delivery time adjusted') and provides an example scenario ('send earlier/later in business hours'). However, it doesn't explicitly mention when NOT to use this tool or name specific alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_api_keyA
Permanently revoke an API key — all subsequent requests using it will fail. When to use: a key has leaked or is no longer needed. Confirm with the user — irreversible. Returns: { success: boolean }. Example: { id: 17 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | API key ID to revoke |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates the irreversible nature ('permanently revoke', 'irreversible'), the impact ('all subsequent requests using it will fail'), and the return format ('Returns: { success: boolean }'). It doesn't mention rate limits or authentication requirements, but covers the most critical behavioral aspects for this destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly structured and concise. It starts with the core action, follows with usage guidance, then provides return format and example - all in four sentences with zero wasted words. Every sentence adds essential information for the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 operation with no annotations and no output schema, the description provides excellent contextual completeness. It covers purpose, usage guidelines, behavioral consequences, return format, and includes an example. The combination of clear warnings about irreversibility and the return format specification makes this description complete for its context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'id' well-documented in the schema as 'API key ID to revoke'. The description doesn't add additional parameter semantics beyond what's in the schema, but provides an example ('Example: { id: 17 }') that reinforces usage. With high schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('permanently revoke') and resource ('API key'), and distinguishes it from siblings like 'create_api_key' and 'get_api_key' by focusing on destruction rather than creation or retrieval. The phrase 'all subsequent requests using it will fail' further clarifies the irreversible impact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('a key has leaked or is no longer needed') and provides critical guidance on prerequisites ('Confirm with the user — irreversible'). It clearly distinguishes this as a destructive operation compared to other API key tools like 'list_api_keys' or 'get_api_key'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contactsA
Search contacts with filters (segment, engagement, unsubscribed) and a fuzzy query across email/first_name/last_name. Adds a match_reason on each row indicating which field matched the query. When to use: agent needs to find a candidate set — e.g. "active contacts at @acme.io", "all dormant contacts", "people called Sarah". Use list_contacts for plain pagination without query, or use this when you need filtering or per-row match annotation. Returns: { items: [shaped contact + match_reason], meta: { page, perPage, total, totalPages } }. Example: { query: "ada", filters: { engagement_segment: "active" }, limit: 25 }
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Substring to match against email, first_name, last_name | |
| filters | No | Optional filters | |
| limit | No | Max results (default 50) | |
| page | No | Page number (default 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it performs fuzzy matching across multiple fields, adds match_reason annotations to results, and returns paginated results with metadata. However, it doesn't mention rate limits, authentication requirements, or error conditions that might be relevant for a search operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with purpose first, usage guidelines second, return format third, and an example last. Every sentence adds value: the first explains core functionality, the second provides usage guidance with alternatives, the third documents return format, and the fourth gives a concrete example. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no annotations and no output schema, the description provides excellent context: it explains what the tool does, when to use it versus alternatives, describes the return format in detail (including the match_reason field), and provides a concrete example. This gives the agent sufficient information to use the tool effectively despite the lack of structured output documentation.
Complex tools with many parameters or behaviors need more documentation. 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, so the baseline is 3. The description adds value by explaining that query performs 'fuzzy' matching across email/first_name/last_name (clarifying the 'substring' description in schema), and provides a concrete example showing how filters and limit work together. It doesn't fully explain the pagination behavior beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches contacts with specific filters (segment, engagement, unsubscribed) and a fuzzy query across email/first_name/last_name, and adds match_reason annotations. It distinguishes from the sibling list_contacts tool by specifying this is for filtered searching with match annotations versus plain pagination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides 'When to use' guidance with concrete examples ('active contacts at @acme.io', 'all dormant contacts', 'people called Sarah'), and clearly distinguishes when to use this tool versus the list_contacts alternative. It provides both positive usage scenarios and explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_batch_emailsA
Send multiple emails in a single batch request (up to 100 per call). When to use: agent needs to send the same or different content to many recipients in one round-trip. For broadcasts to a saved segment use create_broadcast/send_broadcast instead. Returns: { data: [{ id }, ...] } — one id per email in the order submitted. Example: { emails: [{ from, to: ["a@x"], subject: "hi", html }] }
| Name | Required | Description | Default |
|---|---|---|---|
| emails | Yes | Array of emails to send |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing batch size limit ('up to 100 per call'), return format ('{ data: [{ id }, ...] }'), and ordering behavior ('one id per email in the order submitted'). It doesn't mention error handling or rate limits, but covers key operational aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with zero waste: first states purpose and limit, second gives usage guidelines, third specifies return format, fourth provides example. Each sentence adds distinct value, and information is front-loaded appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 no annotations and no output schema, the description does well by covering purpose, guidelines, behavioral constraints, and return format. It could mention authentication requirements or error scenarios, but provides sufficient context for effective use given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the 'emails' parameter structure. The description adds minimal value with an example showing basic fields, but doesn't explain optional fields like 'cc', 'bcc', or 'template_id' beyond what the schema provides. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Send multiple emails') and resource ('in a single batch request'), including the scope ('up to 100 per call'). It distinguishes from sibling tools like 'send_email' (single email) and 'send_broadcast' (broadcasts to segments), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use ('agent needs to send the same or different content to many recipients in one round-trip') and when not to use ('For broadcasts to a saved segment use create_broadcast/send_broadcast instead'), naming specific alternatives. This gives clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_broadcastA
Dispatch a draft broadcast to its segment immediately. When to use: after the user has reviewed the staged broadcast and approved sending. The broadcast must be in "draft" status. Returns: { success: boolean }. Example: { id: "br_abc" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Broadcast ID to send |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the action (dispatch immediately), the required state (draft status), and the return format ({ success: boolean }). However, it doesn't mention potential side effects, error conditions, or permissions needed, leaving some behavioral aspects unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four sentences that each serve distinct purposes: stating the action, providing usage guidelines, specifying return values, and giving an example. There is no wasted text, and information is front-loaded appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 no annotations and no output schema, the description does well by explaining the action, prerequisites, and return format. However, it doesn't cover potential errors, side effects on related resources, or confirmation requirements, leaving some contextual gaps for a tool that performs a significant action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'id' parameter as 'Broadcast ID to send'. The description adds minimal value beyond this with the example { id: "br_abc" }, which shows format but doesn't provide additional semantic context. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('dispatch a draft broadcast to its segment immediately') and distinguishes it from siblings like 'create_broadcast', 'update_broadcast', and 'cancel_broadcast'. It specifies the exact resource (broadcast) and operation (send), making the purpose 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 explicitly states when to use this tool ('after the user has reviewed the staged broadcast and approved sending') and provides a prerequisite condition ('The broadcast must be in "draft" status'). This gives clear contextual guidance on proper usage timing and state requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailA
Send a single transactional email immediately, or schedule it for a future time. When to use: the agent has decided what to send (subject + html/text + recipients) and wants PostStack to deliver it. Run preview_email and lint_email first if the body was generated by the agent. Returns: { id } — the new email id, suitable for get_email or cancel_email. Example: { from: "Ada ada@example.com", to: ["new@user.io"], subject: "Welcome", html: "Hi" }
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | Sender email address (e.g. "Name <name@example.com>") | |
| to | Yes | Recipient email addresses | |
| subject | No | Email subject line | |
| html | No | HTML body content | |
| text | No | Plain text body content | |
| cc | No | CC recipients | |
| bcc | No | BCC recipients | |
| reply_to | No | Reply-to address | |
| tags | No | Tags for categorization | |
| scheduled_at | No | ISO 8601 datetime to schedule delivery | |
| template_id | No | Template ID to use instead of html/text | |
| variables | No | Template variable substitutions | |
| headers | No | Custom email headers |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behaviors: immediate or scheduled delivery, returns an email ID for follow-up actions (get_email, cancel_email), and implies this is a write operation (sending emails). However, it doesn't mention authentication requirements, rate limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Perfectly structured with four focused sentences: purpose statement, usage context, return value explanation, and concrete example. Every sentence earns its place with zero waste, and information is appropriately 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 complex mutation tool with 13 parameters and no annotations or output schema, the description does well by covering purpose, usage guidelines, return format, and providing an example. However, it lacks details about error handling, rate limits, or authentication requirements that would be helpful for a sending 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 schema already documents all 13 parameters thoroughly. The description adds minimal parameter semantics beyond the schema, only implying through the example that 'from', 'to', 'subject', and 'html' are core fields. Baseline 3 is appropriate when 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 clearly states the tool's purpose with specific verbs ('send' and 'schedule') and resource ('transactional email'), distinguishing it from siblings like send_broadcast or send_batch_emails by specifying 'single transactional email' and immediate/future delivery options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('the agent has decided what to send') and provides clear prerequisites ('Run preview_email and lint_email first if the body was generated by the agent'), offering specific alternative tools to use before invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscribe_contact_to_topicA
Opt a contact in to a subscription topic. When to use: explicit user consent ("subscribe me to product updates"). Returns: shaped subscription record. Example: { contact_id: "con_abc", topic_id: 3 }
| Name | Required | Description | Default |
|---|---|---|---|
| contact_id | Yes | Contact ID | |
| topic_id | Yes | Topic ID to subscribe to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It states the action ('Opt a contact in') and return type ('shaped subscription record'), but doesn't disclose important behavioral aspects like whether this requires specific permissions, if it's idempotent, what happens if the contact/topic doesn't exist, or any rate limits. The example helps but doesn't cover behavioral traits.
Agents need to know what a tool does to the 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 perfectly structured with purpose statement, usage guidelines, return information, and an example - all in just three sentences. Every sentence adds value, and the information is front-loaded with the core purpose first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 2-parameter mutation tool with no annotations and no output schema, the description does well by including purpose, usage context, return information, and an example. However, it lacks details about error conditions, permissions needed, or what the 'shaped subscription record' actually contains, which would be helpful given the mutation nature of the 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 the schema already documents both parameters adequately. The description adds minimal value beyond the schema through the example showing parameter usage, but doesn't provide additional semantic context about what valid contact_id or topic_id values look like beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Opt a contact in') and resource ('subscription topic'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from its sibling 'unsubscribe_contact_from_topic' beyond the obvious opposite action, which keeps it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance with 'When to use: explicit user consent ("subscribe me to product updates")'. This gives clear context about when this tool should be invoked, addressing the ethical/legal requirement for consent in subscription scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_from_addressA
Suggest sensible from-addresses for a given purpose, drawn from the team's verified domains + existing mailboxes. When to use: agent doesn't know which from-address to use. Pass the purpose ("transactional", "marketing", "support", "newsletter", etc.); the tool ranks options based on existing mailboxes (real inboxes) and conventional local-parts for the purpose. Returns: { recommended: string|null, alternatives: string[], reasoning: string }. Example: { purpose: "transactional" }
| Name | Required | Description | Default |
|---|---|---|---|
| purpose | Yes | What the agent intends to send |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it ranks options based on existing mailboxes and conventional local-parts, and returns a structured result with recommendations and reasoning. However, it doesn't mention potential limitations like rate limits, authentication needs, or error conditions, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with clear sections: purpose statement, usage guidelines, return format, and example. Every sentence adds value without redundancy, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one well-documented parameter and no output schema, the description is quite complete. It explains what the tool does, when to use it, how it behaves, and what it returns. The main gap is the lack of output schema, but the description compensates by detailing the return structure. A slight deduction for not covering edge cases or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage with a well-documented enum for 'purpose'. The description adds value by explaining that the purpose parameter represents 'what the agent intends to send' and provides example values, enhancing understanding beyond the schema's enum list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Suggest sensible from-addresses for a given purpose, drawn from the team's verified domains + existing mailboxes.' It specifies the verb ('suggest'), resource ('from-addresses'), and scope ('team's verified domains + existing mailboxes'), distinguishing it from sibling tools that focus on sending emails or managing contacts/domains directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'When to use: agent doesn't know which from-address to use.' It provides clear context for its application, helping the agent distinguish it from alternatives like 'send_email' or 'create_mailbox' that don't address address selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpublish_templateA
Mark a template as unpublished so it cannot be sent. When to use: hide a template from sending without deleting it (e.g. retiring a campaign while keeping history). Returns: shaped template with published=false. Example: { id: "tpl_abc" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID to unpublish |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by explaining the behavioral effect ('cannot be sent'), the non-destructive nature ('without deleting it'), and the return value format. It doesn't mention permissions, rate limits, or error conditions, but provides solid operational context for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly structured with purpose statement, usage guidelines, return value information, and example - all in four concise sentences with zero wasted words. Each sentence serves a distinct purpose and contributes to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 tool with no annotations and no output schema, the description provides excellent coverage: purpose, usage context, behavioral effect, return format, and example. It doesn't cover error cases or edge conditions, but provides sufficient context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds value by providing an example parameter format '{ id: "tpl_abc" }' that clarifies the expected input structure beyond the schema's basic type information, earning an extra point for practical guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Mark a template as unpublished') and resource ('template'), distinguishing it from sibling tools like 'delete_template' (permanent removal) and 'publish_template' (opposite action). It provides a precise verb+resource combination with clear intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'When to use: hide a template from sending without deleting it (e.g. retiring a campaign while keeping history)', providing clear context for when to use this tool versus alternatives like delete_template. It gives both the positive use case and the distinction from deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsubscribe_contactA
Mark a contact as unsubscribed from all email (preserves the contact record). When to use: handle an unsubscribe request received outside PostStack (e.g. CS ticket, app preference). Returns: { success: boolean }. Example: { id: "con_abc123" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID to unsubscribe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates the mutation action ('Mark as unsubscribed'), clarifies that the contact record is preserved (important behavioral detail), and specifies the return format. However, it doesn't mention potential side effects like whether this affects historical data or triggers notifications, which would be helpful for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with four distinct, purposeful sentences: action statement, usage guidance, return format, and example. Each sentence adds unique value without redundancy. The information is front-loaded with the core purpose first, followed by important contextual details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation tool with no annotations and no output schema, the description provides excellent completeness. It covers the action, behavioral nuance (preserves record), usage context, return format, and includes an example. The description successfully compensates for the lack of structured metadata, making the tool's behavior and appropriate usage clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with the single parameter 'id' documented as 'Contact ID to unsubscribe.' The description doesn't add parameter-specific information beyond what's in the schema, but provides a clear example showing the parameter usage. With high schema coverage and only one parameter, this meets the baseline expectation for 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?
The description clearly states the specific action ('Mark a contact as unsubscribed from all email') and resource ('contact'), while distinguishing from siblings like 'unsubscribe_contact_from_topic' (which unsubscribes from specific topics) and 'delete_contact' (which removes the record entirely). The parenthetical 'preserves the contact record' further clarifies the distinction from deletion operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance with 'When to use: handle an unsubscribe request received outside PostStack (e.g. CS ticket, app preference).' This clearly indicates the appropriate context and distinguishes it from automated unsubscribe handling that might occur within the platform, providing clear boundaries for when this tool should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsubscribe_contact_from_topicA
Opt a contact out of a subscription topic. When to use: explicit user opt-out for a single preference (the contact remains in other topics and the global list). Returns: { success: boolean }. Example: { contact_id: "con_abc", topic_id: 3 }
| Name | Required | Description | Default |
|---|---|---|---|
| contact_id | Yes | Contact ID | |
| topic_id | Yes | Topic ID to unsubscribe from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well: it specifies the operation type ('opt out'), clarifies the scope (single topic, not global), and states the return format. However, it doesn't mention potential side effects like notifications, audit logs, or error conditions, leaving some behavioral aspects uncovered.
Agents need to know what a tool does to the 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 perfectly structured and concise: purpose statement, usage guidelines, return format, and example—all in four brief sentences with zero wasted words. Each sentence earns its place by adding distinct value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is complete: it explains what the tool does, when to use it, what it returns, and provides an example. No significant gaps remain for an agent to understand and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by providing an example that clarifies the parameter format and usage: '{ contact_id: "con_abc", topic_id: 3 }'. This enhances understanding beyond the basic schema descriptions of 'Contact ID' and 'Topic ID'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Opt out') and resource ('contact from a subscription topic'), making the purpose specific. It distinguishes from sibling tools like 'unsubscribe_contact' (which likely removes from all topics) by specifying 'from a topic' for single-preference opt-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?
The description explicitly provides usage guidance: 'When to use: explicit user opt-out for a single preference (the contact remains in other topics and the global list).' This clearly defines the context and distinguishes it from alternatives like 'unsubscribe_contact' (full removal) or 'remove_suppression' (different mechanism).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_broadcastA
Edit a draft broadcast in place. Only draft broadcasts can be updated. When to use: tweak subject/body/segment before sending or before the scheduled time. Returns: shaped broadcast reflecting the new state. Example: { id: "br_abc", subject: "April update (revised)" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Broadcast ID | |
| segment_id | No | Segment ID | |
| from | No | Sender email address | |
| subject | No | Email subject line | |
| html | No | HTML body content | |
| text | No | Plain text body content | |
| reply_to | No | Reply-to address | |
| name | No | Internal broadcast name | |
| scheduled_at | No | ISO 8601 datetime to schedule sending | |
| topic_id | No | Subscription topic ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the constraint 'Only draft broadcasts can be updated' and the return type ('shaped broadcast reflecting the new state'), which adds useful context. However, it lacks details on permissions, error handling, or side effects, leaving gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by usage guidelines, return information, and an example—all in four concise sentences with no wasted words. Each sentence adds distinct value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 10 parameters, 100% schema coverage, and no output schema, the description is reasonably complete. It covers purpose, constraints, usage, and returns, but could improve by addressing authentication needs or error cases, given the lack of 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?
The input schema has 100% description coverage, so the baseline is 3. The description does not add any parameter-specific details beyond what the schema provides (e.g., it doesn't explain the relationship between 'html' and 'text' fields or format constraints for 'scheduled_at').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Edit a draft broadcast in place') and resource ('broadcast'), distinguishing it from siblings like 'create_broadcast' (for new broadcasts) and 'send_broadcast' (for sending). It explicitly mentions 'Only draft broadcasts can be updated,' which further clarifies scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('tweak subject/body/segment before sending or before the scheduled time') and includes a clear exclusion ('Only draft broadcasts can be updated'), helping differentiate it from alternatives like 'cancel_broadcast' or 'reschedule_email'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactA
Update an existing contact's name, properties, or subscription state. When to use: keep the contact record in sync with your app (name change, plan upgrade, opt-out). Returns: shaped contact reflecting the new state. Example: { id: "con_abc123", properties: { plan: "scale" } }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID | |
| first_name | No | First name | |
| last_name | No | Last name | |
| unsubscribed | No | Whether the contact is unsubscribed | |
| properties | No | Custom properties |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that the tool updates an existing contact and returns a shaped contact, which covers basic operation and output. However, it lacks details on permissions needed, error handling (e.g., if ID is invalid), or side effects (e.g., impact on related data), leaving gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by usage guidelines, return information, and an example—all in four concise sentences with zero waste. Each sentence adds value, making it efficient and well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 no annotations and no output schema, the description is moderately complete: it covers purpose, usage, and return shape. However, it lacks details on behavioral aspects like error conditions or side effects, and the example is brief. Given the complexity (5 parameters, nested objects), more context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 5 parameters. The description adds minimal value beyond the schema by listing updatable fields ('name, properties, or subscription state') and providing an example, but it doesn't explain parameter interactions or constraints (e.g., that 'id' is required). This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update'), target resource ('existing contact'), and specific fields ('name, properties, or subscription state'). It distinguishes from sibling tools like 'create_contact' (for new contacts) and 'delete_contact' (for removal), making the purpose specific and well-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?
The description explicitly provides a 'When to use' section with concrete scenarios ('name change, plan upgrade, opt-out') and the goal ('keep the contact record in sync with your app'). This gives clear guidance on when to apply this tool versus alternatives like 'create_contact' for new records or 'delete_contact' for removal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contact_propertyA
Edit a custom contact property's label, options or required flag. When to use: rename a label, expand the option list for a select, or toggle the required flag. Cannot change the type after creation. Returns: shaped property. Example: { id: 5, options: ["free","pro","scale","enterprise"] }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Property ID | |
| label | No | New display label | |
| options | No | Updated options for select type | |
| required | No | Whether this property is required |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the mutation nature ('Edit'), constraints ('Cannot change the type after creation'), and return format ('Returns: shaped property' with example). However, it doesn't mention potential side effects, error conditions, or permission requirements that might be relevant for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly structured with purpose statement, usage guidelines, constraint, return information, and example - all in four concise sentences. Every sentence adds value with zero wasted words, and key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description does an excellent job covering purpose, usage, constraints, and return format. The example provides concrete output expectations. The only minor gap is lack of explicit mention about what happens when partial parameters are provided or error scenarios.
Complex tools with many parameters or behaviors need more documentation. 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 description coverage is 100%, so all parameters are documented in the schema. The description adds context about what each parameter modifies ('label, options or required flag') and the example shows options usage, but doesn't provide additional semantic meaning beyond what the schema already specifies. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Edit') and resource ('a custom contact property's label, options or required flag'), making the purpose specific. It distinguishes from sibling tools like 'create_contact_property' (creation) and 'delete_contact_property' (deletion) by focusing on modification of existing properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides 'When to use' guidance with three specific scenarios (rename label, expand options, toggle required flag) and a clear exclusion ('Cannot change the type after creation'). This gives direct alternatives to creation/deletion tools and sets boundaries for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_domainA
Update domain settings (open/click tracking, TLS mode). When to use: toggle tracking on/off, or switch between opportunistic and enforced TLS. Returns: shaped domain with updated settings. Example: { id: 42, click_tracking: false, tls_mode: "enforced" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID | |
| open_tracking | No | Enable/disable open tracking | |
| click_tracking | No | Enable/disable click tracking | |
| tls_mode | No | TLS enforcement mode |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a mutation operation ('update') and mentions the return format ('Returns: shaped domain with updated settings'), but lacks details on permissions required, whether changes are reversible, rate limits, or error conditions. The example adds some context but doesn't fully compensate for the missing 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?
The description is efficiently structured with three sentences: purpose statement, usage guidelines, and return information with an example. Each sentence adds distinct value without redundancy, and the information is front-loaded with the core functionality stated first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 4 parameters, 100% schema coverage, and no output schema, the description provides good context: clear purpose, usage guidelines, return format, and an example. However, without annotations covering safety or behavioral traits, it could benefit from more explicit disclosure about mutation implications or error handling.
Complex tools with many parameters or behaviors need more documentation. 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 description coverage is 100%, providing full documentation for all 4 parameters. The description adds minimal value beyond the schema by mentioning the specific settings ('open/click tracking, TLS mode') and providing an example that illustrates parameter usage, but doesn't explain semantics or constraints not already in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Update domain settings') and resources involved ('open/click tracking, TLS mode'), distinguishing it from sibling tools like 'create_domain', 'delete_domain', 'get_domain', and 'verify_domain' which have different purposes. The verb 'update' is precise and the scope is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance with 'When to use: toggle tracking on/off, or switch between opportunistic and enforced TLS', giving clear scenarios for application. This helps differentiate from alternatives like 'create_domain' for initial setup or 'get_domain' for read-only access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_mailboxA
Update a mailbox's display name, quota, status, or webhook setting. When to use: change ownership label, suspend a mailbox, raise quota. Returns: shaped mailbox with new state. Example: { id: 17, status: "suspended" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Mailbox ID | |
| displayName | No | Display name | |
| quotaBytes | No | Storage quota in bytes | |
| status | No | Mailbox status | |
| webhookEnabled | No | Enable webhook notifications |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns a 'shaped mailbox with new state' and gives an example, which adds useful behavioral context. However, it doesn't mention permissions needed, rate limits, or whether changes are reversible, leaving gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by usage guidelines, return info, and an example—all in four concise sentences with zero waste. Each sentence earns its place by adding distinct value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description does well by explaining purpose, usage, and return behavior. However, it could be more complete by detailing error cases or side effects (e.g., what happens to existing settings not mentioned), given the complexity of updating multiple fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description lists the updatable fields but doesn't add syntax or format details beyond what the schema provides (e.g., quota in bytes, status enum). Baseline 3 is appropriate as 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 clearly states the verb 'update' and the resource 'mailbox', with specific fields listed (display name, quota, status, webhook setting). It distinguishes from siblings like 'create_mailbox' (creation) and 'delete_mailbox' (deletion), making the purpose specific and 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?
The 'When to use' section provides clear context for usage (change ownership label, suspend, raise quota), which helps guide the agent. However, it doesn't explicitly mention when NOT to use this tool or name alternatives (e.g., vs. 'create_mailbox' for new mailboxes), so it lacks full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_segmentA
Rename an existing segment. When to use: clean up segment names. Membership is unaffected. Returns: shaped segment with new name. Example: { id: "seg_abc", name: "Spring 2026 launch (final)" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Segment ID | |
| name | Yes | New segment name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action is a rename operation (implying mutation) and specifies that membership is unaffected, adding useful context. However, it lacks details on permissions, error conditions, or side effects, which are important for a mutation tool without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by usage guidance, return information, and an example. Each sentence adds value without redundancy, making it efficiently structured and appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is reasonably complete: it explains the purpose, usage, and return value. However, as a mutation tool without annotations or output schema, it could benefit from more behavioral details like error handling or side effects to achieve full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with clear documentation for both parameters ('id' and 'name'). The description does not add any additional parameter semantics beyond what the schema provides, such as format constraints or examples for the 'name' parameter, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the specific action ('Rename an existing segment') and resource ('segment'), clearly distinguishing it from sibling tools like 'create_segment' (creation) and 'delete_segment' (deletion). It avoids tautology by not just restating the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool ('clean up segment names') and clarifies what is unaffected ('Membership is unaffected'), which helps differentiate it from tools that modify segment membership. However, it does not explicitly mention when not to use it or name specific alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_templateA
Update an existing template's name, subject, body or variable list. When to use: edit a template in place. The template version is bumped on update. Returns: shaped template with new version. Example: { id: "tpl_abc", subject: "Updated subject" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID | |
| name | No | Template name | |
| subject | No | Email subject line | |
| html | No | HTML body content | |
| text | No | Plain text body content | |
| variables | No | Variable names used in the template |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses important behavioral traits: that this is a mutation operation ('edit a template in place'), that it increments version numbers ('template version is bumped on update'), and what the return value looks like ('shaped template with new version'). However, it doesn't mention permission requirements, rate limits, or error conditions.
Agents need to know what a tool does to the 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 perfectly structured: first sentence states purpose and scope, second provides usage guidance and behavioral detail, third describes return value, and fourth gives a concise example. Every sentence earns its place with zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description does well by explaining the update operation, versioning behavior, and return format. It could be more complete by mentioning authentication requirements or error handling, but given the clear schema and sibling context, it provides sufficient guidance for correct tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 6 parameters thoroughly. The description adds minimal value beyond the schema by listing some updatable fields in the first sentence, but doesn't provide additional syntax, format, or constraint details. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('Update') and resource ('existing template'), and lists the editable fields (name, subject, body, variable list). It distinguishes from sibling tools like 'create_template' (for new templates) and 'duplicate_template' (for copying).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'When to use: edit a template in place' and distinguishes from alternatives by implying this is for modifying existing templates rather than creating new ones (vs. 'create_template') or copying (vs. 'duplicate_template'). It also mentions the version bump behavior, which is a key usage consideration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_webhookA
Edit a webhook's URL, event list, or enabled state. When to use: rotate to a new endpoint, expand/narrow events, or temporarily disable. Returns: shaped webhook with new state. Example: { id: 17, enabled: false }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID | |
| url | No | New webhook URL | |
| events | No | Events to subscribe to | |
| enabled | No | Enable or disable the webhook |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states this is an edit/update operation (implying mutation) and mentions the return format ('shaped webhook with new state'), but lacks details about permissions needed, whether changes are reversible, error conditions, or rate limits. The example helps but doesn't fully compensate for missing behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with three distinct sentences: purpose statement, usage guidelines, and return/example. Each sentence earns its place by adding specific value without redundancy. It's front-loaded with the core purpose and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 4 parameters with 100% schema coverage and no output schema, the description does well by explaining purpose, usage, and return format. However, as a mutation tool with no annotations, it could better address behavioral aspects like permissions or side effects to be fully complete for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters well. The description adds value by grouping parameters into logical categories ('URL, event list, or enabled state') and providing context about what can be edited, but doesn't add syntax or format details beyond the schema. The example illustrates partial parameter usage but not comprehensively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Edit') and resource ('a webhook's URL, event list, or enabled state'), distinguishing it from sibling tools like create_webhook (creation) and delete_webhook (deletion). It precisely defines the scope of modifications possible.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides 'When to use' guidance with three concrete scenarios: 'rotate to a new endpoint, expand/narrow events, or temporarily disable.' This gives clear context for when this tool is appropriate versus alternatives like create_webhook or delete_webhook.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_domainA
Trigger DNS verification for a domain. When to use: user has configured DNS records (SPF/DKIM/DMARC/return-path) and wants PostStack to re-check them. Returns the new status — "verified" means sending is unblocked. Returns: shaped domain with updated status and per-record verified flags. Example: { id: 42 }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Domain ID to verify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool triggers a verification process, returns a new status, and that 'verified' means sending is unblocked. However, it doesn't mention potential side effects (e.g., if verification fails), rate limits, or authentication requirements, leaving some behavioral aspects unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with three sentences: purpose, usage guidelines, and return information. Each sentence adds distinct value without redundancy, and it's front-loaded with the core action. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (verification operation with 1 parameter), no annotations, and no output schema, the description does well by explaining purpose, usage, and return values. However, it could be more complete by detailing error cases or the full shape of the returned domain object beyond status flags.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single parameter 'id' as 'Domain ID to verify'. The description adds minimal value beyond this by providing an example '{ id: 42 }', but doesn't explain parameter semantics further. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Trigger DNS verification for a domain') and distinguishes it from siblings like 'create_domain' or 'update_domain' by focusing on verification rather than creation or modification. It specifies the exact resource (domain) and operation (verification).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'user has configured DNS records (SPF/DKIM/DMARC/return-path) and wants PostStack to re-check them.' This provides clear context and prerequisites, distinguishing it from other domain-related tools like 'create_domain' or 'check_deliverability'.
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.
84 tool updates
v0.2.1- First observed
add_contacts_to_segment - First observed
add_suppression - First observed
broadcast_performance - First observed
cancel_broadcast - First observed
cancel_email - First observed
change_mailbox_password - First observed
check_deliverability - First observed
create_api_key - First observed
create_broadcast - First observed
create_contact - First observed
create_contact_property - First observed
create_domain - First observed
create_mailbox - First observed
create_segment - First observed
create_subscription_topic - First observed
create_template - First observed
create_webhook - First observed
delete_contact - First observed
delete_contact_property - First observed
delete_domain - First observed
delete_mailbox - First observed
delete_segment - First observed
delete_subscription_topic - First observed
delete_template - First observed
delete_webhook - First observed
draft_from_thread - First observed
duplicate_template - First observed
find_non_clickers - First observed
forward_inbound_email - First observed
get_api_key - First observed
get_broadcast - First observed
get_contact - First observed
get_contact_activity - First observed
get_contact_by_email - First observed
get_contact_subscriptions - First observed
get_domain - First observed
get_email - First observed
get_engagement_summary - First observed
get_inbound_email - First observed
get_mailbox - First observed
get_segment - First observed
get_template - First observed
get_webhook - First observed
lint_email - First observed
list_api_keys - First observed
list_broadcasts - First observed
list_contact_properties - First observed
list_contacts - First observed
list_domains - First observed
list_emails - First observed
list_inbound_email_attachments - First observed
list_inbound_emails - First observed
list_mailboxes - First observed
list_segments - First observed
list_subscription_topics - First observed
list_suppressions - First observed
list_templates - First observed
list_webhooks - First observed
preview_email - First observed
publish_template - First observed
remove_contact_from_segment - First observed
remove_suppression - First observed
render_template - First observed
reply_to_inbound_email - First observed
reschedule_email - First observed
revoke_api_key - First observed
search_contacts - First observed
send_batch_emails - First observed
send_broadcast - First observed
send_email - First observed
subscribe_contact_to_topic - First observed
suggest_from_address - First observed
unpublish_template - First observed
unsubscribe_contact - First observed
unsubscribe_contact_from_topic - First observed
update_broadcast - First observed
update_contact - First observed
update_contact_property - First observed
update_domain - First observed
update_mailbox - First observed
update_segment - First observed
update_template - First observed
update_webhook - First observed
verify_domain
TDQS
Scored across 84 tools
Most tools have distinct purposes with clear boundaries, such as create_contact vs. update_contact or send_email vs. send_broadcast. However, some overlap exists between list_contacts and search_contacts, and between cancel_broadcast and cancel_email, which could cause minor confusion for agents selecting between them.
Tool names follow a highly consistent verb_noun pattern throughout, such as create_contact, get_contact, update_contact, and delete_contact. All tools use snake_case with no deviations, making the set predictable and easy to navigate.
With 84 tools, the count is excessive for an MCP server, even for a comprehensive email marketing platform. This volume will overwhelm agents and increase the risk of misselection, as many tools could be consolidated or omitted without losing functionality.
The tool set provides complete CRUD/lifecycle coverage for all core domains (contacts, broadcasts, templates, domains, etc.), including advanced operations like deliverability checks, spam linting, and engagement analytics. No obvious gaps are present, ensuring agents can handle full workflows without dead ends.
Maintenance
Related MCP Connectors
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Shipmail MCP server for AI agent custom-domain email inboxes with REST API and webhooks.
Your agent needs a mailbox of its own — to receive, thread, draft and send, with attachments, without borrowing your personal inbox or your company's SMTP. **What you can ask for** • "Create an inbox for this agent and tell me its address." • "Read the new messages in this thread and draft a reply." • "Send this message with the attachment and wait for the response." • "Search this inbox for everything from that domain." • "Show delivery metrics and the events on this inbox." **How to use it** Point any MCP client at https://mcp.aisa.one/mail/mcp and sign in with OAuth — there is no key to create or paste. 49 tools: create and delete inboxes, list and read messages, raw message bodies, attachments, threads, drafts and draft attachments, send and reply, message search, inbox events, metrics, and list entries — reads and writes. **Why this rather than the source** A real inbox an agent owns, rather than an SMTP credential it borrows from a human. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Find the contact elsewhere in the catalogue, then write to them from here — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/sales/mcp finds the person to write to.
Hosted email for AI agents: create inboxes, send, receive, and reply over MCP with scoped API keys
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI models to read, search, and send emails via IMAP and SMTP protocols. It supports various providers like Gmail and Outlook, allowing for tasks such as retrieving unread messages, searching by sender, and managing mailbox folders.-
- AlicenseAqualityFmaintenanceAn MCP server for the Resend email API, enabling AI assistants to send emails, manage contacts, audiences, and domains through natural language.1823 npmMIT
- AlicenseBqualityCmaintenanceAn MCP server that exposes IMAP operations as tools for AI assistants, enabling email management including listing mailboxes, reading, searching, moving, flagging emails, and creating drafts.717 npmMIT
- AlicenseNot gradedqualityBmaintenanceMCP server that acts as an email gateway for Gmail and Microsoft 365, enabling AI agents to send and read emails via MCP tools, with SMTP/IMAP and REST APIs for email sequencing and automation.1AGPL 3.0