Anima MCP Server
The Anima MCP Server provides tools for AI agents to manage communications, identity, and security. Capabilities include:
Workspace & Usage: Account overview and usage rollups.
Agent Management: Create, list, get, update, delete agents; manage addresses and metadata.
Email: Send, receive, search (semantic/keyword), reply, forward, thread retrieval, attachment download, plus full draft lifecycle.
Domain Management: Register, verify, list, get, update, delete custom sending domains; fetch DNS zone files.
Phone Numbers: List, provision, release numbers with capability filters (SMS/MMS/voice).
Phone Calls: Initiate outbound calls; list, get details (including AI summaries, scores), transcripts, and recordings; list available AI voices.
SMS/MMS: Send SMS/MMS with media; get and list messages; manage conversation threads.
Provisioning Requests: Request, list, check status, and cancel provisioning of vaults or numbers (requires human owner approval).
Credential Vault: Provision vaults; CRUD credentials (logins, cards, identities, notes); search; generate TOTP codes.
Webhooks: Create/update, get, list, delete subscriptions; send test events with authentication configs.
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., "@Anima MCP ServerSend an email to contact@example.com about the project update."
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.
@anima-labs/mcp
MCP (Model Context Protocol) server for Anima -- 58 tools across 10 categories for AI agent communication, identity, and security.
Hosted vs local (which one do I want?)
Anima runs a hosted MCP gateway at https://mcp.useanima.sh/mcp -- nothing to install, always current, and it carries the fullest tool surface (it adds inbox management and other tools beyond this package's 54). If your client speaks remote MCP (Cursor, VS Code, Claude Code --transport http), point it there with Authorization: Bearer ak_... and you're done. See the MCP docs.
This npm package is the stdio bridge for clients without remote-MCP support and for pinned/air-gapped configs. Same platform, same auth, smaller tool set.
anima setup-mcp install --all # hosted gateway (default)
anima setup-mcp install --all --mode stdio # this packageRelated MCP server: OMICall MCP Server
Installation
npm install @anima-labs/mcp
# or
bun add @anima-labs/mcpQuick Start
# stdio mode (default -- for Claude Desktop, Cursor, Windsurf, etc.)
npx @anima-labs/mcp
# HTTP mode (for web integrations)
npx @anima-labs/mcp --http --port=8014
# Selective tool loading (only register specific groups)
npx @anima-labs/mcp --tools=email,vault,phoneEnvironment Variables
Variable | Required | Description |
| No | API server URL (default: |
| Yes | Agent API key ( |
| No | Master key ( |
Selective Tool Loading
Use the --tools flag to load only the tool groups you need. This reduces the tool count exposed to the LLM, which can improve tool selection accuracy and reduce token usage.
npx @anima-labs/mcp --tools=email,vault,phoneAvailable tool groups:
Group | Description |
| Account overview and usage rollups |
| Agent CRUD and address/identity management |
| Email send/receive, threads, drafts, attachments |
| Custom sending domains: DNS, verification, zone files |
| Phone number provisioning and release |
| Outbound calls, transcripts, recordings, voices |
| SMS/MMS send and conversation history |
| Ask your human owner for a vault or phone number |
| Credential vault management and TOTP |
| Webhook subscription management and testing |
If --tools is not provided, all groups are registered (current default behavior).
HTTP Mode
Run the MCP server over HTTP instead of stdio for web integrations:
npx @anima-labs/mcp --http --port=8014The server listens at http://localhost:8014/mcp and expects a Bearer <api-key> authorization header on each request.
Configuration Templates
Claude Desktop
~/.config/claude/claude_desktop_config.json:
{
"mcpServers": {
"anima": {
"command": "npx",
"args": ["-y", "@anima-labs/mcp"],
"env": { "ANIMA_API_KEY": "ak_..." }
}
}
}With selective loading:
{
"mcpServers": {
"anima": {
"command": "npx",
"args": ["-y", "@anima-labs/mcp", "--tools=email,vault,phone"],
"env": { "ANIMA_API_KEY": "ak_..." }
}
}
}Cursor
.cursor/mcp.json:
{
"mcpServers": {
"anima": {
"command": "npx",
"args": ["-y", "@anima-labs/mcp"],
"env": { "ANIMA_API_KEY": "ak_..." }
}
}
}Windsurf
.windsurf/mcp.json:
{
"mcpServers": {
"anima": {
"command": "npx",
"args": ["-y", "@anima-labs/mcp"],
"env": { "ANIMA_API_KEY": "ak_..." }
}
}
}Tool Reference
Workspace (2 tools)
Tool | Description |
| Single-call workspace snapshot: context, send-capability flags, inventory counts, and blockers |
| Usage rollup for a billing period |
Agent (5 tools)
Tool | Description |
| Create a new agent, optionally with metadata and an initial address |
| Get full detail for an agent: settings, metadata, status, addresses, and identities |
| List agents in the current account context with cursor pagination |
| Update an agent's name or metadata, and add/update/delete an address |
| Delete an agent by ID |
Email (13 tools)
Tool | Description |
| Send a new outbound email from the agent mailbox |
| Get full detail for a single email by ID, including metadata and body |
| List emails newest-first with cursor pagination, optionally scoped to one agent |
| Search email by meaning (semantic vector search) or literal keyword |
| Reply to an existing email thread with correct threading headers |
| Forward an existing email to another recipient |
| Fetch all messages in one or more email threads |
| Get a temporary download URL for an email attachment |
| Create a new email draft (composed but not sent) |
| Get full detail for a single draft by ID |
| List email drafts with optional filters |
| Send a draft |
| Discard a draft |
Domain (7 tools)
Tool | Description |
| Register a custom sending domain in the workspace |
| Trigger a verification check after DNS records are configured |
| Get full detail for a domain, including verification and config state |
| List all domains connected to the current workspace |
| Update mutable configuration on a domain |
| Delete a domain from the workspace |
| Get the full DNS zone file for a domain |
Phone (3 tools)
Tool | Description |
| List provisioned phone numbers, optionally filtered by agent |
| Provision a new phone number and assign it to an agent |
| Release a provisioned phone number back to the carrier pool |
Phone Call (6 tools)
Tool | Description |
| Initiate an outbound phone call from an agent (returns a callId immediately) |
| List phone calls with optional filters |
| Get full detail for a call: status, duration, participants, AI summary, and quality score |
| Get the full transcript with speaker labels, timestamps, and confidence scores |
| Get a time-limited download URL for a call recording (WAV) |
| List available AI voices for placing phone calls |
SMS (5 tools)
Tool | Description |
| Send an SMS, or an MMS by passing |
| Get full detail for a single SMS by ID (includes its |
| List SMS messages with optional filters |
| List SMS conversations |
| Get a specific SMS conversation with message history |
Provisioning (4 tools)
An agent cannot provision its own vault or phone number -- vault_provision
and phone_number_provision are master-key-only, and an MCP session is
authenticated as the agent. These tools file the ask instead; the owner decides
in the Anima console.
Approve and decline are deliberately NOT exposed as tools. An MCP tool is something the model can decide to call, and a prompt-injected agent able to approve its own request could grant itself a billable phone number -- exactly the escalation the flow exists to prevent.
Tool | Description |
| Ask your owner to provision a vault or phone number |
| List requests you have filed and their status |
| Check one request; a decline carries the owner's reason |
| Withdraw a pending request you no longer need |
Vault (8 tools)
Tool | Description |
| Provision a credential vault for an agent |
| List credentials in an agent vault with optional type filter |
| Get a single vault credential by ID |
| Create a new credential in an agent vault |
| Update an existing vault credential by ID |
| Delete a credential from vault storage by ID |
| Search vault credentials by keyword across names and content |
| Get the current TOTP code for a credential with a TOTP secret |
Webhook (5 tools)
Tool | Description |
| Create or update a webhook subscription |
| Get a webhook subscription by ID |
| List webhook subscriptions with cursor pagination |
| Delete a webhook subscription by ID |
| Send a test event to verify endpoint reachability and signature verification |
Contributing: the contract gates
Every tool here is a thin client over the Anima REST API, which makes two lies easy
to ship and nearly impossible to notice — both return a green 200:
a tool calling a route the API doesn't have, and
a tool advertising a parameter its route ignores (the API validates with Zod, which strips unknown input, so the server answers as if nothing was wrong and the model believes its filter was applied).
Two CI gates in src/__tests__/integration/contract-parity.test.ts make both
impossible. They check src/tool-routes.ts — where each tool declares the routes
it calls and any param it handles client-side — against
src/__tests__/fixtures/contract-routes.json, a snapshot of the real
@anima/contracts route surface.
Adding or changing a tool means updating its entry in src/tool-routes.ts.
If a gate fails, fix the tool: editing the declaration to match a lie, or parking a
param in clientParams, re-opens the exact hole the gates close.
Refreshing the snapshot (needs a checkout of the anima monorepo — it is private, so CI cannot do this for you):
bun run contracts:refresh -- --anima ../anima # rewrite the snapshot
bun run contracts:check -- --anima ../anima # diff only; non-zero on driftCommunity
Join the Anima Discord to ask questions in #mcp, share what you're building in #showcase, and stay up to date with releases in #announcements.
License
MIT
Available Tools
54 toolsaccount_overviewARead-onlyIdempotent
Single-call workspace snapshot: organization context, credential identity, send-capability flags (canSendEmail / canSendSms), inventory counts (agents, domains, phones), and active blockers. Strict superset of the legacy whoami + workspace_health pair. Use this before any non-trivial workflow to answer 'who am I and can I do X right now?' without paying a real send to find out.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and no destructive behavior. The description adds that the tool returns a 'snapshot' but does not disclose additional behavioral traits beyond what annotations imply, such as caching, rate limits, or dependency on authentication scopes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no fluff: first sentence states purpose and contents, second notes superset relationship, third gives usage guidance. Information is front-loaded and 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?
Given no parameters and existence of an output schema, the description sufficiently covers the tool's usage context. It lists key return categories and advises when to call. Minor omission: does not mention whether the snapshot is real-time or cached, but overall complete enough for an agent to use 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?
The tool has zero parameters, so the input schema is vacuous. Per guidelines, baseline is 4. The description adds meaning about return fields but does not need to explain 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 'Single-call workspace snapshot' and enumerates specific data returned (organization context, credential identity, send-capability flags, inventory counts, active blockers). It distinguishes itself as a strict superset of the legacy whoami and workspace_health tools, making it easy to understand its role among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using the tool before non-trivial workflows to answer identity and capability questions 'without paying a real send to find out'. This provides clear when-to-use guidance and contrasts with alternatives like actually sending an email or SMS.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_createA
Create a new agent with optional metadata, and optionally attach an initial address. Use this when provisioning a new sending identity or automation actor. To add more addresses later, use agent_update.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Agent display name | |
| address | No | Optional initial postal address to attach to the agent on creation. To add more addresses later, use agent_update. | |
| metadata | No | Optional agent metadata as key-value string pairs |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description's 'Create a new agent' aligns. The description adds context by framing the agent as a 'sending identity or automation actor,' which helps the agent understand the implications of creation. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The first sentence states the action and options; the second provides usage context. It is front-loaded and 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 (3 parameters, nested object, optional metadata) and the presence of an output schema, the description covers the key aspects: creation, optional metadata and address, and a pointer to update. It does not explain return values (covered by output schema) and could mention uniqueness constraints, but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds that address is optional and can be attached initially, and references agent_update for later additions. While this provides some extra context, it does not significantly enrich understanding beyond the schema's detailed field 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 action (create), the resource (agent), and optional features (metadata, address). It distinguishes from the sibling tool agent_update by noting it can add addresses later, making the purpose 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?
The description explicitly says when to use the tool: 'when provisioning a new sending identity or automation actor.' It also provides an alternative (agent_update) for adding addresses later. However, it does not explicitly state when not to use it, such as avoiding duplicate names, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_deleteADestructiveIdempotent
Delete an agent by ID. Use this to remove deprecated or compromised agents that should no longer send messages. Cascades to attached addresses, email identities, and phone identities.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Agent ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds critical behavioral detail beyond annotations: 'Cascades to attached addresses, email identities, and phone identities.' Annotations provide destructiveHint but description explains scope of destruction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second adds usage context and cascading effect. 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 delete tool with one parameter and an output schema, the description fully covers purpose, usage, and side effects. No missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'id' with schema description 'Agent ID'. Schema coverage is 100%, so description adds no extra meaning beyond required input. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Delete an agent by ID' with specific verb and resource. Distinguishes from sibling tools like agent_create, agent_get, and agent_list by targeting 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?
Provides explicit use case: 'remove deprecated or compromised agents that should no longer send messages.' Lacks explicit when-not-to-use guidance, but context is clear enough for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_getARead-onlyIdempotent
Fetch full detail for a single agent by ID: settings, metadata, status, and the full addresses[] / emailIdentities[] / phoneIdentities[] lists. Use agent_list to browse multiple agents.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Agent ID. Returns full agent detail including addresses, emailIdentities, and phoneIdentities. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, which are safe. The description adds extra behavioral context about the returned data (full addresses, emailIdentities, phoneIdentities), enhancing transparency without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (one sentence plus a sibling reference), front-loads the purpose, and uses no superfluous words. Every part 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?
Given the output schema exists, the description does not need to detail return values. It covers all necessary context: what the tool does, what fields are included, and how it differs from siblings. This is complete for a simple get-by-id tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%—the schema already describes the 'id' parameter and mentions what it returns. The tool description does not add new meaning beyond what's in the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches full detail for a single agent by ID, listing specific fields (settings, metadata, status, addresses, emailIdentities, phoneIdentities). It also distinguishes the tool from its sibling 'agent_list' which browses multiple agents.
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 tells when to use this tool (fetch full detail for a single agent) and when to use an alternative ('Use agent_list to browse multiple agents'). This provides clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_listARead-onlyIdempotent
List agents in the current account context with cursor pagination. Returns a lightweight per-agent record (addresses are NOT included to avoid N+1 round-trips). Use agent_get for full single-agent detail.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of agents to return. | |
| cursor | No | Pagination cursor from a previous list response. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. The description adds behavioral insight: addresses are excluded to avoid N+1 round-trips, and it returns lightweight records with cursor pagination. This goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The purpose is front-loaded, and the second sentence provides necessary behavioral context. Ideal length.
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 presence of an output schema (indicated), the description fully covers what a list tool requires: resource, scope (current account), pagination method, and data limitations (no addresses). No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-defined. The description mentions 'cursor pagination' and the lightweight nature of results, adding context about usage but not adding new parameter-specific details 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 explicitly states 'List agents in the current account context with cursor pagination,' using a specific verb and resource. It distinguishes from the sibling tool agent_get by noting that addresses are omitted for efficiency, clarifying 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?
Provides clear context for when to use this tool (listing agents) and directs to agent_get for full detail. However, it does not explicitly mention when not to use it or list alternative tools, leaving some implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_updateA
Update an agent's name or metadata, and/or add/update/delete an address. Use addAddress to attach a new address, updateAddress to change fields on an existing one (by addressId), deleteAddressId to remove one. Multiple field-level changes can be combined in a single call.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Agent ID | |
| name | No | Updated agent display name | |
| metadata | No | Updated metadata as key-value string pairs | |
| addAddress | No | Attach a new postal address to this agent. | |
| updateAddress | No | Update fields on an existing address. Pass addressId + the fields to change. | |
| deleteAddressId | No | ID of an address to remove from this agent. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds operational context beyond annotations: it clarifies it modifies the agent (consistent with readOnlyHint=false) and details specific sub-operations including removal. No contradiction with annotations; destructiveHint=false for address removal is reasonable if addresses are not considered core records.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the main action, no filler. Each sentence adds value, efficiently summarizing capabilities and combination possibility.
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 (multiple nested address operations) and presence of an output schema, the description adequately covers the main behaviors. Could mention update concurrency or that name/metadata updates are independent of address changes, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes each parameter. The description adds usage notes (e.g., 'Use addAddress to attach a new address') but does not provide new semantic meaning beyond the schema's descriptions. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool updates an agent's name, metadata, and/or addresses (add, update, delete). It uses specific verbs (update, add, update, delete) and resource (agent), distinguishing it from sibling tools like agent_create, agent_get, agent_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on how to use address sub-operations (addAddress, updateAddress, deleteAddressId) and notes that multiple changes can be combined. However, it does not explicitly contrast with sibling agent tools for when to use this vs. create or delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_createAIdempotent
Register a custom sending domain in the workspace so it can be configured for email traffic. Use this before DNS setup and verification.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain name to add, such as mail.example.com or example.com. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide safety profile (non-destructive, idempotent, not read-only). The description adds lifecycle context: it is a prerequisite for DNS setup and verification. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The description is efficient and front-loaded with the core action.
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 (one parameter) and the presence of an output schema, the description provides sufficient context for invocation. It explains the purpose, timing, and parameter meaning.
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 a clear description of the 'domain' parameter. The description does not add additional 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 clearly states the verb 'Register' and resource 'custom sending domain', and specifies the context 'for email traffic' and sequence 'before DNS setup and verification'. This distinguishes it from siblings like domain_verify and domain_delete.
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 says 'Use this before DNS setup and verification', giving clear usage context. It does not list alternatives or exclusions, but the sibling tool names imply different purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_deleteADestructiveIdempotent
Delete a domain from the workspace when it is no longer needed. Use this to remove old or incorrect domain configurations.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Unique domain ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description repeats the deletion action but adds no behavioral context beyond annotations (e.g., consequences, reversibility). With annotations present, this is sufficient but not enhanced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose. No wasted words. Every sentence adds 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 simple deletion tool with one parameter and an output schema, the description is complete. It clearly states purpose and usage context without needing additional details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (id) with schema description 'Unique domain ID.' Schema coverage is 100%, so the description adds no extra meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (delete), resource (domain), and context (when no longer needed, old/incorrect configurations). Distinguishes from siblings like domain_create or domain_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use ('when no longer needed', 'old or incorrect'), but does not explicitly state when not to use or mention alternatives among siblings. Still adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_getARead-onlyIdempotent
Fetch full detail for a single domain by ID, including verification and configuration state. Use domain_list to browse all domains.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Unique domain ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false. Description adds that the response includes verification and configuration state, which is useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences: first defines purpose and included data, second gives alternative tool. 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 single parameter, present output schema, rich annotations, and sibling context, the description fully covers what an agent needs to know for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema describes the 'id' parameter as 'Unique domain ID.' The description adds no further parameter-specific meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Fetch full detail for a single domain by ID', specifying verb and resource, and adds scope ('including verification and configuration state'). It distinguishes from sibling domain_list by recommending the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool (for a single domain's details) and directs to domain_list for browsing all domains, providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_listARead-onlyIdempotent
List every domain connected to the current workspace (unpaginated). Use this to audit configured sender domains and choose one for follow-up actions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. Description adds 'unpaginated' (all results at once) and scope 'connected to the current workspace', which provide behavioral context beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose. Every sentence adds value: what it does, scope, why to use it. 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 zero parameters, rich annotations, and presence of output schema, the description is complete. It covers purpose, usage context, and key behavioral trait (unpaginated). No gaps for this 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?
Input schema has zero parameters, schema coverage 100%. Per guidelines, 0 parameters earns baseline 4. Description does not need to add parameter info; it correctly highlights that no inputs are required.
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?
Description clearly states verb 'list', resource 'domains', scope 'connected to the current workspace', and property 'unpaginated'. It differentiates from sibling tools like domain_get (single domain) by implying this returns all. The phrase 'audit configured sender domains and choose one for follow-up actions' adds practical purpose.
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 tells when to use: 'audit configured sender domains and choose one for follow-up actions'. Does not mention alternatives or when not to use, but context of sibling tools (e.g., domain_get for single domain) makes usage clear. Slight deduction for lack of explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_updateAIdempotent
Update mutable configuration on a domain. Currently the only updatable field is feedbackEnabled — toggle SES bounce and complaint feedback processing on or off.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Unique domain ID. | |
| feedbackEnabled | No | Enable or disable bounce + complaint feedback processing for this domain. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutability and idempotency. The description adds valuable context by specifying the effect: toggling SES bounce and complaint feedback processing. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The key action and constraint are front-loaded, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, no need to describe return values. The description covers the action and the single updatable field's effect. Missing prerequisites (e.g., domain must exist), but acceptable for a simple update tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description reiterates that `feedbackEnabled` is the only updatable field, but does not add new semantic details 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 it updates mutable configuration on a domain, specifically the `feedbackEnabled` field. It differentiates from sibling tools like domain_create, domain_verify, domain_list, domain_delete, and domain_zone_file by focusing on 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 notes that only `feedbackEnabled` is updatable, guiding when to use this tool. It implies that for other domain updates, no alternative exists, and the context of sibling tools reinforces this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_verifyAIdempotent
Trigger a verification check for a domain after DNS records are configured. Use this to re-run DNS validation and update verification status.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Unique domain ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only, non-destructive, and idempotent behavior. Description adds that it triggers a verification and updates status, but doesn't provide additional behavioral context beyond what annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, concise and front-loaded. No unnecessary words; every sentence adds 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 simple tool with one parameter, annotations, and an output schema (not shown), the description adequately explains the purpose and when to use. Could note if the process is asynchronous, but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'id', which is already described as 'Unique domain ID.' The description does not add any extra meaning or constraints 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 tool triggers a verification check for a domain after DNS records are configured. It uses a specific verb 'Trigger' and distinguishes from sibling tools like domain_create or domain_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on when to use (after DNS records are configured, to re-run validation). Does not explicitly state when not to use or mention alternatives, but the sibling list and description imply it's for verification tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_zone_fileARead-onlyIdempotent
Get the full DNS zone file for a domain. Use this for complete DNS export or to verify all records are correctly configured.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Unique domain ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds that it returns the 'full DNS zone file', but does not disclose any additional behavioral traits such as output size, pagination, or rate limits. With strong annotations, this level of added detail is adequate.
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 consists of two concise sentences. The first sentence provides the core action, and the second adds usage context. Every sentence adds value with 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?
The tool has one required parameter, an output schema exists, and annotations cover safety. The description sufficiently explains the tool's purpose and when to use it. It lacks mention of output format or limitations, but the output schema compensates for that. Overall, it is complete for a simple read-only 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% (the single parameter 'id' has a description of 'Unique domain ID.'). The tool description does not add any further meaning beyond what the schema already provides, so 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 uses a clear verb ('Get') and resource ('full DNS zone file'), and explicitly states two use cases ('complete DNS export', 'verify all records are correctly configured'). It is distinct from sibling tools like domain_get which return domain details rather than the zone file.
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 scenarios for use ('complete DNS export', 'verify all records are correctly configured'). While it does not explicitly state when not to use the tool or name alternatives, the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_attachment_getARead-onlyIdempotent
Get a temporary download URL for an email attachment. Use this when you need direct file access for preview or download.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Attachment ID. Returns a temporary download URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and idempotentHint. The description adds the key behavioral trait that the URL is temporary, which is valuable beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no extraneous words. Front-loaded with purpose, followed by usage context. Every sentence adds 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 simple tool with one parameter and an output schema, the description covers purpose and usage adequately. Could mention expiration details but not critical given 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 single parameter 'id' has 100% schema coverage, so baseline is 3. The parameter description repeats the tool's purpose rather than adding meaningful semantics, so no improvement.
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 'temporary download URL for an email attachment'. It distinguishes this tool from siblings like email_get or email_send by specifying attachment-focused functionality.
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 a clear usage scenario: 'when you need direct file access for preview or download'. It does not mention when not to use or alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_draft_createA
Create a new email draft (composed but not sent). Drafts can be incomplete — missing recipients, subject, or body. Use email_draft_send later to actually deliver, or email_draft_delete to discard.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients. | |
| to | No | Recipient email addresses (may be empty for an incomplete draft). | |
| bcc | No | BCC recipients. | |
| body | No | Plain-text body. | |
| agentId | Yes | Owning agent ID. | |
| subject | No | Subject line. | |
| bodyHtml | No | HTML body. | |
| metadata | No | Arbitrary metadata. | |
| inReplyTo | No | Optional In-Reply-To Message-ID for threading on send. | |
| references | No | Optional References chain for threading. | |
| fromIdentityId | No | Optional EmailIdentity ID to send from. Must belong to this agent and be verified. If omitted, the agent's primary identity is used at send time. Discover available IDs from the `emailIdentities` array returned by agent_get. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read, non-destructive write operation. The description adds context: drafts are not sent, can be incomplete, and the fromIdentityId parameter must belong to agent and be verified. This explains creation behavior beyond annotations, though it could mention side effects (e.g., failure handling).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two clear, front-loaded sentences. No wasted words. Every sentence adds essential information about purpose and usage.
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 11 parameters with 100% schema coverage and an output schema, the description is complete. It explains the tool's role in the draft lifecycle, making it easy for an agent to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value for key parameters: explains fromIdentityId in detail (must belong to agent, verified, discoverable via agent_get) and implies optionality of many fields. This goes beyond 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 'Create a new email draft (composed but not sent).' It uses a specific verb ('Create') and resource ('email draft'), and distinguishes from sibling tools like email_draft_send and email_draft_delete by noting drafts can be incomplete and must be sent or discarded later.
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 says drafts can be incomplete (missing recipients, subject, or body) and directs when to use email_draft_send or email_draft_delete. This gives clear guidance on when to use this vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_draft_deleteADestructiveIdempotent
Discard a draft. Use this to remove drafts that are no longer needed. Use email_draft_send if you want to deliver instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Draft ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, covering the destructive nature. The description adds no further behavioral details beyond confirming deletion, which is adequate but not exceptional.
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 concise with two short sentences, no waste. However, it could be slightly more structured, but it is still effective and 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 tool with one required parameter and a clear purpose, the description is sufficient. The presence of an output schema reduces the need to describe return values. It lacks mention of prerequisites or error states, but these are implied.
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 covers 100% of parameters, so baseline is 3. The description does not add any additional meaning to the 'id' parameter beyond what the schema provides ('Draft 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 'Discard a draft' and 'remove drafts that are no longer needed,' specifying the verb and resource. It also distinguishes itself from the sibling tool email_draft_send, fulfilling the criteria for a score of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool ('remove drafts that are no longer needed') and when not to ('Use email_draft_send if you want to deliver instead'), providing clear usage guidance and an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_draft_getARead-onlyIdempotent
Fetch full detail for a single draft by ID. Use email_draft_list to browse drafts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Draft ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds that it fetches 'full detail' (beyond a list view), which provides some additional behavioral context. However, the description does not significantly extend beyond what annotations already convey.
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 concise, consisting of two short sentences. It front-loads the action and immediately provides cross-reference guidance, with no unnecessary 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 simplicity (single parameter, output schema present, clear annotations, and sibling tools listed), the description provides all necessary context for an agent to correctly select and invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single parameter 'id' (described as 'Draft ID.'). The tool description does not add any additional meaning or guidance beyond the schema's description, so a 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 verb 'Fetch', resource 'full detail for a single draft', and method 'by ID'. It distinguishes from the sibling tool email_draft_list that is for browsing.
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 advises using email_draft_list for browsing drafts, providing clear context when to use this tool versus an alternative. However, it does not cover when not to use or other potential alternatives beyond that single sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_draft_listARead-onlyIdempotent
List email drafts with optional filters. Returns lightweight draft records — use email_draft_get for full detail.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max drafts to return. | |
| cursor | No | Pagination cursor from a previous list response. | |
| agentId | No | Filter drafts by agent ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds context that it returns 'lightweight draft records', clarifying the output nature beyond the annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, with the purpose in the first sentence and a usage hint in the second. No unnecessary words, front-loaded, 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 that an output schema exists and the tool has only three optional parameters with full schema coverage, the description covers the essential behavior and directs users to the get tool for more detail. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well-documented in the schema. The description adds only a generic 'optional filters' statement, providing no additional semantic value beyond what the schema offers.
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 'List email drafts with optional filters', specifying the action (list) and resource (email drafts). It distinguishes from sibling email_draft_get by noting it returns lightweight records and suggests using the get tool for full detail.
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 guidance to use email_draft_get for full detail, offering an alternative. However, it does not explicitly state scenarios where this tool should not be used or prerequisites, but the alternative direction is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_draft_sendA
Send a draft. Atomically converts the draft to a delivered Message + deletes the draft row. The draft must have at least one recipient, a subject, and a body. Returns the newly-created Message.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Draft ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| status | No | |
| messageId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description claims that the tool 'deletes the draft row,' which is a destructive side effect. However, the annotations set 'destructiveHint' to false, contradicting the description. This is a serious inconsistency, resulting in a score of 1.
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 three sentences long, front-loads the action, and contains no extraneous information. Every sentence earns its place by explaining the operation, requirements, and return 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 that an output schema exists, the description does not need to detail return values. It adequately covers the operation (atomic conversion and deletion), preconditions (recipient, subject, body), and the result (new Message). The tool is simple and the description is 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?
The input schema has full coverage (100%) for the single 'id' parameter, described as 'Draft ID.' The description adds no additional meaning to this parameter beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Send a draft.' It specifies the atomic operation: converts draft to delivered Message and deletes the draft row. This distinguishes it from siblings like email_send (sends a new email) and email_draft_create.
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 lists prerequisites: 'The draft must have at least one recipient, a subject, and a body.' This helps the agent know when use is appropriate. However, it does not explicitly mention when not to use or suggest alternatives, but the sibling context provides differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_forwardA
Forward an existing email to another recipient by loading the original content first. Use this to share a prior message while preserving context.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient email address(es) for the forwarded message. | |
| text | No | Optional introductory text to prepend before forwarded content. | |
| agentId | Yes | Agent ID forwarding the email. | |
| originalId | Yes | Original email ID being forwarded. | |
| attachments | No | Optional additional file attachments on the forward (max 20 entries, 25MB total). Original email's attachments are NOT auto-included. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| status | No | |
| messageId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide basic hints (non-readOnly, non-destructive). The description adds that it 'loads the original content first,' but does not detail side effects like marking the original as forwarded or attachment 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?
Two succinct sentences that front-load the action and purpose with no redundant 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?
Covers the core functionality well. Could note that original attachments are not auto-included, but the schema addresses this. Output schema exists, so return value details are not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline applies. The description adds no additional parameter context beyond what the schema already 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 action (forward) and resource (an existing email). It distinguishes from siblings like email_send and email_reply by specifying 'forward' and 'preserving context'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use ('share a prior message while preserving context') but does not explicitly state when not to use or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_getARead-onlyIdempotent
Fetch full detail for a single email by ID, including metadata and body. Use email_list to browse emails in a folder.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Email ID. Returns full metadata and body. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds 'including metadata and body' which indicates the return content but does not disclose additional behavioral traits like error handling, rate limits, or auth requirements. With annotations covering safety, this is adequate but minimal extra 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?
Two concise sentences. The first delivers the core purpose, the second provides sibling tool guidance. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter, presence of output schema, and rich annotations, the description is complete enough. It explains what the tool does, when to use it, and how it differs from a common sibling. No gaps for tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema description for the 'id' parameter is clear. The tool description does not add any additional meaning beyond what the schema already provides, falling to 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?
Description explicitly states 'Fetch full detail for a single email by ID, including metadata and body.' It uses specific verb (Fetch) and resource (email by ID), and distinguishes itself from sibling email_list ('Use email_list to browse emails in a folder').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an alternative use case: 'Use email_list to browse emails in a folder.' This helps the agent decide when to use this tool versus email_list. However, it does not explicitly state when not to use it, though the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_listARead-onlyIdempotent
List emails with cursor pagination, optionally scoped to one agent. Returns lightweight per-email records — use email_get for the full body, or email_search to find a specific message by content. Ordering is not guaranteed: page with cursor rather than assuming the first page is the newest mail.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max emails to return. | |
| cursor | No | Pagination cursor from a previous email_list response. | |
| agentId | No | Only return emails belonging to this agent. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, openWorld, idempotent, non-destructive. Description adds ordering caveat ('Ordering is not guaranteed') and lightweight record hint, beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and key usage. No wasted words. Excellent structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers essential points: purpose, pagination, ordering, alternative tools. Output schema exists. Missing error handling or rate limits but acceptable 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?
Schema covers all 3 parameters with descriptions (100% coverage). Description doesn't add significant meaning beyond restating scope. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List emails with cursor pagination, optionally scoped to one agent.' It distinguishes from siblings by mentioning email_get for full body and email_search for content search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to use this tool vs alternatives (email_get, email_search). Notes ordering is not guaranteed and recommends cursor pagination. Lacks explicit when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_replyA
Reply to an existing email thread by first loading the original message and setting threading headers. Use this when you need a proper in-thread response.
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | Optional HTML content for the reply body. | |
| text | Yes | Plain-text content for your reply message. | |
| agentId | Yes | Agent ID sending the reply. | |
| replyAll | No | When true, include additional participants from the original email. | |
| originalId | Yes | Original email ID being replied to. | |
| attachments | No | Optional file attachments on the reply (max 20 entries, 25MB total). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| status | No | |
| messageId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by disclosing internal behavior: 'by first loading the original message and setting threading headers'. This informs the agent of side effects and workflow, which annotations (readOnlyHint=false, destructiveHint=false) do not fully cover. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action. No wasted words. Efficiently communicates purpose and process.
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 an output schema exists and parameters are fully described in schema, the description covers the essential purpose and behavioral nuance. Could mention prerequisites (e.g., requiring originalId) or error conditions, but not necessary given the simple interface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add extra meaning beyond the schema's parameter descriptions. It does not explain relationships like text vs html or attachment 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 action 'Reply to an existing email thread' and the resource. It distinguishes from siblings like email_send by specifying 'in-thread response' and mentions specific steps (loading original message, setting threading headers).
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 says 'Use this when you need a proper in-thread response', which provides clear context for when to use. It implies alternatives like email_send for new emails, but does not explicitly exclude other cases or mention alternatives like email_draft_create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_searchARead-onlyIdempotent
Search email by MEANING (default) or by literal keyword. Semantic mode uses vector search, so 'the invoice dispute' finds the message even when it never says 'invoice' or 'dispute' — use it when you know what a message was ABOUT but not what it said. Use fulltext mode for exact strings (order numbers, error codes). Prefer this over paging email_list when looking for something specific.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | semantic (default): meaning-based vector search — finds messages that match the IDEA even with no shared keywords. fulltext: literal keyword match, for exact strings like an order number. | |
| limit | No | Max results to return. | |
| query | Yes | What to look for. In semantic mode this is a natural-language description of the message ('the invoice dispute from last week'); in fulltext mode it is matched literally against subject and body. | |
| agentId | No | Only search messages belonging to this agent. | |
| direction | No | Restrict to received (INBOUND) or sent (OUTBOUND) mail. Fulltext mode only. | |
| threshold | No | Semantic mode only: minimum similarity, 0-1 (default 0.7). Lower to widen recall, raise to demand a closer match. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, etc. The description adds valuable behavioral context: semantic uses vector search, default mode, threshold parameter, direction restriction for fulltext. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences with no waste. Front-loaded with the key distinction between modes. 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?
Given the presence of an output schema, the description covers purpose, usage, parameters, and mode selection comprehensively. No significant gaps for a search tool with rich annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100%). The description adds meaning beyond schema: explains semantic vs fulltext for 'query', clarifies 'threshold' is semantic-only, and 'direction' is fulltext-only. Adds concrete use case 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 it searches email by meaning or literal keyword, distinguishing between semantic and fulltext modes. It also tells the agent to prefer this over email_list when looking for something specific, differentiating it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use semantic vs fulltext mode with concrete examples ('the invoice dispute' vs 'order numbers'). Recommends preferring this over paging email_list for specific searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_sendB
Send a new outbound email from the agent mailbox. Use this when you need to compose and deliver a message with optional CC, threading headers.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Optional CC recipient email addresses. | |
| to | Yes | List of recipient email addresses. | |
| bcc | No | Optional BCC recipient email addresses. | |
| body | Yes | Plain-text body content for the email. | |
| agentId | Yes | Agent ID sending the email. | |
| subject | Yes | Subject line for the outgoing email. | |
| bodyHtml | No | Optional HTML body content for rich email formatting. | |
| inReplyTo | No | Optional message ID to set the In-Reply-To header for threading. | |
| references | No | Optional list of message IDs to include in the References header. | |
| attachments | No | Optional file attachments (max 20 entries, 25MB total). Each entry must provide either `content` (base64-inline) or `url` (public URL for server-fetch). Use `contentId` for inline images. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| status | No | |
| messageId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a write operation (readOnlyHint=false), non-idempotent, and possibly state-changing (openWorldHint=true). The description adds no behavioral details beyond sending—it does not mention potential side effects (e.g., rate limits, sending failures, confirmation of delivery) or requirements (e.g., agent email configuration). Given annotations already convey the basic safety profile, the description adds minimal value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that effectively states the tool's purpose and key features. It is front-loaded with the action and resource, with no unnecessary words. Every part 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?
The tool has 10 parameters and an output schema. The description only covers sending with optional CC/threading, omitting details about attachments, HTML content, error handling, or the structure of the response. While the output schema covers return values, the description lacks crucial context for a complex operation, making it adequate but incomplete.
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 each parameter is already documented. The description adds only 'optional CC, threading headers' which maps to cc, inReplyTo, and references. This is helpful but not extensive—baseline 3 is appropriate as the schema carries the bulk of parameter meaning.
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 'Send a new outbound email' which conveys the action and resource. It specifies 'from the agent mailbox' and mentions optional CC and threading headers. However, it does not explicitly differentiate from sibling tools like email_reply or email_forward, though 'new' implies it is not a reply or forward.
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 'Use this when you need to compose and deliver a message with optional CC, threading headers,' providing some usage context. However, it fails to mention when not to use it (e.g., for replies or forwards) and does not list alternative tools, leaving the agent to infer differentiation from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_thread_getARead-onlyIdempotent
Fetch all email messages in one or more threads. Pass id for a single thread or ids for multiple. Returns messages ordered within each thread. Uses the messages endpoint filtered by threadId + channel=EMAIL under the hood.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Single thread ID to fetch. Pass either `id` or `ids`. | |
| ids | No | Multiple thread IDs to fetch in parallel. Pass either `id` or `ids`. | |
| limit | No | Optional max messages per thread. | |
| agentId | No | Optional agent scope filter (only return messages owned by this agent). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context: messages are ordered within each thread, and it uses the messages endpoint with threadId+channel=EMAIL filter. No contradictions.
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 three sentences, front-loaded with the core purpose, and contains no redundant information. Every sentence adds 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?
With an output schema present and annotations covering safety, the description is fairly complete. It covers fetching single/multiple threads, ordering, and the underlying endpoint. Minor gap: no explicit guidance on providing both `id` and `ids` simultaneously (though schema implies exclusivity).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described. The description reinforces the `id` vs `ids` usage but adds no new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Fetch', the resource 'all email messages in one or more threads', and distinguishes between single and multiple threads via `id` vs `ids`. It differentiates from sibling tools like email_get (single message) and email_attachment_get (attachments).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains to use this tool for fetching email messages in threads, but does not explicitly state when not to use it or recommend alternatives (e.g., for a single message use email_get). Context is clear but exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_call_createA
Initiate an outbound phone call from an agent (REST-style: returns a callId immediately). The agent must have a provisioned phone number. For real-time streaming of the call back through the tool invocation, use the hosted MCP server (mcp.useanima.sh) where this tool stays open for the call's lifetime.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Destination phone number in E.164 format (e.g. +14155551234). | |
| tier | No | Voice quality tier (default: basic). | |
| agentId | No | Agent ID to call from (defaults to current agent if using an agent key). | |
| fromNumber | No | Source number to call from (defaults to agent's primary number). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| status | No | |
| messageId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint false) and non-destructiveness. The description adds value by explaining the immediate return vs streaming behavior, which is beyond annotations. It could mention potential side effects like call charges, but current info is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the core action and return type, then provide an alternative usage and prerequisite. No wasted words, effective structure.
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 complete schema descriptions and annotations, the description covers the key output (callId) and prerequisite. It lacks some context like permissions or error scenarios, but overall is sufficient for a tool with high schema coverage.
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 has 100% coverage with descriptions for all parameters. The tool description does not add new parameter-level details beyond the schema, so it meets the baseline 3 without surpassing it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it initiates an outbound phone call and returns a callId immediately. It distinguishes the REST-style behavior from the streaming MCP version, providing specificity beyond 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 mentions the prerequisite of a provisioned phone number and contrasts the two invocation modes (REST vs streaming). However, it does not explicitly state when not to use this tool relative to siblings, though the unique action makes that less critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_call_getARead-onlyIdempotent
Get full detail for a single phone call: status, duration, participants, tier, AI-generated summary (one-liner, topics, action items, decisions, open questions, next steps), and quality score. The summary is generated once on first read after post-call processing and cached.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The call ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds the important behavior that the AI summary is generated once on first read and cached, providing extra context not covered by 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?
Two sentences with no wasted words. The first sentence front-loads the purpose and key contents. Every part adds 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 simple read-only tool with one parameter and an output schema, the description covers the return contents and a behavioral nuance (summary caching). Complete enough without redundancy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with description for the single parameter 'id'. The description does not add additional meaning beyond the schema's 'The call ID.' 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 retrieves full detail for a single phone call, listing specific fields (status, duration, participants, etc.). It distinguishes itself from siblings like phone_call_list (multiple calls) and phone_call_transcript_get (transcript only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for individual call details but does not explicitly state when to use this tool versus alternatives like phone_call_list or phone_call_create. No guidance on prerequisites or context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_call_listARead-onlyIdempotent
List phone calls with optional filters. Returns lightweight call records — for full call detail including summary and score, use phone_call_get.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default: 20). | |
| offset | No | Offset for pagination. | |
| status | No | Filter by call state (INITIATING, RINGING, ACTIVE, ENDED, etc.). | |
| agentId | No | Filter by agent ID. | |
| direction | No | Filter by call direction. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations fully cover safety/idempotency (readOnlyHint, destructiveHint, etc.). Description adds minor context ('lightweight records') but doesn't disclose behavioral nuances beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff, front-loaded with purpose. Every word 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?
Given rich annotations, complete schema, output schema present, and a clear pointer to sibling for depth, the description is fully adequate for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage; all 5 parameters are well-documented in the schema. Description adds no additional parameter meaning.
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?
Description clearly states 'List phone calls' (verb+resource) and distinguishes from sibling 'phone_call_get' which provides full detail. No 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?
Explicitly mentions alternative for full detail: 'for full call detail... use phone_call_get'. Provides good usage context, though not exhaustive when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_call_recording_getARead-onlyIdempotent
Get a time-limited download URL for a call recording (WAV format). The URL expires after 1 hour. Recording must have been enabled during the call.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The call ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe, read-only, and idempotent behavior. The description adds valuable behavioral details beyond annotations, such as the 1-hour URL expiry and WAV format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose, and each sentence adds necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all essential aspects: purpose, format, expiry, and precondition. The output schema is indicated as present, so return values are documented externally.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter ('id') which is already fully described in the schema as 'The call ID.' The description does not add additional meaning or context for the parameter, meeting the baseline given 100% 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 it gets a time-limited download URL for a call recording in WAV format, distinguishing it from siblings like phone_call_get and phone_call_transcript_get.
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 specifies the precondition that recording must be enabled, providing clear guidance on when to use. However, it does not explicitly mention alternatives or when not to use, such as when a transcript is needed instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_call_transcript_getARead-onlyIdempotent
Get the full transcript of a phone call with speaker labels, timestamps, and confidence scores. Available after the call ends and transcription completes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The call ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description adds timing constraints (available after call ends and transcription completes) and specifies data fields (speaker labels, timestamps, confidence scores), providing useful 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 two sentences, front-loaded with the action and key deliverables, with no extraneous 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 low complexity (single parameter, output schema present), the description sufficiently covers what the tool does and when it is available, though it could briefly mention the output format or link to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter 'id' is simply described as 'The call ID.' The description does not add further semantic guidance, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool retrieves a full transcript with speaker labels, timestamps, and confidence scores, clearly distinguishing it from sibling tools like phone_call_get (metadata) and phone_call_recording_get (audio).
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 mentions the prerequisite that the call must have ended and transcription completed, but does not explicitly guide when to use this tool versus siblings or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_number_listARead-onlyIdempotent
List provisioned phone numbers, optionally filtered by agent. Each result includes status and capability flags (sms/mms/voice).
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | No | Filter by agent. Omit to list all phone numbers in the workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint=false, indicating a safe read operation. The description adds that results include status and capability flags but does not disclose other behavioral traits like pagination or rate limits. Given annotations cover safety, the description's additional value is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with two clauses, highly concise and front-loaded with the core action. Every word contributes meaning with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with one optional parameter and an output schema (indicated by context signals), the description covers the key aspects: listing, optional filtering, and result content. It does not mention pagination or ordering, but given the openWorldHint and output schema, this is adequate. Slight gap could be addressed but overall 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?
The input schema fully describes the single parameter 'agentId' with a clear description. The tool description does not add any extra meaning beyond what the schema provides, and schema coverage is 100%, so 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 explicitly states 'List provisioned phone numbers' with optional filtering, clearly distinguishing it from sibling tools like phone_number_provision and phone_number_release. It also mentions that results include status and capability flags, adding specificity.
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 indicates when to use the tool ('List provisioned phone numbers') and notes the optional agent filter. However, it does not explicitly state when not to use it or mention alternatives (e.g., phone_number_provision for creating numbers). The usage context is clear but lacks exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_number_provisionA
Provision a new phone number from the carrier pool and assign it to an agent. Note: provisioning a number costs money on the underlying carrier; do not call speculatively. Use countryCode / areaCode / capabilities to constrain selection.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Agent ID to assign the provisioned phone number to. | |
| areaCode | No | Preferred area code for the phone number. | |
| countryCode | No | ISO 3166-1 alpha-2 country code for number selection (default US). | |
| capabilities | No | Optional capability list (sms, mms, voice) the number must support. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds important behavioral insight: provisioning costs money and is not to be done speculatively. Annotations already indicate non-readOnly and non-idempotent, but description provides real-world consequence. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no fluff. The cost warning is essential and placed immediately after the main action.
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 output schema exists and annotations are present, description covers cost, constraints, and assignment adequately. Minor omission: no mention of idempotency or response details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description reinforces how to use countryCode, areaCode, capabilities to constrain selection, but does not add new meaning beyond 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?
Description clearly states 'Provision a new phone number from the carrier pool and assign it to an agent', with a specific verb and resource, and distinguishes from sibling tools like phone_number_list and phone_number_release.
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 warns against speculative calls due to cost, and advises using parameters to constrain selection. Does not explicitly name alternative tools but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phone_number_releaseADestructiveIdempotent
Release a previously provisioned phone number back to the carrier pool. Use this when cleaning up unused numbers. Released numbers cannot be recovered.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Agent ID that currently owns the phone number. | |
| phoneNumber | Yes | E.164 formatted phone number to release. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true and readOnlyHint=false. The description adds valuable context: 'Released numbers cannot be recovered.' This reinforces the destructive nature and explains the consequence beyond the annotation flags.
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 only two sentences, no wasted words. Every sentence adds essential information: purpose, usage context, and irreversible consequence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential aspects: what it does, when to use, and the irreversible outcome. Given the output schema exists (to describe return value), the description is complete enough for a simple resource release operation. Minor gap: no mention of success confirmation 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 input schema already provides clear descriptions for both parameters (agentId and phoneNumber). The description does not add additional meaning beyond the schema, which is adequate for a simple tool with 100% 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 ('Release'), the resource ('provisioned phone number'), and the destination ('back to the carrier pool'). It immediately distinguishes from related tools like phone_number_provision.
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 when to use ('cleaning up unused numbers') and a crucial warning ('Released numbers cannot be recovered'). It could be improved by explicitly mentioning alternatives (e.g., if you want to reassign the number, use a different tool), but the given context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sms_getARead-onlyIdempotent
Fetch full detail for a single SMS by ID (includes its threadId for joining the conversation). Use sms_list to browse multiple SMS messages.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | SMS message ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare safety profile (read-only, idempotent, non-destructive). Description adds value by disclosing that the result includes threadId for joining conversations, beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences, front-loaded with purpose. No wasted words; every sentence adds 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 simplicity (1 param, no nesting, output schema present, rich annotations), the description fully covers what an agent needs to know for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with a clear description for the single parameter. Description adds no extra param info, but schema is sufficient; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb ('Fetch'), resource ('full detail for a single SMS'), and key differentiator ('includes its threadId'). Distinguishes from sibling sms_list by specifying 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?
Explicitly tells when to use this tool vs sibling ('Use sms_list to browse multiple SMS messages'). Implies prerequisite of having an ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sms_listARead-onlyIdempotent
List SMS messages with optional filters. Each result includes its threadId for joining the conversation. Use sms_get for full single-message detail.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max SMS messages to return. | |
| cursor | No | Pagination cursor from a previous list response. | |
| agentId | No | Filter SMS by agent ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is clear. The description adds that each result includes its threadId for joining conversations, which is helpful. However, it does not disclose pagination behavior (e.g., cursor usage for next page) or the overall response structure, leaving some behavioral details unaddressed.
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 consists of two concise sentences with no redundant information. The first sentence front-loads the primary purpose, and the second adds a key behavioral detail (threadId) and a pointer to an alternative tool. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description is not required to detail return values. It mentions threadId inclusion, which is important for joining conversations. However, it does not mention pagination or cursor mechanics, which are common in list endpoints. Given the annotations and schema, this is a minor gap, making the description slightly incomplete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter described in the schema (limit, cursor, agentId). The description does not add any additional meaning or constraints beyond the schema, so it meets the baseline expectation but provides no extra value for 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 'List SMS messages with optional filters,' using a specific verb (list) and resource (SMS messages). It also distinguishes from the sibling tool sms_get by directing users to 'Use sms_get for full single-message detail.' This clearly defines scope and 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 context for when to use this tool (listing with filters) and directs to sms_get for full detail. However, it does not mention sms_thread_list for listing messages within a thread, which is a sibling tool. This omission leaves a minor ambiguity for users needing thread-specific listings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sms_sendA
Send an SMS to a phone number, or an MMS by passing mediaUrls. The agent must have a provisioned phone number. Use this for transactional texts or conversational messaging.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient phone number in E.164 format (e.g. +14155551234). | |
| body | Yes | Message body. SMS character limits apply (~160 chars per segment). | |
| agentId | Yes | Agent ID sending the SMS. The agent must have a provisioned phone number. | |
| mediaUrls | No | Optional array of media URLs for MMS. Pass one URL for a single image/file; multiple for multi-part MMS. Carrier limits apply. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| status | No | |
| messageId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, which are consistent with sending messages. The description adds the prerequisite of a provisioned phone number but does not disclose rate limits, potential costs, or how the tool handles failures. Given the annotations already provide a baseline, the description offers moderate additional 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 three sentences, front-loaded with the primary action, and each sentence adds useful information without redundancy. It is efficient but could be slightly more concise by combining the first and third sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers basic usage and purpose, but lacks information on error handling, idempotency (though annotations say false), and response details. Since an output schema exists but is not provided, the description carries the burden of explaining return values; it does not mention what the tool returns. Completeness is adequate but not thorough.
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 each parameter is documented. The description adds value by clarifying that passing mediaUrls turns the message into an MMS, and mentions SMS character limits, but these are already present in the schema descriptions. Therefore, the description adds only minor semantic insight 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 identifies the verb 'send', the resource 'SMS/MMS', and distinguishes between SMS and MMS by mentioning mediaUrls. It also specifies the use case for transactional or conversational messaging, making it distinct from sibling tools like email_send or phone_call_create.
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 states to use the tool for 'transactional texts or conversational messaging' and notes the prerequisite that the agent must have a provisioned phone number. However, it does not explicitly exclude cases where alternative tools (e.g., email_send) would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sms_thread_getARead-onlyIdempotent
Get a specific SMS conversation with message history. Use sms_thread_list to find IDs. Returns messages in the thread ordered by time.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Thread ID (use sms_thread_list to find IDs). | |
| limit | No | Max messages to return in the thread. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the description doesn't need to cover safety. It adds value by stating 'Returns messages in the thread ordered by time,' which reveals ordering behavior. This is useful context beyond what annotations provide. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary purpose, and includes the key usage hint. Every sentence contributes essential information—no fluff. It is 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 simplicity (2 parameters, low complexity), the presence of annotations covering safety, and an output schema (so return values need no explanation), the description is complete. It includes the prerequisite (thread ID from sms_thread_list) and the ordering of results, covering what an agent needs 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 baseline is 3. The description does not add new meaning to parameters beyond what is in the input schema. For 'id,' it repeats the schema's note about using sms_thread_list, and 'limit' is not mentioned at all. Thus, no additional semantic value is provided.
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 'Get a specific SMS conversation with message history,' which is a specific verb ('Get') and resource ('SMS conversation with message history'). It clearly distinguishes from the sibling tool sms_thread_list by directing users to use sms_thread_list to find IDs, indicating this tool is for retrieval of a known thread.
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: 'Use sms_thread_list to find IDs.' This tells the AI agent when to use this tool (after obtaining a thread ID) and mentions a prerequisite step. However, it does not explicitly state when not to use it or provide alternatives beyond sms_thread_list, which would have made it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sms_thread_listARead-onlyIdempotent
List SMS conversations. Optionally filter by agent_id to see conversations for a specific agent. Each conversation is a thread between your number and an external contact. Returns thread summaries with last message snippet + participant address.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max thread summaries to return. Defaults to 20. | |
| offset | No | Pagination offset (skip this many threads from the start). | |
| agentId | No | Filter conversations by agent ID. Omit to see threads across all agents you have access to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds return format details (last message snippet, participant address) but does not disclose behavioral traits beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with clear front-loading: 'List SMS conversations.' Efficient and no wasted words, though slightly more detail could be integrated.
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 listing tool with good annotations and schema, the description covers the core purpose, return format, and optional filter. Pagination details are in the schema, so this is adequately 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 coverage is 100%, so the description's parameter info is redundant with the schema. The description adds minimal new meaning beyond restating parameter purposes.
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', the resource 'SMS conversations (threads)', and distinguishes it from sibling tools like sms_list (individual messages) by specifying that it returns thread 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 implies usage for listing conversations and optionally filtering by agent, but does not explicitly state when to use this tool vs alternatives like sms_get or sms_list, nor does it provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usage_overviewARead-onlyIdempotent
Usage rollup for a billing period. Returns counters keyed by usage type (e.g. 'email_sent', 'sms_sent', 'voice_call_minutes') plus the latest update timestamp. Defaults to the current calendar month in UTC when period is omitted. Use to answer 'where am I against my tier limits?' without paying for per-event detail.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Billing period in YYYY-MM format (e.g. '2026-05'). Defaults to the current calendar month in UTC. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, etc. Description adds that result includes counters keyed by usage type and latest update timestamp, plus default period behavior. Adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with main purpose, no unnecessary words. 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 low complexity (one optional param, read-only aggregate) and presence of annotations and output schema, the description is complete. It explains return type, default behavior, and use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and includes description for the only parameter (period). Description repeats the schema's default behavior but adds no new semantic information. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it is a usage rollup for a billing period returning counters by type and timestamp. The verb 'returns' and resource 'usage rollup' are specific and distinguish it from siblings (which are about email, phone, vault, etc.).
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 tells when to use: to answer 'where am I against my tier limits?' without per-event detail. Implicitly suggests not to use when per-event data is needed. No explicit when-not or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_credential_createA
Create a new credential in an agent vault. Pass type plus the matching payload block (login / card / identity / notes). The response is masked — the caller already has the plaintext it just sent, so re-disclosing through MCP would only expose the LLM to its own input.
| Name | Required | Description | Default |
|---|---|---|---|
| card | No | Card payload for card-type credentials. | |
| name | Yes | Human-readable credential name. | |
| type | Yes | Credential type. | |
| login | No | Login payload for login-type credentials. | |
| notes | No | Optional secure note text. | |
| fields | No | Optional custom fields. | |
| agentId | Yes | Agent ID that owns the new credential. | |
| favorite | No | Optional favorite flag. | |
| identity | No | Identity payload for identity-type credentials. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful context beyond annotations by explaining that the response is masked because the caller already has the plaintext. This addresses data handling and privacy considerations, which annotations alone do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a distinct purpose: stating the action, providing usage guidance, and explaining response masking. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers core functionality and response masking. Given the complexity (9 parameters, nested objects) and the existence of an output schema, it provides sufficient information for an AI agent to use the tool correctly, though it could mention prerequisites like vault existence.
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 description specifies that only one payload block (login/card/identity/notes) should be passed based on type, which is a key relationship not explicitly stated in the input schema. This adds structure and clarity beyond the individual parameter 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 'Create a new credential in an agent vault' with specific verb and resource. It also mentions the need to pass `type` and matching payload block, which distinguishes it from sibling tools like vault_credential_get or vault_credential_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (when creating a credential) but does not explicitly mention when not to use or compare with alternatives like vault_provision or vault_credential_update. The guidance on passing the correct payload block is helpful but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_credential_deleteADestructiveIdempotent
Delete a credential from vault storage by ID. Use this to remove obsolete or compromised secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Credential ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, so the description's addition of 'remove obsolete or compromised secrets' adds minimal extra behavioral context. It does not disclose whether the deletion is permanent, any authorization requirements, or error handling. With annotations covering the destructive nature, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two short sentences. The first sentence immediately states the action and resource, front-loading the key information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter delete tool with good annotations and an output schema, the description is adequately complete. It tells what it does, when to use it, and explains the parameter sufficiently. Minor gap: it could mention the irreversible nature, but annotations already signal destructiveness.
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 covers the single parameter 'id' with a description 'Credential ID.' (100% coverage). The tool description does not add any further meaning, such as format or source, so it meets the baseline but adds no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete', the resource 'credential from vault storage', and the scope 'by ID'. It distinguishes the tool from siblings like vault_credential_create, vault_credential_update, and vault_credential_list by specifying the deletion 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?
The description provides clear usage context with 'Use this to remove obsolete or compromised secrets.' It implies when to use the tool but does not explicitly state when not to use it or suggest alternatives, though for a delete operation this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_credential_getARead-onlyIdempotent
Get a single vault credential by ID. Sensitive fields (passwords, tokens, SSNs, CVV) are masked. To use the plaintext value for autofill or as an upstream credential, mint a vault token at the credential broker — the LLM never sees the secret directly.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Credential ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds key behavioral details beyond annotations: sensitive fields are masked, and the LLM never sees secrets directly. Annotations already indicate read-only and idempotent, but description explains the masking and security model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, then essential behavioral note and alternative usage. No fluff, 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?
Given simple tool with rich annotations and output schema, the description covers purpose, security behavior, and alternative path. Completely adequate for agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter 'id' with schema coverage 100%. Description adds context by explaining that the output masks sensitive fields, which indirectly clarifies parameter impact on response. Adds value beyond 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?
Clearly states 'Get a single vault credential by ID.' Differentiates from sibling tools like vault_credential_list and vault_credential_search by specifying singular retrieval and unique identifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use an alternative (credential broker) for plaintext values, but does not contrast directly with sibling tools like vault_credential_get_totp or vault_credential_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_credential_get_totpARead-only
Get the current TOTP code for a credential that has a TOTP secret configured. Use for time-based one-time passcode login flows. Returns the live 6-digit code derived from the stored secret — the secret itself is never disclosed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Credential ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true and destructiveHint=false. The description adds valuable context: it returns a live 6-digit code and states that the secret itself is never disclosed, which is important for security-conscious agents. This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no fluff. First sentence states the core purpose, second provides critical behavioral insight. Front-loaded with purpose, every word 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?
Given the presence of an output schema (not shown here) and comprehensive annotations, the description covers the tool's function, usage context, and key behavioral trait (secret never disclosed). It could mention that the credential must have a TOTP secret configured, but this is implied by 'has a TOTP secret configured'. Overall adequately 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 coverage is 100% with the single parameter 'id' described as 'Credential ID.' The description does not add any additional semantic detail (e.g., format, where to obtain the ID). Baseline is 3 given coverage, and no extra value beyond 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 gets the current TOTP code for a credential with a TOTP secret. It specifies the verb 'Get' and the resource 'current TOTP code', and differentiates from sibling tools like vault_credential_get (which retrieves the credential object).
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 says 'Use for time-based one-time passcode login flows', providing clear context for when to invoke this tool. While it does not list exclusions or alternatives, the sibling tools are mostly unrelated (emails, phones, agents), so the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_credential_listARead-onlyIdempotent
List every credential in an agent vault. Use this to browse stored secrets before reading, updating, or deleting entries. Each item carries a type, so filter the returned list client-side. Sensitive fields in the response are masked.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Agent ID whose vault credentials should be listed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so agent knows safety. Description adds value by stating sensitive fields are masked in response, which annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with distinct purpose: action+resource, usage guidance, and behavioral note. No wasted words, front-loaded with 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?
Given the presence of output schema (so return values are documented), annotations covering safety, and the parameter well-documented, the description adds complete context: purpose, usage, and masking behavior. Nothing missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for the one parameter (agentId). Description does not add additional meaning beyond the schema, so 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 uses a specific verb 'List' and resource 'credentials in an agent vault', and differentiates from siblings by stating it's for browsing before read/update/delete, which is distinct from get, create, search, etc.
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 says 'Use this to browse stored secrets before reading, updating, or deleting entries', providing clear context. Also advises client-side filtering by type. Does not mention when not to use, but context implies alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_credential_searchARead-onlyIdempotent
Search vault credentials by keyword across names and content. Use this when you know part of the name, URL, or username but not the exact credential ID. Different access pattern from vault_credential_list — list is paginated browsing, search is text-query lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional credential type filter. | |
| search | Yes | Search text matched against credential names and content. | |
| agentId | Yes | Agent ID whose vault to search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds that the tool searches across names and content, which is consistent. It does not contradict annotations and adds value by clarifying the search 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?
The description is two sentences long, front-loaded with the core purpose, and every sentence adds value. No redundant or unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the comprehensive annotations, full schema coverage, and presence of an output schema, the description is complete. It addresses the most relevant sibling tool and provides sufficient context for an agent 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 each parameter is already documented. The description adds context for the 'search' parameter by explaining typical use cases (name, URL, username) and distinguishing from list. This enhances understanding 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 (search), resource (vault credentials), and scope (by keyword across names and content). It distinguishes from the sibling vault_credential_list by specifying different access patterns: paginated browsing vs. text-query 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?
Explicitly states when to use: when you know part of name, URL, or username but not exact ID. Also contrasts with vault_credential_list, guiding the agent away from incorrect tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_credential_updateAIdempotent
Update an existing vault credential by ID. Use to rotate passwords or revise stored details. Response masked — caller already has plaintext for fields they just sent.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Credential ID to update. | |
| card | No | Optional updated card payload. | |
| name | No | Optional updated credential name. | |
| login | No | Optional updated login payload. | |
| notes | No | Optional updated secure note text. | |
| fields | No | Optional updated custom fields. | |
| favorite | No | Optional updated favorite flag. | |
| identity | No | Optional updated identity payload. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by noting 'Response masked — caller already has plaintext for fields they just sent'. Annotations already indicate readOnlyHint=false, idempotentHint=true, destructiveHint=false, and description is consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with key purpose. No unnecessary 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?
Covers core purpose and response masking. Given complexity (8 params, nested objects, output schema exists), description is adequate but could briefly explain partial update semantics.
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 parameters are well-documented in schema. Description adds minimal parameter context beyond purpose. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Update an existing vault credential by ID', specifying verb and resource. It distinguishes from sibling tools like create, get, delete, search, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides specific use cases: 'rotate passwords or revise stored details'. While it doesn't explicitly exclude other uses or mention alternatives, the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_provisionAIdempotent
Provision a credential vault for an agent. Required before vault_credential_create can be called against a freshly-created agent — without a vault, credentials have nowhere to live. Idempotent: returns the existing vault if one already exists. Master-key only.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | Agent ID to provision a vault for. Master-key only. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint and destructiveHint. The description adds value by explaining the prerequisite context and specifying 'Master-key only' for authorization. It does not contradict annotations; it reinforces idempotency and provides additional behavioral context beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main action, and every sentence contributes essential information: purpose, prerequisite, and idempotency/access. 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 simplicity (single parameter, idempotent, non-destructive) and the presence of an output schema, the description covers purpose, usage context, idempotency, and access. It lacks mention of error handling or side effects, but those are minimal here. Overall, it is sufficiently 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 coverage is 100% with a description for agentId. The tool description repeats the 'Master-key only' note from the schema and adds the prerequisite context but does not provide significant additional meaning beyond what the schema already offers. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provisions a credential vault for an agent, specifies it is a prerequisite for vault_credential_create, and distinguishes it from sibling tools like vault_credential_create. It includes idempotent behavior and access restriction ('Master-key only'), 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 states when to use: before vault_credential_create on a freshly-created agent. It also notes idempotency, allowing safe multiple calls, and restricts usage to master-key holders. While it does not list explicit alternatives, the context is clear and the prerequisite relationship with vault_credential_create is highlighted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voice_listARead-onlyIdempotent
List available AI voices for placing phone calls. The catalog is multilingual — filter by language or gender. Each voice includes descriptive metadata and a vendor-neutral audio preview URL, plus the voice ID needed for phone_call.
| Name | Required | Description | Default |
|---|---|---|---|
| gender | No | Filter by voice gender. | |
| language | No | Filter by language code (e.g. 'en', 'es', 'ja'). The catalog is multilingual. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds context about included metadata and preview URL, but the annotations carry most of the transparency burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The first sentence states purpose, the second adds 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?
Given the presence of an output schema and rich annotations, the description provides sufficient context about return values (metadata, preview URL, voice ID). Minor gap: does not clarify default behavior if no filters are applied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters have descriptions. The description reinforces that filters exist but adds no new details 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 tool lists AI voices for phone calls, mentions multilingual catalog and filtering options, and distinguishes it from siblings like phone_call_create and phone_call_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for selecting a voice before creating a phone call, and mentions filtering, but does not explicitly state when not to use it or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webhook_deleteADestructiveIdempotent
Delete a webhook subscription by ID. Permanently removes the configuration and stops future deliveries. To temporarily pause without deleting, use webhook_set with { id, active: false }.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds useful context about permanence and stopping deliveries, though the core behavior is already captured by 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?
Two sentences efficiently convey the action and an alternative, with no 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 simple deletion tool with one required parameter and annotations covering safety, the description provides complete context: what it does, the effect, and an alternative. No 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?
The single parameter 'id' is already described in the schema as 'Webhook ID', and the description does not add further semantic details. With 100% schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and resource ('webhook subscription') and distinguishes itself from the sibling tool 'webhook_set' for pausing, making its purpose very clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (to delete permanently) and when to use an alternative (webhook_set for pausing), providing clear usage guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webhook_getARead-onlyIdempotent
Get a webhook subscription by ID. Returns the full configuration (URL, subscribed events, active state, description).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the description does not need to reinforce safety. The description adds that it returns the full configuration, which is consistent but not additional behavioral context beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first clearly states purpose, second lists return values. No wasted words, front-loaded with key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description succinctly summarizes the output fields, and since an output schema exists, it provides enough high-level context for an agent to understand what the tool returns without needing full schema details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage with a single parameter 'id' described as 'Webhook ID'. The description mentions 'by ID' but does not add extra meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'webhook subscription by ID', and explicitly lists the returned fields (URL, subscribed events, active state, description), distinguishing it from siblings like webhook_list (list all) and webhook_set (create/update).
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 implicitly indicates this tool is for retrieving a specific webhook by ID, but does not explicitly state when not to use it or compare with alternatives like webhook_list. However, the sibling context makes the use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webhook_listARead-onlyIdempotent
List webhook subscriptions for the calling org with cursor pagination. Use to enumerate existing webhooks before set/delete operations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of webhooks to return (1-100) | |
| cursor | No | Pagination cursor from a previous list call |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| items | No | |
| total | No | |
| cursor | No | |
| has_more | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds value by specifying cursor pagination and org-level scoping. It does not mention rate limits or error behavior, but these are less critical given the rich 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?
Two sentences with no unnecessary words. The first sentence states purpose and mechanism; the second provides usage context. 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 simplicity (list with pagination), the presence of output schema, and full parameter coverage in schema, the description is complete. It adds the crucial usage context and scope, leaving no obvious gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters (limit, cursor) having clear descriptions. The tool description does not add any additional parameter semantics beyond what the schema already provides. 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 verb 'List', the resource 'webhook subscriptions', and the scope 'for the calling org with cursor pagination'. It distinguishes from siblings by mentioning 'before set/delete operations', referencing webhook_set and webhook_delete.
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 says when to use this tool: 'Use to enumerate existing webhooks before set/delete operations.' This provides clear guidance on when to invoke this tool versus alternatives like webhook_set or webhook_delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webhook_setAIdempotent
Create or update a webhook subscription. If id is provided the call updates that webhook (PUT). If omitted it creates a new one (POST) — url and events are then required. Use this for declarative 'ensure webhook X exists' workflows where the caller doesn't track which side of create/update it's on.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Webhook ID. Present → updates that webhook (PUT). Omitted → creates a new one (POST). | |
| url | No | HTTPS endpoint URL that will receive event payloads. Required on create; optional on update. | |
| active | No | Whether the webhook is active. Defaults to true on create. | |
| events | No | List of event types to subscribe to (e.g. 'message.received', 'email.bounced'). Required on create; optional on update. | |
| authConfig | No | Auth the platform presents to your endpoint on each delivery, IN ADDITION to the always-on X-Anima-Signature HMAC. One of: { type: 'none' }, { type: 'bearer', token }, { type: 'basic', username, password }, { type: 'custom_header', headerName, value }. Pass { type: 'none' } to remove existing auth. | |
| description | No | Optional human-readable label | |
| maxAttempts | No | Max delivery attempts before dead-lettering (1-10, default 3). Pass null on update to reset to the default. | |
| rateLimitPerMinute | No | Max deliveries per minute to this endpoint. Omit for unlimited; pass null on update to clear it. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that providing 'id' triggers an update (PUT) while omitting it triggers a create (POST), and that 'url' and 'events' are required on create. This adds context beyond annotations, which only indicate idempotence and non-read-only nature.
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 concise with 2-3 sentences that front-load the core action. Every sentence adds value without unnecessary repetition or fluff.
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 8 parameters, full schema coverage, and an existing output schema, the description adequately covers the tool's behavior. The create/update distinction and declarative use case are well explained, contributing to a complete understanding for an AI 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?
Schema description coverage is 100%, so the schema already documents each parameter thoroughly. The description adds high-level semantics (create vs update) but does not provide additional parameter-level details beyond what the schema already offers.
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 'Create or update a webhook subscription' and explains the id-based differentiation between create and update. It distinguishes this tool from siblings like webhook_list, webhook_delete, webhook_get, and webhook_test.
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 recommends using this tool for 'declarative ensure webhook X exists workflows where the caller doesn't track which side of create/update it's on.' This provides clear guidance on when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webhook_testA
Send a test event payload to a webhook to verify the endpoint is reachable and the signature verification on the receiver side works. Returns a deliveryId you can correlate with your endpoint's logs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID to send a test delivery to | |
| event | No | Event type to simulate in the test payload (e.g. 'message.received'). Defaults to 'message.received'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a write operation (readOnlyHint=false) but not destructive. Description adds return value context but does not disclose potential side effects like logging or state changes, leaving some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load action and purpose, then mention return value, with no extraneous 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 simple two-parameter tool and existing output schema, the description covers core functionality and return value, though it omits prerequisites like webhook existence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions, so the description adds no extra semantic value, meeting 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 tool sends a test event payload to a webhook to verify reachability and signature verification, distinguishing it from sibling tools like webhook_set, webhook_get, etc.
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 explains the purpose (verify endpoint and signature), implying use after webhook setup, but lacks explicit when-not-to-use or alternative tools.
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.
54 tool updates
v0.6.0- First observed
account_overview - First observed
agent_create - First observed
agent_delete - First observed
agent_get - First observed
agent_list - First observed
agent_update - First observed
domain_create - First observed
domain_delete - First observed
domain_get - First observed
domain_list - First observed
domain_update - First observed
domain_verify - First observed
domain_zone_file - First observed
email_attachment_get - First observed
email_draft_create - First observed
email_draft_delete - First observed
email_draft_get - First observed
email_draft_list - First observed
email_draft_send - First observed
email_forward - First observed
email_get - First observed
email_list - First observed
email_reply - First observed
email_search - First observed
email_send - First observed
email_thread_get - First observed
phone_call_create - First observed
phone_call_get - First observed
phone_call_list - First observed
phone_call_recording_get - First observed
phone_call_transcript_get - First observed
phone_number_list - First observed
phone_number_provision - First observed
phone_number_release - First observed
sms_get - First observed
sms_list - First observed
sms_send - First observed
sms_thread_get - First observed
sms_thread_list - First observed
usage_overview - First observed
vault_credential_create - First observed
vault_credential_delete - First observed
vault_credential_get - First observed
vault_credential_get_totp - First observed
vault_credential_list - First observed
vault_credential_search - First observed
vault_credential_update - First observed
vault_provision - First observed
voice_list - First observed
webhook_delete - First observed
webhook_get - First observed
webhook_list - First observed
webhook_set - First observed
webhook_test
TDQS
Scored across 54 tools
Each tool targets a distinct resource-action pair (e.g., email_send vs email_reply, sms_send vs phone_call_create), and resource groups (email, sms, phone, vault, domain, webhook, agent) are clearly separated. No two tools have overlapping purposes.
Tool names consistently follow a verb_noun pattern (e.g., agent_create, email_list, phone_number_provision) or a consistent noun_verb pattern within resource groups (e.g., webhook_set, vault_credential_get). No mixing of conventions or confusing abbreviations.
At 54 tools, the server is overloaded even for a multi-resource API. Many tools could be consolidated (e.g., draft CRUD vs email CRUD are separate, phone call tools are numerous). This exceeds the typical MCP scope and may confuse agents.
The server covers all major operations for each resource: CRUD for agents, domains, webhooks, vault credentials; plus specialized actions like email reply/forward, SMS thread management, phone call transcripts, and account/usage overviews. No obvious missing endpoints for the stated domain.
Maintenance
Related MCP Connectors
Build and send email, SMS, and push straight from your AI agent.
Messaging tools for AI agents: send messages, manage chats, groups and channels.
Communication stack for AI agents: SMS, AI voice calls, phone numbers, and account events.
Email for AI agents — send, receive as a webhook, manage domains, templates, routing.
Related MCP Servers
FlicenseBqualityFmaintenanceEnables interaction with Telnyx's telephony, messaging, and AI assistant APIs to manage phone numbers, send messages, make calls, and create AI assistants. Includes webhook support for real-time event handling and comprehensive tools for voice, SMS, cloud storage, and embeddings.4625-- AlicenseNot gradedqualityBmaintenanceProvides access to over 80 tools for managing OMICall and OMICRM APIs, including call center operations, ticket management, and multi-channel communication across platforms like Zalo and Facebook. It enables automated calling, agent management, and AI-powered text-to-speech capabilities through natural language.9 npm4MIT
- AlicenseAqualityCmaintenanceGives AI agents phone numbers, email, SMS, and voice calls as MCP tools, enabling them to provision numbers, capture 2FA codes, send messages, and make calls.15MIT
- AlicenseNot gradedqualityBmaintenanceExposes the full Chatwoot API as 129 tools for AI assistants, enabling account, contact, conversation, message, inbox, team, report, help center, automation, and custom attribute management, plus exclusive Kanban and scheduled message features.6 npmMIT